本题涉及的知识点:
wireshark的使用,延时注入,URL解码
解题思路
打开附件,得到一个流量包,用wireshark打开
分析流量包:使用http追踪流进行追踪,得到如图所示的信息。
通过观察post请求可以发现,包含有flag字样,猜测flag就在post请求中,由于请求中的URL不便于阅读,且有乱码,先对这段请求进行encodeURL解码。
第一次encodeURL解码
第一次解码结果
解码一次之后发现URL仍不清晰,进行第二次解码,第二次解码使用encodeURLComponent进行解码,解码之后得到
第二次encodeURLComponent解码
第二次解码结果
可以得到URL的执行代码
id=1) and if((ascii(substr((select flag from flag),1,1))='40'),sleep(3),0)
id=1) and if((ascii(substr((select flag from flag),1,1))='40'),sleep(3),0)
代码解读:select flag from flag:查询flag
substr(str, 1, 1):截取字符串str,从str的第1位开始,长度为1的字符串
ascii(s):表示把字符s转化为ASCII码
sleep(3):表示休眠3秒
代码表示如果if条件成立,则休眠3秒(如果查询的字符的ASCII码等于'40',则休眠3秒)
所以可以得到本题考查延时注入
返回wireshark,查询延时超过3秒的http请求
http.time >=3
如图所示,时间大于3秒的所有的http请求。
获取flag对应的ASCII码
对这些请求中所有的post请求进行一次encodeURL解码和一次encodeURLComponent解码,if条件中的ASCII码就是flag对应位置的ASCII码,将这些ASCII码保存,放进Python里边进行解码即可得到flag。
def AsciiToStr(list1):
out = ''
for I in list1:
out += chr(I)
return out
s1 = [102, 108, 97, 103, 123, 49, 113, 119, 121, 50, 55, 56, 49, 125]
print(AsciiToStr(s1))
最终得到的flag为:flag{1qwy2781}