随便注
万能钥匙返回全部数据证明存在注入点,尝试联合查询后发现存在WAF:
return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);查表名
1';show tables; #爆 words 列名:
1'; show columns from `words`;#爆 1919810931114514 列名:
1'; show columns from `1919810931114514` ;#这两处用了`符号。

显示我们在words表中查找,但是真正的flag在1919810931114514中。
下面拿flag有很多种姿势。
1.官方姿势
整理完这样子的:
将words表重命名为words1,1919810931114514重命名为words,把表的flag属性修改为id属性,使得在查找id的时候可以查找到flag,然后就可以访问了。
2.预处理语句绕过关键词过滤
本题可以利用 char() 方法将 ASCII 码转换为 SELECT 字符串,接着利用 concat() 方法进行拼接获得查询的SQL语句,最后执行即可,payload如下:
或者不用char()方法,直接将字符串相加也可以绕过限制:
3.RCE
报错注入后可以看见用户为root,直接上马拿权限。
先上马:
RCE:
读flag。
4.handler
handler代替select进行查询。
Last updated