Brute Force(暴力破解):
先从low开始,在DVWA Security中调整难度,默认打开是impossible。
low:
其实,这个的话,大家因该都会想到,直接爆破肯定能出来,但是还是看下代码,点击右下角的View Source查看当前难度下的源码。
像这种代码,其实都没必要全部弄懂的,只要把关键的部分看懂就行,不过我不怎么懂这些啊,PHP还没学,只知道一点。。。
咳咳,user和pass都是GET方式传参,而且没有什么防护之类的,密码用的md5加密,这样的话,直接就用burp suite抓包爆破即可。
我们再切换medium,再看它的源代码。将这个和之前的low相比较多出了好多代码,emm,其他的我也不懂,我等这里学会了再回来改掉吧。但是还是主要的才是重点。
看到下面有登录成功和登录失败的条件,如果登录失败会sleep两秒,所以,这里用上面的爆破还是可以的,只不过会比之前慢很多,因为在你登录失败后,要等两秒才能再进行登录,相当于一个防止暴力破解的方法,但是还是没有太大的实用效果。
我们再转化为high:
再看以下这个源码,虽然不全,看看开头,相比于之前的,又多了,是个user_token, R E Q U E S T 将 u s e r t o k e n 的 数 值 也 可 能 是 其 他 的 值 导 入 , 后 面 的 _REQUEST将user_token的数值也可能是其他的值导入,后面的 REQUEST将usertoken的数值也可能是其他的值导入,后面的_SESSION是一个弃用变量,应该就是每次使用完后换一个新的值。这就应该是类似于验证码的那样,每次登陆的话应该都会是一个新值,这样就能较为有效的防止暴力破解,登录失败的话,从0-3秒中随机选取一个。
这样的话,我们就抓包来尝试,几次抓包破解如下所示:
我们能够发现,你下一次的响应包里的值会返回给浏览器。这样的话,直接爆破是肯定不行的,要转换一下想法。
整理一下这个的流程。
1、访问这个登录界面,在登录过程中获得user_token
2、发送登录数据包,后台接收,然后验证
3、失败后再次接收一个user_token值,返回给浏览器
4、返回浏览器后再次发送数据包,再获取数值。
这样的话,我们可以考虑直接将后两步退掉,不管这个,一直循环第一步和第二步这个过程,这样,就饶过了这个user_token值。
最后,我们看一下impossible。源码太多,就截取几个关键点吧。
最后这个太长了,emm,简单的说一下吧。
第一、二张图,就是定义的几个初始值,如果你登录三次失败,最后那次之后,就会有个15分钟的禁止登录。
最后那张图,就是将这个值返回给你,告诉你,你有这个时间不能登录。这个好像没有再次失败累加时间。。。
不过这样一类的就很有效的防范了暴力破解的手段。
如果我们以后也要解决这类存在暴力破解的漏洞的话,我们可以按照这种方法,可以很有效的来解决。
不过这种这样的感觉,想要破解的话,可以用切换IP的方式登录,虽然这样也很麻烦,不过以后指不定是不是能够出一个能够自由分配IP的软件也说不定,然后就。。。可能吧,只是想想。
Command Injection(命令行注入):
这个就是命令注入。
梳理一下命令注入的流程:
1、是否调用了系统命令
2、函数或者函数的参数是否可控
3、是否拼接注入命令
首先解决个别的问题吧,就是ping的时候存在这么一个乱码的现象。DVWA/dvwa/includes目录下,有个dvwaPage.inc.php文件,打开文件在277行修改,
将UTF-8改为GBK或者GB2312即可。
然后,我们看看这个是不是调用的cmd,如果确定,我们就可以直接利用。看起来很像是在说废话,但是,如果你在别的地方的话遇到这个,你不也得看看。
不过,咱也没好方法,只是在电脑上将cmd打开,然后ping一下,查看对比。
然后继续。
low:
按照惯例,查看源码。emm,什么别的都没发现,没有过滤什么字符,这样就直接用拼接符拼接你想执行的命令。
ping 127.0.0.1 && net user 然后执行。
medium:
查看源码,发现$substitutions,这个是个替换,将&&与;替换为空,这样,相当于过滤掉了&&与;。这样的话,我们就用不了&&来拼接两条命令。
但是我们常用的拼接符也不只是这一个,&也和&&起相同得作用,这里只过滤了&&并没有过滤&,所以我们可以用&来实现命令的拼接。
不过在这个过程发现很有意思的东西,杀毒软件会提示你这些东西执行命令,询问是否阻止,好厉害啊。
high:
还是看一下源码,这里,就过滤了很多字符。
大体上一看,觉得,都过滤了,那还有得玩吗?再仔细看一下,看到那个管道符,第三个,是管道符和一个空格一起,才会被替换成空,那么,我们就可以再管道符后面直接跟命令,不加空格:127.0.0.1|net user,执行。
最后看一下impossible。
这里的源码,已经不是在过滤什么了,而是直接对于IP得格式限制了要求,这样,我们就只能打出正常得IP,除此之外,似乎没有其他的形式来解决这个问题。
小结:
以后如果我们要解决网站关于命令注入得漏洞的时候,不妨也采用这样的形式。一般的话,对于这种问题的思路是两种,一个是限制黑名单,一个是限制白名单,二者相比之下,限制黑名单远不如限制白名单简洁有效。
再来写一下一点拼接符得。
&:是简单得拼接,前后无制约关系
&&:这个只有前面的命令执行成功后,才会执行拼接后的命令。
| :这个是前一个命令的输出,作为后一个命令的输入
|| :这个是只有前一个命令执行失败,才会执行后一个命令。
在一个就是,如果过滤了敏感命令的话,可以尝试在命令中加上" "来过一下看看。
还有一个,如果没有回显得话,可以尝试使用延时命令,来试一下。
CSRF(跨站请求伪造):
low:
这里的源码也没有什么,似乎是一个直接赋值得情况。
File Inclusion(文件包含):
low:
先看源码吧。很简单的,没什么其他东西,如果算的话,那么就是GET方式吧,如果用POST提交的话,是会失败的。还是按流程走一下。
先来看一下是否存在文件包含漏洞,我们先看一下它的url,下面的三个php,你每点一个,page=后面的内容就会换一个,这样,我们就随意添加一个文件名称进去,当然是不存在的,看他会有什么改变。
然后,我就随意写了个abc.php,然后访问,就发生了下面的这种情况。报错了,说没有这么个文件在这个目录下,还给出了这个的绝对路径。那么,这样我们就能判断它存在文件包含漏洞,那么我们就可以去利用。
知道了绝对路径后,我们就直接访问phpinfo试一试。直接访问还是报错,那么就page=后面加上 …/ 这个是返回上一级目录,我们不知道它的上一级目录到底是什么,所以直接用这个来访问上一级,但是发现还是报错。这就说明phpinfo.php并没有在这个的上一级目录,那么,我们再加一个 …/ 再进入上一个目录,然后就是下面这张图,说明我们访问并执行了,那么phpinfo.php的E:\phpstudy\PHPTutorial\WWW\DVWA-master\phpinfo.php。
那么,low的应该就这样了。