5、HTTP header注入(详解)

1、知识补充

本篇主要演示user-Agent和Cookie注入

以下是一些可能的HTTP header注入点:

  1. User-Agent: 有些网站可能会记录并分析访问者的User-Agent字符串以了解用户的浏览器和设备信息。如果这些信息被用于动态生成SQL查询,并且没有进行适当的输入验证或转义,那么这里就可能存在SQL注入的风险。
  2. Referer: Referer头用于表示当前请求来自哪个页面。和User-Agent一样,如果Referer的内容被不安全地用于SQL查询,那么也可能存在注入风险。
  3. Cookie: Cookie通常用于跟踪用户会话和保存用户偏好。如果应用程序错误地将Cookie的内容用于SQL查询,这也可能是一个注入点。特别是当应用程序使用Cookie中的值来查询数据库时,风险更大。
  4. X-Forwarded-For 和其他与IP地址、地理位置等相关的头部:这些头部有时被用于记录或限制基于IP的访问。如果它们被不安全地用于数据库查询,也可能存在SQL注入的风险。
  5. 自定义头部:在某些情况下,应用程序可能会接受并处理自定义的HTTP头部。如果这些头部的值被用于数据库查询,并且没有进行适当的验证或转义,那么也可能存在注入风险

2、user-Agent注入

这是一个登入框,通过bp抓到两个包,如何判断是不是自己想要的包,看user-agent跟cookie字段内容,两个包UA头部信息都一样,差别在于cookie。一般来说cookie信息是由服务器发下来给浏览器的,现在抓的是浏览器发给服务器的,原因:

一般页面登入了后,为了避免重复登入,你跳转页面是带着cookie信息跳转,所以会将带有账户密码的cookie储存至服务器

3、测试注入点

user-agent测试

cookie测试

4、构建payload

4.1、构建user-agent注入payload

payload:jim ' or updatexml(1,concat(0x7e,version()),0) or '

4.2、构建cookie注入payload

payload1:' or updatexml(1,concat(0x7e,version()),0) or '

payload2:'and updatexml(1,concat(0x7e,version()),0)#

5、两者差异

可以发现,user-agent注入是用payload覆盖了原有数据,而cookie是将payload插入到user后面

在 SQL 注入中,User-Agent 和 Cookie 的注入点处理方式不同,主要是因为它们在服务器端被解析和使用的方式不同。

user-agent注入:

  • User-Agent 字段通常在服务器端作为一个字符串整体被记录或处理。
  • 当你将注入 payload 插入 User-Agent 字段时,整个字段的值被使用并插入到数据库查询中。
  • 这种方式确保了你的 payload 被完整地插入和执行,因为服务器直接使用了你提供的整个 User-Agent 字段。

cookie注入:

  • Cookie 字段的处理方式与 User-Agent 不同,Cookie 通常包含多个键值对,每个键值对被服务器解析并作为单独的变量使用。
  • 当你将 payload 插入到 Cookie 字段中时,它只是被插入到特定的键值对中(如 ant[uname]),而不是覆盖整个 Cookie 字段。
  • 因此,注入的 payload 只是作为 ant[uname] 的值的一部分,在数据库查询中,可能会像这样被处理:
  • SELECT * FROM users WHERE uname = 'admin' or updatexml(1,concat(0x7e,version()),0) or ''
  • 这种情况下,payload 被嵌入到原始值 admin 之后,并且由于 SQL 查询的拼接规则,payload 被正确执行。

为什么造成这样的差异:

  1. 解析方式

    • User-Agent:作为整体字符串处理和记录。
    • Cookie:解析成多个键值对,每个键值对单独处理。
  2. 拼接方式

    • User-Agent:整个字段被拼接到 SQL 查询中,payload 覆盖了原有内容。
    • Cookie:每个键值对被单独处理,payload 插入到特定键的值中,而不是覆盖整个 Cookie

为什么一个只能用or,一个可以用or或者and:

        1.User-Agent 注入

  • User-Agent 通常在查询条件中是一个整体,因此使用 AND 时需要确保前面的条件为真,这在静态字符串如 jim 的情况下往往不成立。
  • 因此,使用 OR 可以绕过前面的条件,直接执行后面的注入条件。

        2.拼接方式

  • Cookie 被解析为多个键值对,每个键值对单独使用并插入到查询条件中。
  • 在这种情况下,如果前面的条件(如 admin)存在,AND 是可以使用的,因为它附加了一个新的条件,而不是替代原有的条件。
  • 使用 OR 确保无论前面的条件是否为真,后面的条件都可以执行。

6、总结

1、抓包要根据包信息和页面功能来判断内容是不是想要的,比如cookie内容

2、payload选择要判断有一个已知内容为真,就可以用and或者or;判断不了就用or

3、user-agent注入:因为它是作为一个整体字符串处理,你可以直接覆盖整个字段的值。

4、cooke注入:因为它是解析为多个键值对,你需要确保你的 payload 完全覆盖特定键的值,或者设计你的 payload 使其在原有值基础上有效执行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值