DVWA实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息安全实验报告
题目 DVWA 姓名学号
专业年级计算机科学与技术2014级(1)班
指导教师
2016年 12 月 10日
1.Brute Force
就出在下面这行语句:$qry = "SELECT * FROM `users` WHERE user='$user' AND password='$pass';";
这时输入用户名“admin’or ‘a’=’a”,那么无论输入什么密码都可以正常登录。
原理其实很简单,只要将那段用户名代入到代码中就可以理解了。
$qry = "SELECT * FROM `users` WHERE user='admin’or ‘a’= ‘a' AND password='$pass';";因为了有了“or ‘a’= ‘a'”的存在,所以后面的“AND password='$pass'”密码验证根本就没有发挥作用。
mand Execution
Command Execution 页面
从左侧导航栏中选择Command Execution,可以看到右侧页面提供了一个输入框,我们可以在里面输入ip 地址,点击'submit'按钮之后就会开始执行ping 命令,执行结果会陆续展示在输入框下方的空白处。
正常ping
•在输入框中输入一个IP地址,如192.168.0.1
•点击Submit
cat /etc/password (尝试一)
•在输入框中输入
cat /etc/passwd
•点击Submit此时并没有消息提示说此IP非法,也没有任何东西返回,说明后台有可能没有对IP 地址的合法性进行检测
cat /etc/password (尝试二)
•在输入框中输入
192.168.0.1; cat /etc/passwd
•点击Submit 现在我们就可以看见文件/etc/password 的内容
查看漏洞代码
•打开一个新的终端
•输入:cat /path/to/dvwa/vulnerabilities/exec/source/low.php 注意两行shell_exec 代码: 这两行代码就是操作系统执行ping 程序的地方,在Linux / Unix 上,可以通过";" 来分隔两个都需要执行的命令。可以看到,这里的PHP 代码中并没有对IP 地址的合法性
检测,所以,这段代码允许攻击者在IP地址后追加其它命令
拷贝/etc/passwd 至/tmp
在输入框中输入:
192.168.11.1; cat /etc/passwd | tee /tmp/passwd
通过这条命令,我们不仅获取了/etc/passwd 的内容,还将其拷贝到了/tmp 目录下。
3.CSRF
对low级别的代码进行分析:
服务器端核心代码
可以看到,服务器收到修改密码的请求后,会检查参数password_new与password_conf是否相同,如果相同,就会修改密码,并没有任何的防CSRF 机制。
漏洞利用:
现实攻击场景下,这种方法需要事先在公网上传一个攻击页面,诱骗受害者去访问,真正能够在受害者不知情的情况下完成CSRF攻击。这里为了方便演示,就在本地写一个test.html,下面是具体代码。
当受害者访问test.html时,会误认为是自己点击的是一个失效的url,但实际上已经遭受了CSRF攻击,密码已经被修改为了hac
4.SQL Injection
1、设置
把安全等级先调整为low,让自己获得点信心,免得一来就被打脸。
2、测试和分析页面的功能
这里有一个输入框
根据上面的提示,输入用户的id。然后我们输入之后,发现它返回了关于这个user的信息!这里我们输入了“1”。
它返回三行数据,一行是我们输入的用户ID。一行是用户名,另外一行是用户别名。同时,看一下浏览器的地址栏那里,发现url成这样了
这里有个id=1,是不是就是我们输入的user id呢?再输入“2”,发现url变成了
好了,到这里,我们可以得出这里传进去的id的值是我们可以控制的。我们在输入框中输入什么,就会通过id传进去什么!
3、对参数进行测试
对id这个参数进行测试,查看一下它是否存在sql注入漏洞。我们在输入框里面输入“1'”,注意1后面有一个单引号“'”。
发现这里报错了,说我们的sql语句出现了语法错误。
我们可以进行这样一个猜测:首先它这个id是被两个“'”包住的。查询语句可能是这样的:
select firstname,surname from users where id = '1';
当我们在1之后加一个引号,则会导致单引号数目不平衡,那么查询语句会变成这样:
select firstname,surname from users where id = '1'';
可以看到最后一个引号没被闭合,那我们该怎么办呢?其实有好多种解决的办法,下面就简单介绍下。
方法一:可以在原来的基础上再继续输入一个引号,也就是“1''”。这时我们看一下查询语句:
select firstname,surname from users where id = '1''';
*在where语句中,当出现多个字符串的时候,“=”将会选择优先级最高的一个,优先级是从左到右,依次降低的,也就是离“=”最近的一个。
出来的结果还是和user_id=1一样
方法二:使用“#”符号来注释后面的单引号,到时查询语句将会变成这样:
select firstname,surname from users where id = '1'#';