sql注入堆叠注入、二次注入、宽字节注入、http头注入

1.堆叠注入

堆叠注入的原理很简单就是使用分号来执行两条不同命令,因为在数据库中就是使用分号来进行语句的分隔的,但是使用堆叠注入,由于第一条语句的原因,并不会插入的堆叠注入返回任何结果,但实际上是执行了的。我们在注入的过程中,union后面只能跟select查询语句,而堆叠注入可以进行增删改查,对数据库危害极大属于高危漏洞。
我们首先来看sql-labs的38关的原代码
在这里插入图片描述
他的sql执行函数使用的是mysqli_muti_query而不是我们常看见的mysqli_query,他们最重要的区别就是前者能执行多条语句,而后者只能执行一条语句。所以当有执行函数使用mysqli_muti_query切没有对传参做严格过滤的时候我们可以使用堆叠注入。我们来验证一下。
在这里插入图片描述
判断注入点闭合逃逸我就不多讲了,前面说过很多次了,接下来直接insert

pyload:id=1';insert into users(username,password)values("2222","2222")--+

在这里插入图片描述
进库查看结果,执行成功:
在这里插入图片描述

2.二次注入

二次注入严格上说应该是逻辑上的问题,比如我在注册时注册了admin‘#这个账户,#在传入数据库时被转义当成字符串处理,没有产生注释的效果,而在传出时没有进行转义,当我们修改admin’#的密码,由于#是注释符,所以我们修改的是admin的密码。
我们看sql-labs24关的代码,以下是注册新用户时的代码
在这里插入图片描述
我们可以看到使用了字符串强制转换的函数,就是在特殊符号前加反斜杠强制转义,但是在修改密码的时候,他的sql语句是这样的
在这里插入图片描述
由于我们的用户名是admin‘#,所以语句就变成了

update users set password=’$pass‘ where username='admin'#'.......

#后面的就被注释了,修改了admin的密码

3.宽字节注入

前面我们说了使用mysql_escape_string来强制转换特殊字符如单引号#等,那我们有没有其他方法来绕过这个防御机制呢,答案是有的,那就是宽字节注入。前提是数据库使用的是GBK编码。
这里由于比较简单,所以只将原理就不演示了
原理是当数据库使用GBK编码时,我们输入一个单引号‘会被转义函数强制加上反斜杠变成’ ,这样单引号就只是一个字符没有特殊含义,GBK编码一个汉字和一个英文单词都占两个字符,当数据库字符集为GBK时,%df可以理解为半个汉字,当%df或者%dc和转义符\在一起时,数据传输到数据库中,GBK会4个字符4个字符的读取,他们两个的ascii码凑在一起是表示一个汉字的ascii码,所以转义符就被吃掉了。所以只需要在单引号前加%df就ok了

3.http头注入

这个比较简单,很多网站都会把cookie或者refer等http头存入数据库中,所以我们只需要抓包在cookie或者refer等地方插入注入语句就ok了,这个告诉我们不要只盯着肉眼可见的地方进行sql注入,只要是与数据库有交互的点,都可能是一个注入点

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值