首页 理论教育 防范SQL注入攻击:实战教程

防范SQL注入攻击:实战教程

时间:2023-11-26 理论教育 版权反馈
【摘要】:SQL注入攻击严重威胁到任何数据库驱动的网站。下面使用WebGoat中的实验LAB:SQL Injection进行SQL注入攻击实战。在这个练习中,读者将执行SQL Injection攻击,并通过实现在Web应用程序代码的修改击败这些攻击。图7-14 Goat Hill财务公司的登录页面题目要求:使用字符串SQL注入绕过验证。这种形式是字符串SQL注入漏洞。1)利用SQL注入,修改用户标识jsmith的工资,如图7-19所示。

防范SQL注入攻击:实战教程

SQL注入攻击严重威胁到任何数据库驱动的网站。背后攻击的方法简单易学,但所造成的损害可以使相当完整的体系完全崩溃

SQL注入虽然是一种很容易发动的威胁,但它也很容易地被阻止,例如采用过滤所有的输入数据(特别是过滤用于OS命令、脚本和数据库查询的数据)的方法。

下面使用WebGoat中的实验LAB:SQL Injection进行SQL注入攻击实战。在这个练习中,读者将执行SQL Injection攻击,并通过实现在Web应用程序代码的修改击败这些攻击。

1.字符串SQL注入(Stage 1)

进入WebGoat,在左侧菜单中单击“Injection Flaws”,在出现的项目中选择LAB:SQL Injection。出现Goat Hill财务公司的登录页面,如图7-14所示。

978-7-111-48532-2-Chapter07-40.jpg

图7-14 Goat Hill财务公司的登录页面

题目要求:使用字符串SQL注入绕过验证。使用SQL注入,不需使用正确的密码以老板(Neville)的身份登录。

(1)分析

很多网站密码验证都是select*from User where username=′′and password=′′,要在pass-word=′′这里进行注入,理论上只要pwd=or 1=1--。那么执行语句就被改成了:

978-7-111-48532-2-Chapter07-41.jpg

这样就可以登录任何用户了。

(2)方法和步骤

1)在下拉框中选择Neville,把′′or 1=1--输入到密码框中,此时可以发现行不通。

2)查找hints得到:

You may need to use WebScarab to remove a field length limit to fit your attack.

3)使用WebScarab抓个包,结果如图7-15所示。发现后面加的SQL注释符不见了,传过去后台SQL执行出了问题,是在哪里被截断了?

978-7-111-48532-2-Chapter07-42.jpg

图7-15 使用WebScarab抓包的结果

4)检查源文件,发现原来密码框被限制为8个字符长度,如图7-16所示。将Password的maxlength改成足够大。

978-7-111-48532-2-Chapter07-43.jpg

图7-16 检查源文件

5)在下拉框中选择Neville,注入′′or 1=1-,登录成功。验证方法:可以查看Neville的个人资料,并具有搜索、创建和删除等所有权限。

2.数字SQL注入(Stage 2)

这个案例需要读者执行SQL注入绕过授权。读者作为普通雇员“Larry”登录后,能查看老板Neville的个人资料(profile)信息。

(1)分析参数

1)以Larry身份登录后,发现能浏览员工信息的是“View-Profile”按钮,如图7-17所示抓包分析这个按钮提交的参数如图7-17所示。

978-7-111-48532-2-Chapter07-44.jpg(www.xing528.com)

图7-17 能浏览员工信息的是ViewProfile按钮

2)在FireBug中可见到,这个CGI接收了员工的ID并返回相应的信息,如图7-18所示。试着把ID改成其他值,发现返回的仍然是Larry的信息。

978-7-111-48532-2-Chapter07-45.jpg

图7-18 CGI接收了员工的ID返回相应的信息

3)在Hints中提示,这个数据库应该是以员工ID作为索引,返回的是每次查询到的第一条数据。用社会工程学来解释,老板应该是工资最高的。

(2)找出老板

为了把老板排到第一位,对SQL注入进行排序:

101 or 1=1 order by salary desc—

(3)验证

作为普通雇员“Larry”登录后,能查看老板Neville的个人资料(profile)中的信息。

3.使用SQL Injection修改数据

进入WebGoat,在左侧菜单中单击“Injection Flaws”,在出现的项目中选择Modify Data with SQL Injection,出现下面的表格允许用户查看用户标识相关的工资(名为薪金表)。这种形式是字符串SQL注入漏洞

1)利用SQL注入,修改用户标识jsmith的工资,如图7-19所示。

978-7-111-48532-2-Chapter07-46.jpg

图7-19 修改用户jsmith的工资

输入:

978-7-111-48532-2-Chapter07-47.jpg

2)使用SQL Injection增添数据。

输入:

978-7-111-48532-2-Chapter07-48.jpg

3)数据库后门Database Backdoors。

输入:

978-7-111-48532-2-Chapter07-49.jpg

后面要求注入一个触发器,触发器内容:

978-7-111-48532-2-Chapter07-50.jpg

这条语句是把所有新注册的用户的email地址改成john@hackme.com,但是MySQL不支持。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈