漏洞复现-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包给浏览器
原文地址:https://www.cnblogs.com/cute-puli/p/14648432.html