任务描述:编写自己的web目录爆破脚本。
\1. 首先我们要准备一个字典,用来爆破web目录,而且为了使扫描效果好一点,这个字典里面的内容几乎都是dedecms可能的目录。
\2. 其实要实现这个功能,原理很简单,只用读取字典文件中的每一项,与访问的url拼接成一个新的url,并对这个新的url发送GET请求,选出状态码为200的url,就是网站可以访问的url。当然为了使扫描的速度尽可能的快一些,还要使用多线程。(大部分的代码使用我们在之前的实验中都有涉及,所以不再做过多的解释)
主要功能代码如下:
线程的使用:
同时,为了防止网站有防爬机制,对UA进行了校验,也为了防止使用同一个UA进行多次访问,被网站禁掉,我们多准备一些UA,让程序每测试一个URL时,随机从中选出一个添加到请求头中:
\3. 这样,我们的脚本就算完成了,我们想要的功能已经实现了(这里需要提一下,虽然从我们下面的结果中可以看到,有的目录存在两个‘/’在一起的情况,这跟我们的字典以及我们目标url输入的格式有关,但是大部分的网站都不会因为这个而导致不能访问页面,如果有人觉得实在难受,可以自己编写代码进行过滤,不是很难)。
\4. 如果觉得直接在控制台输出不太方便,我们可以将结果输出到文件中:
\5. 运行后我们的目录下会生成一个html文件。用浏览器查看后,可以直接点击url进行访问(另外,觉得生成的界面太丑的同学,可以加上自己的设计)。
\6. 另外应注意一点,我们这里使用的是字典进行目录爆破,而字典中的内容大部分情况下都是比较敏感的目录,比如管理员后台登录的地址啊什么的,所以这个脚本也可以称为敏感目录扫描。如果觉得这样扫描的结果不够准确或者你不只是想扫到敏感目录,也可以将之前实验中的代码做些修改,将爬取到的链接添加到我们的字典中,充实字典的内容。当然,这样也只是一个简单的实现,如果想爬取整个网站的结构,我们需要依次地去请求每一个链接,并循环地获取每个链接返回页面中的链接,除此之外,还要判断链接是否重复,所请求的地址是否仍属于目标网站等等等等,想做出一个大的工具,还是比较麻烦的。
实验步骤二
任务描述:编写web指纹识别脚本。
1.CMS识别原理已在预备知识中,不做重复。
2.首先,导入我们需要使用的库:
3.先根据我们的原理来编写我们的主要函数:
在写代码之前,我们还需要考虑一下,线程应该在什么样的情况下退出,我们设定一个标志,它的初始值为True,当我们找到对应的CMS时,就将它的值设为False,这时就可以退出线程了:
主要函数的代码如下(我们先访问特定的路径,在返回的信息中匹配关键字,如果匹配不到,再进行MD5值的比较,如果不成功,再匹配下一个,直到匹配出一个或者队列中的元素取完):
\4. 其次,编写其他的函数:
初始化参数、MD5加密函数:
run()函数:
main()函数:
5.运行结果如下:
我们可以看到,运行结果并不是我们想象的那样,不是找回结果后就立即退出线程,而是返回了多个结果,也就是每个线程都找回了一个结果。出现这个问题的原因,主要是我们的线程启动放的位置不对,在main函数中,每启动一个线程,都会运行一次主要函数,也就是每次找到匹配的cms后只是退出了单个的线程,其他的线程还在运行,所以我们对代码进行如下修改:将队列的操作也封装到我们的类中:
我们是用这种方式来启用线程:
最后,我们不再需要main函数,直接这样进行代码的运行:
运行结果如下:
6.应注意,扫描的结果并不是百分之百准确,当对扫描结果持怀疑态度时,也可以人工判断,而且,我们学习编写这个脚本的用意,并不是判断单个的网址,这个脚本可以与url采集器结合使用,对采集到的url进行识别,再对这个脚本进行简单的升级,可以做到将识别好的url保存在与之相对应的CMS分组中,这样方便对某CMS存在的漏洞进行批量的检测。