自动化的SQL注入——SQLmap
在学习 SQL 注入漏洞测试时,手工注入操作繁琐、耗时较长。给大家介绍一个自动化工具 sqlmap,也是安全方向中必学的,它能够自动完成漏洞识别、库表枚举、数据导出等操作,极大缩短测试流程,为我们节省大量时间。
一、简介:sqlmap是一个开源的渗透测试工具,可以用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令
二、步骤:靶场:SQLi-Labs 后端环境: PHP7.3.4+Apache2.4.39+MySQL5.6以上。 演示几个基本操作。
1.列数据库信息: python sqlmap.py -u "<?id=2" > -dbs那么既然有漏洞,同样也需要有对应的防御策略
(一)核心:参数化查询(预编译语句,根本解决方案)核心防御:参数化查询(预编译语句,根本解决方案)
原理: SQL 语句模板提前发送给数据库编译,用户输入仅作为参数值传递,数据库永远不会把参数当成 SQL 代码执行,彻底隔绝注入。
// 禁止!直接拼接用户输入 $sql = "SELECT * FROM user WHERE username = '".$name."'";实际中是绝对不允许像上面这样做的
// PDO参数化查询 $sql = "SELECT * FROM user WHERE username = ?"; $stmt = $pdo->prepare($sql); $stmt->execute([$name]); (二)辅助:输入严格过滤与白名单校验白名单优先对固定参数(分页 page、排序字段 order)使用白名单,只允许预设值,其他输入直接拦截。例:排序字段只允许 id、create_time,输入其他字段直接拒绝。
类型强转换数字类参数(id、年龄)强制转为数字,过滤符号:
特殊字符过滤过滤 / 转义危险关键字:' " ; -- # union select or and sleep updatexml 等。
大家以后学数据库的时候,也会学到数据库最小权限原则,即即使发生注入,通过限制账号权限降低危害。 比如:
1.业务程序连接数据库账号禁止使用 root、sa 最高权限账号;
2.仅分配业务必需权限:仅SELECT/INSERT/UPDATE,删除DROP、ALTER、CREATE等高风险 DDL 权限;
3.禁止数据库账号拥有读取本地文件、写入文件权限(load_file、into outfile);
4.区分库权限:前端业务库、后台管理库使用不同账号隔离。
未经授权使用 sqlmap 攻击网站属于违法行为,仅可用于自身授权靶场学习。