V&N2020 公开赛TimeTravel

知识点

CGI模式下的HTTP_PROXY漏洞

解题

11.png

审计一下代码,发现 get (“127.0.0.1:5000”) ,然后将返回的消息体 进行json解码,然后判断 ,执行/readflag

先查一下phpinfo() ; 了解一下有关php的信息:

12.png

可以看到Server API 是CGI模式

简单了解一下CGI模式的流程:(个人理解可能存在错误欢迎指出)

13.png

流程:

首先客户端发送一个HTTP请求给WEB服务器,然后web服务器会和CGI进行交互(执行后端代码)并返回结果给Web服务器,当执行$response=$client->get(‘http://127.0.0.1:5000')的时候,web服务器会向代理发送HTTP请求,然后代理返回一个响应给web服务器,然后Web服务器再与CGI进行交互(执行后端代码)并返回结果给web服务器,然后web服务器返回HTTP响应给客户端浏览器解析。

所以我们的目的就是想办法在服务器代理那里进行伪造,CGI模式有个特点,会把请求的HTTP头自动加上HTTP_,并且设置为服务器的环境变量。所以如果我们在请求头构造 Proxy:xxxx,那么在服务器端就会注册为HTTP_PROXY 环境变量,而这个xxxx我们可以伪造成我们可控的IP,从而实现消息的伪造。

还是得用到BUU内网的靶机进行监听,然后把伪造的包发给WEB服务器。

我们在靶机上对 6666端口进行监听,并且将 伪造的响应包 作为输入,发给WEB服务器,在靶机上新建一个1.txt文件,内容为:

14.png

然后客户端本地bp抓包,增加Proxy 头,使得我们内网的这个靶机称为代理:

15.png

注意是6666端口,因为我们监听的是6666端口。174.1.152.50 为我们打开的内网靶机的IP地址。

参考文章:

https://www.laruence.com/2016/07/19/3101.html

https://www.cnblogs.com/JeffKing11/p/12430571.html