Problem: [闽盾杯 2021]日志分析
[[toc]]
思路
- 解题大致思路
提取出日志中的password字段,url解码

分析一下这个sql注入代码。
- 最外层
ORD(*)>64,判断其内部查询的字符的ascii大小. - 次层
MID(String,a,b),从String中第a个位置开始,提取第b个字符。 - 里层
SELECT IFNULL(CAST(password AS NCHAR),0x20) FROM security.users ORDER BY id LIMIT 0,1 ,取出password
所以我们的目标就是根据最外层的ascii值判断。
这是一个典型的二分搜索,当字符比64大,则增加比较值的大小,当字符比64小,则减少比较值的大小。
以第一位字符为例:

字符ascii值范围变化过程:
(64,126]->(96,126]->(96,112]->(104,112]->(108,112]->(108,110]->(108,109]
最后一步,按照二分的思路,如果>109为true,那么会再判断一次>110。所以根据最后一次判断,缩减的范围应该为(108,109]
以此类推,查询所有ascii值的字符,即可得到flag。
