SQL注入是Web系统最常见、危害最大的漏洞,也是渗透测试必测漏洞,本篇从漏洞原理、测试方法、利用方式、修复方案全流程讲解,新手也能学会。
一、SQL注入漏洞原理
网站开发者编写代码时,未对用户输入的参数做安全过滤,攻击者将恶意SQL语句插入到用户输入参数中,网站后台直接执行该恶意语句,进而获取、修改、删除数据库数据,甚至获取服务器权限。
二、SQL注入手工测试步骤
- 寻找注入点
找到网站带参数的URL、表单输入框、登录框,比如http://xxx.com?id=1
- 判断是否存在注入
在参数后添加单引号',若页面报错、显示异常,说明存在SQL注入漏洞;
测试and 1=1页面正常,and 1=2页面异常,进一步确认漏洞。
- 判断数据库类型
根据页面报错信息、函数测试,区分MySQL、SQLServer、Oracle数据库。
- 获取数据库信息
通过恶意SQL语句,依次获取数据库名、表名、字段名、账号密码等敏感数据。
三、SQL注入工具自动化测试
借助Burp Suite、SQLmap工具,实现SQL注入自动化探测、自动化利用:
- SQLmap:一行命令sqlmap -u "目标URL",自动检测注入点,获取数据库数据
- Burp Suite:抓包后重放请求,批量测试恶意语句,验证漏洞
四、SQL注入漏洞修复方案
- 代码层:使用预编译语句(PreparedStatement),禁止直接拼接SQL语句;
- 过滤用户输入:严格校验用户输入的参数,过滤SQL关键字;
- 数据库权限最小化:避免网站数据库账号拥有过高权限;
- 关闭数据库错误回显,避免泄露数据库信息。
SQL注入漏洞危害极大,一旦被黑客利用,会导致整个数据库泄露,下一篇将讲解XSS跨站脚本漏洞渗透测试实战。