0x01
首先这道题打开之后是一个页面,能过提交参数,题目提示我们这里输入域名
这里我们尝试输入域名,比如baidu.com等,然后页面没有任何反应,那接下来我们试着输入百度的ip试试,通过ping www.baidu.com找到百度的ip
结果如下:
我们发现这里输入的应该是IP地址,那我们再试试127.0.0.1
到这一步,我们可能都想到这里能不能执行命令呢?我们试试127.0.0.1 | ls
可见这里无法执行命令
0x02
在?URL=传参这里,传入的是url编码之后的值,这里我们让它进行报错。因为url编码是16进制,转化为ASCLL码就是0-127,那我们穿一个超过127的就会引起报错,然后我们看它返回的报错信息,这里我传入了一个%90,结果如下:
这里面爆出了很多内容
从上面两处我们可以知道的信息有:
1.这里使用的是python的脚本来执行ping
2.这里使用了Django框架
然后我因为做的是XCTF上的题,这里没有给出提示,比赛的时候,这道题还给了一道提示:
RTFM of PHP CURL===>>read the fuck manul of PHP CURL???
这个是关于php curl的,这里找到一些介绍:
The full data to post in a HTTP “POST” operation. To post a file, prepend a filename with @ and use the full path. This can either be passed as a urlencoded string like ‘para1=val1¶2=val2&…' or as an array with the field name as key and field data as value. If value is an array, the Content-Type header will be set to multipart/form-data.
当curl发送POST数据的时候,在文件名前面加上@并使用完整的路径。那么,文件类型可以在文件名后以type=mimetype的格式指定。可以将其作为urlencoded字符串进行传递,也可以作为以字段名为jian6,ziduan数据为值的数组进行传递
简而言之:如果我们在文件前面加上@来传递文件,那么就会解析
0x03
由于这里是Django框架,所以这里存在settings.py配置文件,那我们就直接查看这个文件
?url=@/opt/api/api/settings.py
我们得到下图报错信息
其中有数据库的信息:
那我们就查看一下这个数据库
?url=@/opt/api/database.sqlite3
直接搜索CTF,得到下图
到这里拿到flag