一、文章大纲
什么是SQL 注入 (SQLi)?
如何查找和利用不同类型的 SQLi 漏洞?
如何防止 SQLi?
1.1 什么是SQL注入?
SQL注入(SQLi)是一种 Web 安全漏洞,允许攻击者干扰应用程序对其数据库进行的查询。这可能允许攻击者查看他们通常无法检索的数据。包括属于其他用户的数据,或应用程序可以访问的任何其他数据。在许多情况下,攻击者可以修改或删除这些数据,从而导致应用程序的内容或行为发生持续更改。简单点来说就像在餐厅点单时,服务员误把"1杯咖啡;清空库存"当作正常订单执行,SQL注入就是黑客通过输入特殊指令,让数据库"误操作"泄露敏感数据。
在某些情况下,攻击者可以升级 SQL 注入攻击,以破坏底层服务器或其他后端基础设施。它还可能使它们能够执行拒绝服务攻击。
1.2 成功的SQL注入攻击会产生什么影响?
成功的 SQL 注入攻击可能导致对敏感数据进行未经授权的访问.例如我们可以通过SQL注入获取密码,信用卡详细信息,个人用户敏感信息。
1.2.1 实现原理:
通过未过滤的用户输入,在SQL查询语句中插入恶意代码,例如:
SELECT*FROM users WHERE username ='admin'--' AND password = 'xxx'
--
后的内容被注释,攻击者无需密码即可登录管理员账号
1.2.2 危害影响:
多年来SQL 注入攻击已被用于许多备受瞩目的数据泄露事件。这些措施造成了声誉损害和监管罚款。在某些情况下,攻击者可以获得进入组织系统的持续后门,从而导致长期入侵,而这种入侵可能会在很长一段时间内被忽视。
1.3 如何查找检测 SQL注入漏洞?
可以针对应用程序中的每个入口点使用一组系统化的测试来手动检测 SQL 注入。通过提交如下内容或使用Burp Scanner快速可靠地找到大多数 SQL 注入漏洞。
具体测试方向:
①单引号'字符并查找错误或其他异常。
②一些特定于 SQL 的语法,用于计算入口点的基(原始)值和不同的值,并查找应用程序响应中
的系统性差异。
③布尔条件,例如OR 1=1 和 OR 1=2,并查找应用程序响应中的差异。
④有效负载旨在 SQL 查询中执行时触发时间延迟,并查找响应所花时间的差异。
⑤OAST有效负载,旨在在 SQL 查询中执行时触发带外网络交互,并监控任何生成的交互。
SQLmap工具命令补充:
# 获取数据库表名:
sqlmap -u "http://example.com?id=1" --tables
# 提取用户表数据:
sqlmap -u "http://example.com?id=1" -D dbname -T users --dump
1.3.1 查询不同部分的SQL注入
多数SQL注入漏洞出现在SELECT查询的WHERE字句中。大多数有经验的测试人员都熟悉这种类型的SQL注入。然而SQL注入漏洞可以在查询的任何位置出现,并且可以在不同的查询类型中。
1.3.2 SQL注入出现的其他常见位置包括:
在UPDATE语句中,更新的值或WHERE子句中。
在INSERT语句中,插入的值中。
在SELECT语句中,表名或列名中。
在SELECT语句中,ORDER BY子句中。
⚠️ 法律提示:所有测试需在授权环境下进行,推荐使用DVWA、SQLi Labs等靶场练习
原文始发于微信公众号(零漏安全):SQL注入简单介绍
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论