题目地址:攻防世界-流量分析
https://adworld.xctf.org.cn/challenges/details?hash=97f0c2dd-dd00-4b0c-9ac9-e789d75fdc1f_2&task_category_id=1&rwNmOdr=1674185677488
下载附件使用WireShark进行分析,题目描述提示sql注入,直接过滤http数据包
一眼就瞄到了flag这几个字符,仔细一看GET请求就是sql注入语句,跟踪一下这一条HTTP数据流看下详细数据包内容,选中数据包,右键选择跟踪流-HTTP流
上图中圈起来的部分经过了URL编码(通过%20这种特征判断),使用搜索引擎搜索个在线URL解码网站,把下列内容进行解码
/?id=1'%20and%20ascii(substring((select%20keyid%20from%20flag%20limit%200,1),1,1))=32%23
经过解码就看的很清楚了,跟flag相关具体内容为判断flag的第一个字符对应的ascii表数值是不是等于32
如果是则条件为真,代表flag的第一个字符ascii表数值为32(and的左边是1永远为真,右边flag的第一个字符对应的ascii表数值等于33则为真),解析完了第一个数据包内容,接下来继续看其他GET请求数据包
发现变化的内容只有=后面的数值,说明了sql注入过程中在猜flag的第一个字符ascii值
鼠标往下滑,观察GET请求数据包内容变化
发现sql注入过程开始猜第二个字符了,之前做过类似这种sql注入的都知道,这种情况一般是第一个字符猜对之后开始猜第二个字符,这样子就可以直接看猜第一个字符的最后一个数据包中的ascii数值对应的字符就是flag的第一个字符
查看数据包发现ascii数值为102,对应ascii表查看102对应字符为f,代表flag的第一个字符为f
以此类推即可知道flag的第二个字符,第三个字符.........最后解出来的flag为
flag{c2bbf9cecdaf656cf524d014c5bf046c}