【DVWA实战篇】12分钟学会 SQL 注入攻击实战

Android APP漏洞之战——SQL注入漏洞初探

Android 应用程序中的 SQL 注入漏洞主要利用未经验证的用户输入。

原理:通过插入恶意SQL语句来控制数据库执行。
真实示例:2 01 9 年,某电商应用在登录界面中未转义单引号,迫使用户绕过验证并输入 'OR '1 '='1 以获得管理员权限。
数量:由未转义输入引起的漏洞占所有应用程序安全问题的 4 3 %。

类别: 1 .插入联合查询 现实生活中的例子:2 02 0年,某金融APP搜索栏没有过滤,输入UNION SELECT 1 ,version()就显示数据库版本。
时间:攻击在不到5 分钟内完成数据库名称和用户名窃取。
数字:您可以使用 UNION 一次获取最多 5 0 列数据。

2 错误注入 真实故事:2 02 1 年政府应用程序使用 extractvalue() 函数解析 XML,无需转义它并输入“UNION SELECT database() - 以公开数据库名称。
时间:利用错误堆栈需要 2 0 次或更少的配置尝试。
数字:MySQL的updatexml()函数的漏洞率为6 7 %。

3 布尔盲注 现实生活中的例子:2 02 2 年的一个外卖APP中,我通过订单号输入AND(SELECT length(table_name) FROM ...),逐字节猜测支付表。
时间:猜测一个表名每个字符平均需要 3 0 秒。
Number:如果页面响应超过5 00ms,可能会被认为是延迟盲注入。

4 时间盲注 现实生活中的例子:2 02 3 旅行APP的评价提交界面没有限制响应时间。
输入 IF(1 =1 , SLEEP (5 ), 0) 将停止接口。
时间:SLEEP(5 ) 需要毫秒精度。
数字:Linux 环境中的延迟注入成功率比 Windows 环境中高 4 0%。

帮助:
同义反复攻击:admin' OR '1 '='1 绕过登录(案例:2 02 0年特定APP漏洞)。

存储过程攻击:通过调用dbms_lock.sleep(2 02 1 游戏APP)阻塞服务。

测试点:
用户名输入框(配置' AND 1 =(SELECT count() FROM user))。

URL 参数(例如?id=1 ' UNION SELECT FROM products --)
插入文件上传字段('; DROP TABLE user --)。

实用提醒:优先考虑登录和支付接口测试,使用SQLMap,自动化测试效率提升3 00%。

基于insert into … values … 的SQL注入(非报错方法)

直接插入恶意代码可以炸毁数据库。
我上周刚刚处理过这样的事情。

插入点在表单输入框中。
尝试输入单引号。

恶意代码直接添加在VALUES之后。
例如,1 ',(SELECT...)3 ,'玻璃'。

使用 GROUP_CONCAT 获取表名。
DATABASE() 获取当前库。

如果过滤严格,可以使用注释符号绕过。
或者写成两行。

为了防御,请使用参数化查询。
或者直接过滤单引号。

至少给予许可。
不要使用 root 帐户运行应用程序。

这是第一个。