博客公告 / A BLACK PATH TOWARD THE SUN - HTTP Tunnel 工具简介

作者: Wyc@YSRC    发布时间: 2016 八月 12

PART ONE - 简介

NCC Group 作为老牌的代码安全审计机构,在 OpenSSL HeartBleed(心脏出血漏洞)爆发之后为 OpenSSL 提供代码安全性的审计服务。同时他们在 Github 上也提供很多开源的工具和解决方案,从 NCC Group 主页可以看到很多超过 100+ star 的项目,而在最近 Black Hat US 的 Arsenal 展区他们带来了新的开源项目 A Black Path Toward The Sun (ABPTTS),一款用以在复杂网络环境下通过被控制的 Web 应用服务器打通 HTTP Tunnel 建立网络连接的工具。

    

在 ABPTTS 出现之前,已经有了 netcat(TCP 端口转发)、httptunnel(TCP - over - HTTP)、 tunna (HTTP Tunnel)、reGeorg(Socks5)等类似的网络工具,而 NCC Group 开发 ABPTTS 的目的将这些工具各自的优秀之处结合起来并简化成一个工具。 ABPTTS 主要针对的使用情况有两种:

PART TWO - 举个栗子

现在我们假设一个真实的场景如下:

第二点使 A 没办法向目标服务器建立任何直连 Shell,而第三点则让 A 没办法和目标服务器建立反向 Shell,第四点则使 A 没办法和目标服务器建立 DNS 隧道。

在这样的复杂网络环境下如果不建立 HTTP 隧道,那么 A 只能通过 Webshell 获得的非(半)交互式 Shell 来逐条地执行命令,这样极为不便并且很多需要交互的软件不能运行,更不用说将 Web 服务器作为跳板使用 RDP 连接内网其他主机了。

这个时候 A 就可以通过 ABPTTS 建立起一个 HTTP Tunnel,而通过这个 HTTP Tunnel 攻击者可以直接访问到目标服务器所能访问到的内容,因为 A 和目标服务器通信是通过 HTTP Tunnel 符合防火墙等策略,能够通过防火墙等的过滤。

使用 ABPTTS 建立 HTTP Tunnel 在客户端和服务端都需要进行特定操作:

具体步骤如下:

  1. A 在本机执行

    python abpttsfactory.py -o tomcat_walkthrough

将会看到如下输出:

  1. [2016-08-10 10:53:34.839592] ---===[[[ A Black Path Toward The Sun ]]]===---
    [2016-08-10 10:53:34.839674]    --==[[        -  Factory  -        ]]==--
    [2016-08-10 10:53:34.839706]             Ben Lincoln, NCC Group
    [2016-08-10 10:53:34.839721]            Version 1.0 - 2016-07-30
    [2016-08-10 10:53:34.841099] Output files will be created in "~/Desktop/Pentest/Python/ABPTTS/tomcat_walthrough"
    [2016-08-10 10:53:34.841121] Client-side configuration file will be written as "~/Desktop/Pentest/Python/ABPTTS/tomcat_walthrough/config.txt"
    [2016-08-10 10:53:34.841137] Using "~/Desktop/Pentest/Python/ABPTTS/data/american-english-lowercase-4-64.txt" as a wordlist file
    [2016-08-10 10:53:34.849013] Created client configuration file "~/Desktop/Pentest/Python/ABPTTS/tomcat_walthrough/config.txt"
    [2016-08-10 10:53:34.851994] Created server file "~/Desktop/Pentest/Python/ABPTTS/tomcat_walthrough/abptts.jsp"
    [2016-08-10 10:53:34.853073] Created server file "~/Desktop/Pentest/Python/ABPTTS/tomcat_walthrough/abptts.aspx"
    [2016-08-10 10:53:34.853882] Created server file "~/Desktop/Pentest/Python/ABPTTS/tomcat_walthrough/war/WEB-INF/web.xml"
    [2016-08-10 10:53:34.854348] Created server file "~/Desktop/Pentest/Python/ABPTTS/tomcat_walthrough/war/META-INF/MANIFEST.MF"
    [2016-08-10 10:53:34.855520] Prebuilt JSP WAR file: ~/Desktop/Pentest/Python/ABPTTS/tomcat_walthrough/DroopyWhimsical.war
    [2016-08-10 10:53:34.855541] Unpacked WAR file contents: ~/Desktop/Pentest/Python/ABPTTS/tomcat_walthrough/war

    可以看到在当前目录下生成了一个 tomcat_walkthrough 文件夹,而文件夹内有所有 ABPTTTS 支持的服务端脚本(JSP、AWAR、ASPX等,但是暂不支持 PHP)和对应的配置文件如下所示。


  2. 根据 Web 服务器的类型选择对应的服务端脚本并上传到 Web 服务器上,本例中则使用 JSP 脚本,上传到服务器后直接访问会出现如下界面,类似一串随机的英文 + 数字,这就是服务端脚本对信息进行加密之后的结果,加解密方法具体可以参考 abptts.jsp 和 abpttsclient.py 中的代码。因为每次通过 abpttsfactory.py 产生的通信密钥是随机的,所以访问不同的 abptts.jsp 得到的字符串也都会不同。


  3. 看到上述字符串后可以确定服务端脚本正常工作,A 这时可以在本机运行

    python abttsclient.py -c tomcat_walkthrough/config.txt -u http://x.x.x.x:8080/abptts.jsp -f 127.0.0.1:22222/127.0.0.1:22

这里 -u 指定对应服务端脚本的 URL;-f 指定对应的映射关系,可以抽象为 LOCAL_NETWORK_IP:LOCAL_PORT/REMOTE_NETWORK_IP:REMOTE_PORT。-c 指定的对应服务端脚本的配置,config.txt 里包含 HTTP Tunnel 各项配置内容,格式如下:

headerNameKey:::::::x-sourcing-unisex-extolling
headerValueKey:::::::6ivKbot3qLL4ATtoMWrS15T2pay5Q7bz/x3i8qA=
encryptionKeyHex:::::::635587d56a6ecb687cc1b20f0aec4804
.........

运行脚本后可以看到 HTTP Tunnel 已经打通,本地 22222 端口正在等待连接。

[2016-08-10 11:24:53.318090] ---===[[[ A Black Path Toward The Sun ]]]===--- [2016-08-10 11:24:53.318125]    --==[[       -  Client  -          ]]==-- [2016-08-10 11:24:53.318131]             Ben Lincoln, NCC Group [2016-08-10 11:24:53.318137]            Version 1.0 - 2016-07-30 [2016-08-10 11:24:53.319952] Listener ready to forward connections from 127.0.0.1:22222 to 127.0.0.1:22 via http://x.x.x.x:8080/abptts.jsp [2016-08-10 11:24:53.319978] Waiting for client connection to 127.0.0.1:22222

4. 此时便可以直接通过 HTTP Tunnel 进行 TCP-Over-HTTP 通信,建立 SSH 连接如下。

ssh root@127.0.0.1 -p 22222 -i ~/.ssh/xxx/id_rsa

运行脚本后可以看到 HTTP Tunnel 已经打通,本地 22222 端口正在等待连接。

PART THREE - 讨论

其实在 ABPTTS 出现之前就已经有不少类似且好用的工具,那么为什么还要重复造轮子呢?官方手册中指出,开发 ABPTTS 的主要目标有如下几个:

顺道一提,由于 HTTP Tunnel 确实不是一项新的技术之前也有类似成形的项目,使用的比较多的有 Tunna 和 HTTPTunnel 这两个,试着了解了一下这两个项目,下面做出一些对比:

Tunna

HTTPTunnel

上述这两个项目均已经停止更新,Tunna 上次更新在两年前而 HTTPTunnel 上次更新是 2010 年。ABPTTS 项目在 Github 开源之后初步了解体验了一下,基本上述的内容基本都已经实现,下面也进行相对应的总结。

ABPTTS

虽然 ABPTTS 在使用中仍有不足之处,但是相比之下已经有超越上述两个项目的实力,另外看了一眼他的 TODO 还是很有意思的,想深入了解的话可以在 ABPTTS 的 Git 文档查看。


文中内容如有错误,敬请斧正,欢迎交流。

评论