利用注入漏洞:SQL注入的识别与利用
1. 手动识别SQL注入
现代大多数Web应用都会使用某种数据库,而SQL是用于查询数据库最流行的语言。在SQL注入(SQLi)攻击中,攻击者通过在表单输入或请求的其他参数中注入SQL命令,改变应用程序与数据库之间的通信,使应用程序发送修改后的查询语句。
下面我们来测试一个Web应用的输入是否易受基于错误的SQLi攻击:
1. 登录DVWA,进入SQL Injection页面,确保安全级别为低。
- 输入一个数字,如将User ID设为1,然后点击Submit。通过查看结果,我们可以知道应用程序查询了数据库,查看是否存在ID为1的用户,并返回了该用户的ID、姓名和姓氏。
2. 测试输入应用程序不期望的内容。
- 在文本框中输入1’,然后提交该ID。应用程序可能会返回一个错误,这个错误消息表明数据库接收到了一个格式错误的查询,但这并不一定意味着存在SQLi,但很有可能该应用程序是易受攻击的。
3. 返回DVWA的SQL Injection页面。
4. 为了确定是否存在基于错误的SQLi,尝试另一个输入:1’‘。
- 这次没有错误,这证实了该应用程序存在SQLi漏洞。
5. 执行一个非常基本的SQLi攻击。
- 在文本框中输入’ or ‘1’=‘1,然后提交。结果可能会显示数据库中所有注册用户的信息。
原理分析:
SQLi发生的原因是输入在用于形成数据库查询之前没有经过验证和清理。假设应用程序的服务器端代码(PHP)组成的查询如下: