题目描述:抓住那只猫。界面如下:
1. 思路分析
界面很简单,只有一个输入框,提示我们输入域名,我们随便输入一个baidu.com
发现这个域名赋值给url参数传递到后台。因此,这里能做文章的地方只有这个url参数,大概率是命令注入或者sql注入。
既然输入的是url,我们尝试输入下本地地址127.0.0.1
发现有回显了,后台对我们输入的url执行了一个ping命令,接下来我们尝试进行命令注入,输入baidu.com;ls
此时,发现跳出一个提示:Invalid URL(无效的URL),说明存在WAF拦截
通过试错,发现常见的命令注入字符都被限制了,比如; " ' | & 这些,尝试绕过,发现无效。
到了这里,感觉已经超出了我的知识面了。因此,网上找找答案。
参考网上的资料https://www.cnblogs.com/chrysanthemum/p/11480150.html
资料中给出了相应思路(大部分在我的知识面范围之外):
a. @字符没有进行限制,利用该字符可以读取文件内容
b. url中携带超过ascii码表示范围的宽字节会打印出堆栈,堆栈会暴露出服务端的关键信息
利用以上两点一步一步获取到相应的文件,最终拿到flag
2. 解题过程
2.1 输入一个超过ASCII范围的宽字节,输入128试试,128转成url编码为%80
出现报错了,报错结果用html打开,看是否存在什么有用的信息
按照网上大佬们的解法,这里会暴露出路径,但是仔细查看那个报错的html文件,除了路径,配置信息也暴露出来了
因此,这里我们直接尝试访问这个数据库文件即可
2.2 输入url=@/opt/api/database.sqlite3
成功在数据库中找到flag:WHCTF{yoooo_Such_A_G00D_@}
总结:非常综合的一道题, 考察的点非常多,分别涉及到django开发,python字符编码,curl中post @+文件名文件上传。整道题涉及的知识点很多都在自己的知识体系之外,佩服大佬们能解出这道题
参考资料:https://www.cnblogs.com/chrysanthemum/p/11480150.html