DVWA详解:暴力破解篇(上)

前言:

其实早在几年前我就想写这个系列,但由于博主并不是安全领域的专职人员,研究这些东西也只是基于个人兴趣,再加上一些其它原因,于是,这个事也就被搁置下来了~~~最近闲得发慌,于是,写?不写?随缘吧~~~

说说"暴力破解"这个话题吧,也算是进行一次简单的科普,也让一些对这个话题没什么基础的读者能理解"暴力破解"是怎么的一回事;"暴力破解"基本是安全领域中最没技术含量的一种方式了,说白了,就是将"各种账号"与"各种密码"进行各种组合,然后将组合后的"账号"与"密码"一个一个填入目标进行尝试;而决定一次"暴力破解"结果的成功与否,其决定因素是由你所收集的"账号"与"密码"的完善程度有关;假如你所收集的"账号"与"密码"不完善,那么"暴力破解"将只有失败这一条路可走~

上面说了,"暴力破解"是需要收集"账号"与"密码"的,那么你应该如何去保存这些数据?方法很简单,直接将这些"账号"或"密码"写进文本文件就可以了,这种保存了"账号"或"密码"的文本文件,在安全领域中被称为"字典"(注:字典也有格式的,并不是只有本文所说格式写法);然而现实中并没有什么人会真正的去收集"账号"与"密码"去创建自己的"字典",因为当"密码"的复杂度达到一定程度,想使用"暴力破解"去猜测出一个可用的"账号/密码",基本是不太可能的,因此,大部分的"暴力破解"常被用于猜测"弱密码";大部分的暴力破解工具都提供自己的"字典",这些"字典"通常包含了"常用账号"与"常用弱密码";

当然,也有一些暴力破解工具可以在某些特定情况下不依赖于"字典",例如,某些暴力破解工具可以基于"规则(类似正则表达式)"去代替"密码字典"的作用(注:"账号类的字典"现实中无法代替);另外,还有一种东西叫彩虹表,专门用于处理经过哈希转换的密码,有兴趣的读者可以自行了解一下;

"暴力破解"有各种各样的工具,这些工具适用不同的暴力破解环境,很多时候,你需要按你"实际要破解的环境"去选择一个合适的工具,当然一种工具也可以适用于多种环境;本篇博文会使用某种破解工具,而你,在实验时完全可以使用另外的工具来得到相同的结果;例如,你完全可以使用"板手"作为你的暴力破解工具,找到当事人揍他一顿来问出账号与密码,实现最纯粹的"暴力破解";

以上那些科普有没有意义?说真的,博主觉得没什么意义,但不说又似乎不适合一些完全没基础的读者阅读,反正写了,也就那样吧~~~

特别提示:如果你在实验过程中,直接复制本博客任意博文中的配置/代码,"空格"字符的前面将可能产生不可见的字符"M-BM-",从而造成文件不可用,这是字符编码的问题~若必需使用复制粘贴方式,请务必手动替换掉配置项中的所有空格!!!或尝试使用以下命令过滤掉所有"M-BM-"字符~

快速跳转

《DVWA详解:暴力破解篇(下)》

实验环境:

要实验,当然得有实验环境,如何搭建相关的DVWA环境?你可以:

1、至GITHUB上下载最新的源码,使用你自己的方式搭建;

2、你会使用DOCKER/DOCKER-COMPOSE,并且你想使用DVWA的2.0.1版本,可以使用博主已经配置好的DVWA的2.0.1版本的DOCKER环境:百度网盘(提取码:7s4q)--> [ 文件名称:DVWA/DVWA-2.0.1.tar.gz ];这个版本有对应的使用教程:《DVWA耙机环境快速搭建》

3、你会使用DOCKER/DOCKER-COMPOSE,并且你想使用DVWA的2.3版本,可以使用博主已经配置好的DVWA的2.3版本的DOCKER环境:百度网盘(提取码:7s4q)--> [ 文件名称:DVWA/DVWA-2.3.tar.gz ];但这个版本,博主并没有对应的博文说明其具体的使用方法,你需要自己看一下想关的SHELL代码去了解容器的启动与删除;

写本篇博文时,博主所使用的是"2.3"版本的DVWA环境进行解说的;

LOW - 暴力破解 [ hydra ]

关于"暴力破解"的工具有很多,对于"LOW"安全等级的暴力破解实验,本博文所使用的工具是"hydra",主要原因是这个工具知名度较高并且KALI自带此工具,而且你也可以很方便有网络上找到这个工具的相关教程;

在使用"hydra"之前,需要先收集一些前期信息,现在以一个未知"账号"与"密码"角度去进行这次实验[实际上我们知道一个可用账号,就是"admin"与"password"],现在以任意账号加任意密码去尝试进行登录操作,使用使用账号"root"及密码"12345678",见下图:

DVWA详解:暴力破解篇(上)

在上图中,我们以账号"root"及密码"12345678"进行登录尝试,很明显,登录失败了,但这不重要,我们需要关注的是"在这个失败的登录过程中,我们的浏览中产生了怎么样的变化,得到了什么有用的信息";在上图的操作中,得到以下信息:

1、从中得知,BruteForce这个模块,页面的URL为"http://192.168.100.42/vulnerabilities/brute/";

2、从中得知,在执行"Login"操作后,URL变化为"http://192.168.100.42/vulnerabilities/brute/?username=root&password=12345678&Login=Login#",从这个变化中,我们可以判断出"Login"操作使用的是"GET请求"的方式;同时,其提交的参数为"username=root&password=12345678&Login=Login";

3、从中得知,在执行"Login"操作后,登录失败了,并返回"Username and/or password incorrect."的错误信息;

在收集到上面的信息后,我们还收集另外一个信息,该信息是必需的,但同时与"暴力破解"没有必然的关系;这个信息就是我们登录DVWA时所产生的COOKIE,这是DVWA的一个安全机制,当我们登录DVWA后,DVWA会生成一个COOKIE,然后我们每一次对DVWA进行操作[任何模块],均会带上个COOKIE验证对DVWA操作的合法性;所以这个COOKIE影响的所有的模块;选中浏览器,按"F12"打浏览器的开发者工具,见下图:

DVWA详解:暴力破解篇(上)

从上图中,我们得知登录DVWA后,我们所获取到的"Cookie"为"PHPSESSID=10f13c4b615ef7a25a57a4987d3d0716; security=low"[注意:"Cookie"的值每次重新登录都会变化];其实从这个"Cookie"中我们也能看出一些东西,例如:"PHPSESSID"是服务器上生成的"SESSION ID",与"security"安全等级/难度为"LOW",当然,其实这没什么用,但缺失这个信息,我们又无法完成这个低安全等级的"暴力破解"实验;

在知道上面的这些信息后,我们就可以尝试使用"hydra"进行暴力破解了;首先,我们准备"hydra"所使用的"用户字典"与"密码字典"(使用自定义字典);注意,自定义的字典中,必需包含至少一条有效的信息;例如,我们已经知道可用于登录有效用户"admin",及其对应的密码"password"(登录DVWA所使用的账号与密码);创建自定义字典的操作见下图(注意,我们在一台IP为"192.168.100.50"的KALI主机上执行的操作):

DVWA详解:暴力破解篇(上)

在创建完用户字典"user.dict"与密码字典"passwd.dict"后,在KALI上使用"hydra"工具进行暴力破解;

DVWA详解:暴力破解篇(上)

LOW - PHP源码解读

为什么要进行源码解读?给读者一条命令很简单,截个图给读者看也很简单,按着流程来,实现博文中的结果完全没有任何难度,但这完全没有意义;因为,破解过程所使用的工具或命令结构,是与破解的"目标环境"有关的;这里的"目标环境"是什么意思?本处的"目标环境"意思就是该功能的实现代码;

要阅读源码而不会PHP?实际上博主也不会PHP!!!那么在这个情况下博主是如何去解读DVWA的源码的?结合博主自己其它编程语言的基础,加上个人猜测,再加上对一些关键"函数"进行百度,博主就在这样的方式下进行源码的解读;这种解读方式并不能保证所有解释都是绝对正确,但用于了解整个流程基本没什么问题;所以,如果读者不懂PHP,但又想要读懂源码,那么在现实中,读者至少需要会某一门"编程语言",至少"if"这样的关键字是作用是什么?什么是"函数"?这类知识你至少要知道;

当然,还有更简单的方法,直接将源码复制到GHATGPT,让它帮你解释~~~但博主没这样做,因为不需要~~~

MEDIUM - 暴力破解 [ hydra ]

安全等级为"MUDIUM"的情况下,暴力破解的方法实际上和"LOW"安全等级没什么区别,均可以使用"hydra"命令进行暴力破解;但由于PHP源代码中在失败登录的代码中加入了"sleep(2)"代码,这引发了"hydra"命令的"-f"选项失效(无论判断条件使用"F=incorrect"还是"S=Welcome"),连锁的导致了"hydra"在暴力破解时,会测试完所有的"账号密码组合"后,再输出结果;在字典文件较小时可能影响不大,但假若你的字典文件很大,这花费的时间将非常可观(即使你将有效"账号"与"密码"写在字典的第一行,"hydra"依然会测试完所有组合再给你结果)!!!

为了解决"-f"失效的问题,博主尝试写了一个脚本去解决这个问题,但效果非常差,SHELL代码见下(BruteForceMedium.sh):

上面的代码改用了"hydra"的"-l"与"-p"选项,每次测试一个组合,并在检测出"successfully"字符串后立即终止脚本,这样就可以"免于测试完所有组合后才得出结果";但实际测试的效果,在"有效的组合"靠后时,其花费的时间竟然比使用"-L"与"-P"花费了更多的时间("有效的组合"靠前时能更快);所以这个脚本仅用于参考,应该有优化空间;

下面是"MUDIEM"等级下,直接使用"hydra"的命令方法:

最后,本处提供一张图片,说明一下本等级的测试结果,如下图:

DVWA详解:暴力破解篇(上)

MUDIEM - PHP源码解读

六、结

至此,"DVWA详解:暴力破解篇(上)"已经完结;是的,这篇博文写到这里,写作量超出博主计划,博主本想一篇博文就写完本篇内容,但没想到就"LOW"与"MEDIUM"两个安全等级就需要这么长的篇幅......,那写完DVWA的所有漏洞详解,那得写多少篇博文......,感觉博主又给自己挖了一个大坑!!!

下一篇:DVWA详解:暴力破解篇(下)

DVWA详解:暴力破解篇(上):等您坐沙发呢!

发表评论

表情
还能输入210个字