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所示。
图7-14 Goat Hill财务公司的登录页面
题目要求:使用字符串SQL注入绕过验证。使用SQL注入,不需使用正确的密码以老板(Neville)的身份登录。
(1)分析
很多网站密码验证都是select*from User where username=′′and password=′′,要在pass-word=′′这里进行注入,理论上只要pwd=′or 1=1--。那么执行语句就被改成了:
这样就可以登录任何用户了。
(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执行出了问题,是在哪里被截断了?
图7-15 使用WebScarab抓包的结果
4)检查源文件,发现原来密码框被限制为8个字符长度,如图7-16所示。将Password的maxlength改成足够大。
图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所示。
(www.xing528.com)
图7-17 能浏览员工信息的是ViewProfile按钮
2)在FireBug中可见到,这个CGI接收了员工的ID并返回相应的信息,如图7-18所示。试着把ID改成其他值,发现返回的仍然是Larry的信息。
图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所示。
图7-19 修改用户jsmith的工资
输入:
2)使用SQL Injection增添数据。
输入:
3)数据库后门Database Backdoors。
输入:
后面要求注入一个触发器,触发器内容:
这条语句是把所有新注册的用户的email地址改成john@hackme.com,但是MySQL不支持。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。