使用工具:HTTP抓包测试工具。
测试靶场名称:SQL injection vulnerability in WHERE clause allowing retrieval of hidden data
测试靶场地址:https://portswigger.net/web-security/sql-injection/lab-retrieve-hidden-data
构造语句查看是否存在漏洞:使用 HTTP 重放模块的数据处理功能,依次构造带有闭合符号(单引号和双引号)的请求参数,查看页面返回内容。
确认漏洞存在:当页面返回为“Internal Server Error”时,确定闭合符为单引号。
构造查询语句:构造查询语句Accessories' or 1=1 --+'尝试绕过限制查询商品。
绕过成功:成功绕过查询限制,获取到未发布商品的数据。
因为需要测试多个请求值,所以把数据发送到重放模块。在操作选项卡中把抓取到的数据发送到数据重放模块中。
在重放模块中,点击右侧选项卡打开数据处理模块:
数据处理模块
选择类型为编码,选择 URL 编码:
在数据处理模块中修改对应的值,之后点击【应用并发送数据包】。
1 SELECT * FROM products WHERE category = 'Accessories' AND released = 1 #默认查询语句
2 # 这条命令的含义是查找products表中类别(category)为'Accessories'且已经发布(假设released字段中1代表已发布)的所有产品记录。
1 构造查询语句
2 SELECT * FROM products WHERE category = 'Accessories' or 1=1 --+ AND released = 1;
3 # 输入语句为:Accessories' or 1=1 --+
4 # SELECT * FROM products:这部分与标准的SQL查询相同,意在从products表中选择所有列。
5 # WHERE category = 'Accessories':这是查询条件的一部分,表示只选择那些category列为'Accessories'的记录。
6 # or 1=1:这里引入了一个始终为真的条件(因为1确实等于1),这意味着无论category列的值是什么,这个条件都会使得整个WHERE子句为真。这是SQL注入常用的技巧,用来绕过原本的条件限制,使查询结果包括所有记录。
7 # -- + AND released = 1;:这部分是一个注释指示符和注释内容的开始。在SQL中,--后面的内容被视为单行注释,直到行尾。因此,--之后的 AND released = 1; 实际上不起到任何查询逻辑上的作用,它和之后的任何内容都被视为注释而被数据库忽略。
工作原理:
● 应用程序将用户输入直接拼接到 SQL 查询语句中,而没有进行充分的验证或过滤。
● 攻击者利用这些输入字段,构造包含恶意 SQL 代码的输入,以达到修改查询逻辑、获取敏感数据或执行其他恶意操作的目的。
2. 输入验证和过滤:在接受用户输入之前,对其进行严格的验证和过滤,只允许预期的输入格式。例如,对于数字输入,确保只包含数字字符;对于文本输入,可以使用白名单过滤器,只允许特定的字符或模式。
3. 最小化权限:确保应用程序连接到数据库的账户具有最小的权限,以限制攻击者在发生注入时能够执行的操作。例如,避免使用具有管理员权限的数据库账户进行应用程序连接,而是为应用程序分配只读或仅执行必要操作的账户。
4. 使用ORM框架:使用对象关系映射(ORM)框架可以帮助将数据库操作与用户输入隔离开来,并提供内置的参数化查询功能,从而减少 SQL 注入的风险。
5. 错误消息处理:避免向用户披露详细的错误消息,特别是涉及数据库的错误消息。攻击者可以利用这些信息来获取有关数据库结构和查询逻辑的重要信息。
6. 定期更新和漏洞修复:及时更新应用程序和相关组件,以确保已修复已知的 SQL 注入漏洞和其他安全漏洞。
下载和反馈
原文始发于微信公众号(无糖反网络犯罪研究中心):TangGo | Burpsuite靶场-通过SQL注入获得隐藏的数据
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论