DVWA实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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'#';

相关文档
最新文档