seedlabSQL注入攻击实验
一、实验目的
在本实验中,我们创建了一个容易受到SQL注入攻击的Web应用程序。我们的Web应用程序包含许多Web开发人员常犯的错误。学生的目标是找到利用SQL注入漏洞的方法,演示攻击可能造成的损害,并掌握有助于防御此类攻击的技术。
二、实验步骤与结果
Task1:熟悉SQL语句
1、使用
1 | mysql -u root -pseedubuntu |
登录数据库:
2、 切换到指定数据库使用,使用:use:
3、显示该数据库所有表单:
4、 打印该表单中Alice的所有信息:
使用:
1 | SELECT * FROM credential WHERE Name='Alice' |
Task2:对SELECT语句的SQL注入攻击
task2.1:在网页端对网站进行SQL注入攻击。已知用户名admin,但是并不知道其密码。
首先其对应的登录部分重要的验证源码为:
发现并没有对输入进行限制,所以:
输入为:admin ’ # ,把password注释掉,就可以通过验证了。这其实是相当于修改了代码的验证逻辑。结果如下:
登录成功.
Task2.2:在命令行进行SQL注入攻击。把该有的符号进行转义输入如下:
得到一串HTML代码,使用浏览器打开可得:
攻击完成。
Task2.3:执行新的SQL语句
首先在mysql中建立一个新的数据库。
接下来,希望通过网页端区删除这个数据库。因为数据库语句通过;来分割,所以输入可以这么构造:
1 | admin’; DROP DATABASE liyan ; # |
然后结果如下:
这种攻击对mysql无效,因为PHP中mysqli扩展的query()函数禁止执行多条语句。
Task3:对UPDATE语句的SQL注入攻击
Task3.1:修改自己的薪水。假设自己是Alice,希望可以修改自己的工资。
登录代码如下:
那么可以任意选一行来修改,中间以,隔开来使该语句修改匹配的两条属性。
之后查看数据库的ID为1
输入可以如下:
1 | 1123‘,salary=’100000’ WHERE ID=1;# |
那么可以看到salary可以看到被改为了100000。
修改成功。
Task2:修改他人的薪水:比如说把老板Boby的改成1.
其实就是重复之前的操作:ID改为2就好了:
1 | 1123‘,salary=’1’ WHERE ID=2;# |
Task3:修改其他人的passwd。
在网站上使用的是SHA1加密后的结果,所以如果需要修改密码,应该输入加密后的结果;
比如密码为hahaha:
那么就应该输入:8a2da05455775e8987cbfac5a0ca54f3f728e274
所以在Alice的修改界面输入:
1 | 113',Password='8a2da05455775e8987cbfac5a0ca54f3f728e274' WHERE ID=2;# |
之后,在登录界面登录boby的账户就可以了:
可以直接登录:
攻击完成。
3.2问题:
1、可以,SQL注入就是根据过分相信用户的输入,而使输入的数据可以变成被执行的代码进而实现攻击的。如果可以使用过滤器使输入只能是数据,其中的特殊符号被删除,其中的代码也删除,的确可以克服SQL注入
2、相似性:都是令输入的部分只能是数据,数据与代码完全分开。C程序中的system函数是通过shell程序来执行程序,一旦输入中有适用于语法规则的代码出现,也会被执行。而execve就不会。参数化SQL语句也是使输入无法变成代码,无法进行预料之外的操作。
- 本文作者: 李小混
- 本文链接: https://lixiaohun.github.io/post/10.html
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!