漏洞复现-cgi-httpoxy
0x00 实验环境
攻击机:Win 10
靶机也可作为攻击机:Ubuntu18 (docker搭建的vulhub靶场)
0x01 影响版本
信息泄露,配置错误的版本
0x02 漏洞复现
简介:简单的信息泄露漏洞。无法直接getshell,只能查看到一些敏感目录或者其他IP信息。
(1)访问页面:
(2)发送至repeater模块,并请求index.php文件:
会发现响应包的“origin”模块与HOST对应,按照复现文档来看,这里是由请求包决定,而HTTP协议中,Proxy对应的是:
如果你在Header中发送一个Proxy:xxxxxx, 那么PHP就会把他注册为HTTP_PROXY环境变量,于是getenv(“HTTP_PROXY”)就变成可被控制的了. 那么如果你的所有类似的请求, 都会被代理到攻击者想要的地址,之后攻击者就可以伪造,监听,篡改你的请求了。
漏洞前提:
- 你的服务会对外请求资源
- 你的服务使用了HTTP_PROXY(大写的)环境变量来代理你的请求(可能是你自己写,或是使用一些有缺陷的类库)
- 你的服务跑在PHP的CGI模式下(cgi, php-fpm)
想象一下,就是将你的服务器的请求都经过一个代理,然后这个代理就能监听你的请求啦,比如说这样:
在你的私人vps上开启9989端口:
然后在请求包中代理到你的服务器:(添加:Proxy:xx.xx.xx.xx:9989)
就能发现服务器出现报错信息,泄露了大量的网站路径信息,同时,vps监听端口处也出现了窃取的情况:
0x04 漏洞原理
- httpoxy是cgi中的一个环境变量;而服务器和CGI程序之间通信,一般是通过进程的环境变量和管道。
- CGI介绍
- CGI 目前由 NCSA 维护,NCSA 定义 CGI 如下:CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP 服务器,提供同客户端 HTML 页面的接口。
- CGI 程序可以是 Python 脚本,PERL 脚本,SHELL 脚本,C 或者 C++ 程序等。
- CGI是比较原始的开发动态网站的方式。
- 工作原理:
- 客户浏览器访问url,向web服务器发出请求;
- 服务器接收到后解析request包,并将数据包中的各个参数写进进程的环境变量,服务器调用CGI程序处理请求;
- CGI程序生成动态内容,交给服务器,服务区返回response包给浏览器