1、知识补充
本篇主要演示user-Agent和Cookie注入
以下是一些可能的HTTP header注入点:
- User-Agent: 有些网站可能会记录并分析访问者的User-Agent字符串以了解用户的浏览器和设备信息。如果这些信息被用于动态生成SQL查询,并且没有进行适当的输入验证或转义,那么这里就可能存在SQL注入的风险。
- Referer: Referer头用于表示当前请求来自哪个页面。和User-Agent一样,如果Referer的内容被不安全地用于SQL查询,那么也可能存在注入风险。
- Cookie: Cookie通常用于跟踪用户会话和保存用户偏好。如果应用程序错误地将Cookie的内容用于SQL查询,这也可能是一个注入点。特别是当应用程序使用Cookie中的值来查询数据库时,风险更大。
- X-Forwarded-For 和其他与IP地址、地理位置等相关的头部:这些头部有时被用于记录或限制基于IP的访问。如果它们被不安全地用于数据库查询,也可能存在SQL注入的风险。
- 自定义头部:在某些情况下,应用程序可能会接受并处理自定义的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 被正确执行。
为什么造成这样的差异:
-
解析方式:
User-Agent
:作为整体字符串处理和记录。Cookie
:解析成多个键值对,每个键值对单独处理。
-
拼接方式:
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 使其在原有值基础上有效执行。