dvwa文件包含_DVWA中等级通关指南-超详细版

欢迎大家光临我的博客一起交流学习呀~ http://www. chenjingjiu.cn

1.Brute Force

上篇文章截的图太多了,这回就不给大家截题目了,重点的图还是会有的哦~

ee20f4a45fe968ceffacb36d49927df2.png


从源码可以看到,只有红框框出来的地方发生了变化。这个mysql_real_escape_string()是干什么的呢?
简单来说就是对一些特殊字符进行了转义,那低等级时候用到的注入就失效了吧,这回就只能老老实实爆破了,而且可以看到中等级的代码依然没有限制尝试次数,所以就存在爆破漏洞。
具体操作与第一篇没有区别,可以参见上一篇文章。

2.命令执行

99d495fd3ffb317f95fd1595ab5358d6.png


从源码可以看出,比低等级多了红框和黑框中的代码。其中红框的代码是定义了一个黑名单数组,只要在黑名单中的字符都会被替换为空值,也就是被删除。
而黑框中多了一个php函数str_replace()【http://www.w3school.com.cn/php/func_string_str_replace.asp】,简单来说就是从第3个参数找到第一个参数中的值,然后替换为第2个参数。这样就把target里面的黑名单字符全部删去了。不过这个黑名单写的也太敷衍了,就屏蔽了&&和:,那这个就和低等级的还是没啥区别,直接用低等级代码无脑过。

3.CSRF(跨站请求伪造)

022835ad920a70f0cbce5c4136955209.png


从源码可以看出,比低等级的多了红框中的内容。主要是多了一个HTTP_REFERER变量,利用eregi()函数【https://www.php.net/manual/en/function.eregi.php】进行匹配,简单说就是如果HTTP请求头存在referer字段且包含”127.0.0.1”,即可绕过验证。我们来抓包看一看访问恶意网址时的请求包。

a738b470292d32f57752ed51890efb4f.png


可以看到这里的referer是当前访问网页的地址,然后返回一个重定向响应

acc891e1678e4d4bf2e3570108913348.png

9da300faebd5fca4630fd4a29c82f8b6.png


这个数据包可以看到,host是DVWA服务器的地址,referer还是本地服务器的地址,照现在的情况是肯定无法成功的,访问一下试试

9dd4dc3574a5a4be38fbd727a348197c.png


上图中可以看出密码修改并没有成功,不然会返回一个 Password Changed的标志的。
那么如何绕过限制呢?什么东西是我们可以控制的?
目前是我自己访问,所以我可以对流量进行抓包,然后修改referer,可是远程用户访问,怎么进行抓包?流量监听也是TCP层的,理论上来说是可以进行修改的,只是太难操作了。
不知道大家注意到文件名没有,这个referer中是存在文件名的,那么直接把文件名改了不就行了,反正服务器只是看referer中有没有目标字串而已。把html文件改成127.0.0.1.html试试,同时需要把钓鱼界面的链接地址改成127.0.0.1.html。
这回再抓包试试(先把浏览器缓存清一下,不然会缓存刚才的钓鱼界面,导致无法重定向)

b01f79072599030f1a4fa23ff5e31446.png


可以看到referer中有了想要的字符串,那么是否能绕过限制呢?

32ec0f87ab9623215c762a80cc6d3c5f.png


事实证明可以,这时密码已经被修改了,可以登录试一下

1c86c82436dc1fee097ab8b940f42e6f.png


确实登录不进去了,所以证明成功绕过

4.文件包含

b97367d743b4d9e457cd66e10467b64c.png


可以看到这次对字符串进行了一定的过滤,把http和https给过滤掉了,但是咱们的本地文件包含还是没有受到影响呀~
不过也不能就此满足,因为这个还是没有防住远程文件包含。可以看到该程序并没有写循环,只是对于字符串做了一次过滤而已,那么我们构造请求为这样

5a070a231baa7d033c57d652231c5ff7.png


发现确实把http://给过滤掉了,剩下了ip地址没有什么用了。但是想想刚才提到的,我们构造如下请求

2c1e27e91d49a7ea797eb4894c3d7fe8.png


可以看到我们双写了http://,页面执行了远程文件包含。原理就是当hthttp://tp://中间的http://被去掉后,就剩下了一个http://,就可以进行远程文件包含了。

dcc3eca4369188cb69da48a3c76efe63.png


PHP的str_replace()函数是区分大小写的,所以利用大小写也可以绕过。本地文件包含参考低等级通关指南。

5.SQL注入

4f26617d12fc5193154720760341bf31.png


从源码可以看出,这跟爆破题中的代码一样,都是对id进行了字符串的转义,那么现在咱们来看一看这个转义到底转义了哪些字符?利用bp的intruder模块进行sql fuzz试试。

6f9923633051befa9cefacf62bfd245d.png


结果如下

fc126054d9ee989c27c40257d4b56ed2.png


可以看出,除了@,#剩下的符号基本都被过滤了,那这样还注入啥?
不要心急,sql注入除了字符型,还有一种叫数字型。刚才没有在图片中标注出来,现在再来仔细看一下

16656ffd9d3c2ed6a2dbc8ec89bed19b.png


看出差别了吗?这个id前面没有单引号,所以就不需要对单引号进行闭合,也就不需要单引号了。而且#注释符还在,那么看看数字型注入怎么用呢?
A.首先看看有查询字段有几列:1 order by 2#

ead8de05678662f8ebd4a8f96182380b.png


1 order by 3#

b09679821a2887520d55dcfb58ef52d4.png


说明查询字段有两列。
B.查看当前数据库:1 union select 1,database() #

a1ea23923a2bb91d427bfe6dac7ba486.png


C.爆表名:1 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database())#

5e524b99659a40b99e9a6bb7d98d0ecf.png


D.爆列名:1 union select 1,(select group_concat(column_name) from information_schema.columns where table_name=0x7573657273) #

e769c3d3556feb6ea9ca053e4d044585.png


这里要特别注意一下,因为单引号被过滤,所以这里的表名就不能用”users”,需要将users转换为16进制字符,然后就不需要单引号了。这种方法也适用于低等级sql注入。
E.爆字段值:1 union select 1,(select group_concat(user,password) from users) #

4d0ea8321cabb4dcc812ad2d999b4b85.png


获得了密码的md5值,解密一下就好了

6.SQL盲注

e4fe2e3f45e7fc862f48e88aa3f39883.png


这个跟上一个没有任何区别,就是没有错误回显了,只要跟着上面的做就没有任何问题,也是过滤了大部分字符,但是是一个数字型注入。就不再赘述了

7.文件上传

e81d30208b2cc2f6aede5bbda5b0d191.png


看源码,发现多了红框中的判断,看看uploaded_type和uploaded_size是什么东西?
百度了一下,发现好像没啥具体的介绍,大概是看的文件的后缀?抓包看看

8dba9ba4cfbfd9409142ec3430c2402c.png


这是我上传一张正常图片时产生的请求包,看到其中有Content-Type这个字段了没?好像跟uploaded_type是一样的啊。意思就是上传图片形式就行了
我们把上次写的trojan.php改个后缀变成trojan.jpg,然后上传试试

ac3e8dce9c699bb1cd999b2acaa42af1.png


上传成功,但现在这种情况没有意义啊,其实可以利用文件包含对这个图片进行执行,然后再用菜刀连接。连接地址为:http://192.168.150.131/dvwa/vulnerabilities/fi/?page=/var/www/dvwa/vulnerabilities/upload/../../hackable/uploads/trojan.jpg,连接字段为hack,脚本类型为php,点击连接

f0ade72e4a7bf65d1eb074dc0c18b9cb.png

393465a2e2a807d99ed7c419d214bb30.png


成功连接
这道题的正统做法应该是用bp改包,将上传的文件名改成trojan.php

6bb1fd54d77f528ed7f1f10fb448c3cc.png


这样也可以,然后用菜刀连接即可。

8.反射型XSS

d5531040dc8fb581d17429ce65ad283a.png


可以看到这个没有任何的防御效果啊,str_replace可以利用双写绕过,也可以大小写绕过,实在没有什么难度,就不写了

9.存储型XSS

4b54f1e85a1e421a1a28b64802dadf66.png


这个在message和name上都做了相应的处理,试试低等级的方法

69029f0187744a94a8691bc5a046e94c.png


失败了,直接将信息储存起来了。
这次对message的防御比较强啊,这回可以对name字段做一些文章
首先可以用bp改包,然后改name的字段以绕过长度限制。另一种方法是修改页面中标签的值。

a4f8a4d600f2e29307ce06b6619a1772.png


对输入长度进行限制的地方其实是前端的html代码限制的,而不是服务器进行的限制,从源码中也看到并没有对name的长度做限制。所以把刚才的maxlength改成1000,然后输入xss注入语句

144dc3159211cced1f4e64a784fef08b.png


Sign guestbook

c42c05008e7ccb3850c3d292cf8bd272.png


可以看到已经成功了
这次的就做到这里,下次再写一写高级的。
路漫漫其修远兮,吾将上下而求索

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值