sqli-labs(38-41)

0x01 原理

堆叠注入,顾名思义就是很多语句结合在一起进行注入,在sql语句中,以;标志着一条语句的结束,要实现堆叠注入就是用;连接多条语句进行注入,即我们可以结束一个语句后,构造下一个语句。而union select也是将两条语句结合在一起一起执行,两者有何区别?区别在于联合注入只能使用查询语句,而堆叠注入可以使用任何语句,可以使用任何语句并不代表着它没有限制,它可能受到API,数据库引擎,权限不足都会限制堆叠注入,下面是个大牛实验得出的结果
在这里插入图片描述
但是我使用的Mysql/PHP就能实现堆叠注入,可能是因为数据库和PHP版本不同吧。union select和堆叠注入虽然有区别,但是两者经常结合在一起使用,一般堆叠查询注入语句需要联合查询注入所爆出来的数据库名,表名等信息。但是堆叠注入也有不足之处,在我们的web系统中,代码只返回一个查询结果,所以堆叠注入无法在前端看见,一些报错信息或结果被忽略,无法获取造成了注入的苦难。

注入过程

Less-38

1.根据错误回显确定闭合方式,闭合方式为'--+
在这里插入图片描述
2.接下来可以采取前面的联合查询查出数据库名,表名等,知道这些信息了就可以来尝试堆叠注入了
先把库名拿出来吧
在这里插入图片描述
尝试构造一个创建名为stacked的数据库的语句http://127.0.0.1/sqli-labs/Less-38/?id=1%27;create%20database%20stacked--+,来查询一下是否创建成功

在这里插入图片描述
创建成功,说明可以实现堆叠注入,接下来就是构造各种增删改除sql语句进行堆叠注入了。

Less-39

本关和Less-38一样,只是闭合方式为数字型,即直接注入,不需要闭合

Less-40

本关不回显错误信息,可使用联合注入查询,爆数据,闭合方式为')--+

Less-41

本关不回显错误信息,可盲注,数字型闭合方式,直接可入,不需要注释

堆叠注入实战

1.[强网杯2019-随便注]

经常使用的堆叠注入语句:
show databases;查询所有数据库
show tables;查询所有表
show columns from table;查询表table的所有字段

结合在注入时可能会过滤某些关键字,引入sql语言的预处理语句:
set;prepare;execute;
该赛题的具体使用:
set @sql=concat('se','lect * from `191930303`');
prepare sq from @sql;
execute sq;
这里注意一个函数strstr()函数,大小写敏感,所以可以采用大小写绕过。

2.[SUCTF-2019 EasySql]

该赛题结合堆叠注入,||,语句猜测
在Oracle中 ||作用为字符串连接功能,但是在sql中默认为异或符号,经测试,
select 1||'aaa';--->结果为1;
select 0||'aaa';--->结果为0;
select 0||1--->结果为1;
而根据源码知道这里的查询语句为:select $_POST['query']||flag from Flag;而且还存在黑名单。
而这里有一个参数sql_mode,它定义了sql应该支持何种语法,PIPES_AS_CONCAT模式下,||将视为字符串连接功能的运算符,所以可以更改sql_mode
set sql_mode=PIPES_AS_CONCAT
payload:
1;set sql_mode=PIPES_AS_CONCAT;select 1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值