一打开就是这种界面,因为是brute force,所以先尝试爆破
查看一下源代码
没有任何防护手段,直接上BP
Ctrl+I进入intruder模块
先clear ,然后选中要爆破字段,点击add
设置Payloads
选择字典
读取以后
可以看到共有2107条记录,接下来设置Options,设置线程数,重试时间(只有pro版本有这个功能,普通版本无法进行设置,默认的也可以,就是速度慢一些)
点击右上角的Start attack!
此时正在尝试对密码进行爆破,图中白框中出现的是尝试过的,点击可以查看详情
这是请求头,最主要是看上面蓝框中的Length字段,找出与众不同的一项
点击length就可以对响应包的长度进行排序,找最大或最小的值,然后看这个HTTP请求的响应报文
点击Response可以看响应报文信息,从响应报文中可以看出,红框中框出的就是成功的意思,已经进入admin密码保护区域。
之所以需要找length与众不同的一项就是因为响应报文不一样,只要密码正确和错误返回的不是同一个响应报文,其长度一般都是不同的,所以找出不同的一项,就可以找出正确的一项。
将密码password输入看看结果
登录成功
还有一种方法是利用sql注入
看代码中的红框圈出来的语句,没有进行任何的防护,因此可以通过精心设计绕过该请求语句
在user中输入1’ or ‘1’=’1 ,password为空,这样可使上面的语句变成SELECT * FROM `users` WHERE user='admin' or ‘1’=’1’ AND password='';
或者user输入admin’ # ,password为空
这样可使上面的语句变成SELECT * FROM `users` WHERE user='admin' # ’ AND password='';
注意,在sql中#是注释符号,后面的语句都会被注释掉,也就是语句变成了SELECT * FROM `users` WHERE user='admin'
看看结果如何
2.命令执行
打开页面就是这样,框中让填入IP地址,而本题又是命令执行,看看怎么解决?
查看源码
看图中红框圈出的语句,可以发现没有任何的保护措施,ip字段如果在IP后面加 ‘|’ 再添加一个命令,则会直接执行该命令。
原始语句变成了ping | ls,直接输出该目录下的文件。这样就可以操作服务器中的文件,比如这样
比如这样
|echo "(script)alert('xss')(/script)">1.php 圆括号换成尖括号
|cat 1.php
3.CSRF(跨站请求伪造)
打开时题目是这样的
这个链接用来更新某个用户的密码,来看一下源码
只要用户访问下图这样的链接,密码就会被直接更改,毫无防备。
可是你要说了,我会这么傻,点击这种这么明显的恶意链接?那么这样呢
不要因为我没做一个好看的页面而说太假不看,就说内容吸引不吸引你?尤其是在春招当头,一个阿里学姐学长的面经是多么的宝贵呀,你动心不动心?
点一下看看又没啥,不是吗?
哦,出错了,文件未找到,可能是被删除了吧。你也没多想,你也没感觉有啥不对劲,毕竟404你见得多了~
这时,你再想访问DVWA时,发现貌似有点问题
明明是这个密码呀,怎么错误了?联想一下刚才我说的跨站请求,大概明白了点什么,那到底发生了什么呢?
首先创建一个file.html,里面写下如下代码
攻击者将该链接写入到img标签的src里,访问网页时自动加载图片,也就会自动访问该网址,但是图片已经被设置为不显示了,所以你看不到,你看到的只是404
然后攻击者将这个链接放入到一个你感兴趣的网页,钓鱼执法(再次强调别因为我页面渣吐槽我)
然后你点击链接,链接访问file.html,自动加载图片地址,访问更改的网址,然后达到攻击者目的,你的密码就被修改了
4.文件包含
看题目的意思是让我们把url的参数改一改呀,先看一看源码吧
如此简洁,真是令人赏心悦目,就是这个有点危险吧~
A.本地文件包含
构造链接http://192.168.150.131/dvwa/vulnerabilities/fi/?page=/etc/shadow
返回了绝对路径地址,可以看出来该服务器是linux系统,那么读取绝对路径文件php.ini看出来php.ini的配置信息
也可以用相对地址../../php.ini
B.远程文件包含
当服务器的php配置中,选项allow_url_fopen与allow_url_include为开启状态时,服务器会允许包含远程服务器上的文件,如果对文件来源没有检查的话,就容易导致任意远程代码执行。
在本机服务器中上传l.php探针文件,然后利用该漏洞进行远程包含
因为虚拟机中的DVWA出现了一些问题,没法远程包含,所以本题的远程包含变成了本地包含虚拟机中的phpinfo.txt
可以看到该页面被远程执行了,这样其实有点明显,很明显看出来这个链接有问题,可以通过url编码进行伪装
也可以成功执行,试试hex编码
失败了,无伤大雅
5.SQL注入
看题
输入用户1
用户2
输入1’ or ‘1’=’1
得到了全部用户名,但是有啥用?
输入1’ order by 3#
输入1’ order by 2#
暴库:查询database,1' union select 1,database()# ,可以看出database是dvwa
暴表名:查询table_name, 1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='dvwa')#
暴字段名:1' union select 1,(select group_concat(column_name) from information_schema.columns where table_name='guestbook')#
1' union select 1,(select group_concat(column_name) from information_schema.columns where table_name='users')#
后面显示不下了,字段实在太多了,不过已经够了,看到了user和password字段,接下来爆字段
暴字段值:1' union select 1,(select group_concat(User,Password) from users)#
看到用户名是admin,密码是5f4dcc3b5aa765d61d8327deb882cf99
看起来是MD5加密过的数据,在线解密一下
嗯,大功告成,这回看看源码,一切进行的有点顺利,并没有对’等特殊符号与函数做相应处理
直接把id放到sql语句,没有做任何处理。
6.SQL盲注
跟刚才的题差不多,试试刚才的解法有没有问题
暴库:查询database,1' union select 1,database()# ,可以看出database是dvwa
暴表名:查询table_name, 1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='dvwa')#
暴字段名:1' union select 1,(select group_concat(column_name) from information_schema.columns where table_name='users')#
这次少了很多列啊,咋回事呢?
暴字段值:1' union select 1,(select group_concat(User,Password) from users)#
依然可以成功,这是为啥?
对比一下两回的源码,只有红框中内容不一样,查询后发现@为错误控制运算符,当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。原来只是丢失了回显的错误信息,问题不大
7.文件上传
看看源码
虽说是上传图片,但是没有对上传文件做任何限制,直接上传个一句话木马。在trojan.php中写入下图代码
上传文件
文件地址直接返回给我们了,更方便了,菜刀连接一下
地址栏为原网页地址+存储后返回的地址,本例中是http://192.168.150.131/dvwa/vulnerabilities/upload/../../hackable/uploads/trojan.php,记得把#去掉
连接一下
已经连接上了,可以看到别的文件夹的内容
8.反射型XSS
直接alert试试:(script)alert('xss')(/script)把圆括号换成尖括号
直接就成功了,没有进行任何的防护
看看源码,果然如此
9.存储型XSS
输入到这里就输入不了了,应该是对长度有限制,可以尝试从下面注入,也可以bp改包绕过长度限制
先试试message注入
结果成功了,此时页面中多了一条记录,就是test1,被存储到数据库中,这种xss危害性最大,具有永久性,且可以窃取所有访问该页面的用户的cookie,而不需要像csrf和xss需要欺骗用户进行点击。
以上就是DVWA低等级的通关实例,中级和高级也会出的,不要着急。
路漫漫其修远兮,吾将上下而求索。