前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python编写渗透工具学习笔记一 | 0x01 目录扫描程序

Python编写渗透工具学习笔记一 | 0x01 目录扫描程序

作者头像
安恒网络空间安全讲武堂
发布2018-02-06 14:49:38
1.5K0
发布2018-02-06 14:49:38
举报

0x01web目录扫描程序

脚本利用演示

直接输入python DirScan.py会打印出使用说明信息

然后扫描一下

可以看到扫描出了我的服务器的这些结果

点开其中一个

再对比一下我自己的服务器目录,可以看到确实是把自己服务器的一些目录扫描出来了(这里我就不把自己服务器的目录放出来了~~大家可以自己去测试一下~)

Tips:还可以当做ctf的备份文件泄露,源码泄露的扫描工具来使用,只要load上你的字典就可以了。

脚本代码的实现和分析

这个脚本支持自定义扫描的字典

支持自定义扫描时带上的UA头

程序实质是Web目录的暴力破解,即基本过程为取出字典内容、和目标网站进行组合、然后进行请求识别,能否扫描出相应的Web目录主要看字典的强大与否。至于字典,网上也很多资源,收集一下即可。

这里的user_agent_list.py是自定义代理模块,可以实现在扫描web目录网站的时候随机切换UA头(绕过一些防扫描的机制)

代码语言:js
复制
class DirScanMain:
    def __init__(self,options):
class DirScan(threading.Thread):
def __init__(self,queue,total):
def run(self):
def msg(self):
def start(self):
if __name__=='__main__':
if options.url and options.ext:
       d=DirScanMain(options)
       d.start()
       sys.exit(1)

程序的大致实现思路是这几个,先是创建一个DirScanMain(options)对象,然后执行start方法,在start方法中拼接好url,结合threading和queue多线程编程,实例化DirScan(queue,total)对象,自动执行重写后的run方法,然后带上随机生成的UA发起一个get请求,通过判断返回的状态码是否为200,如果返回的状态码为200,就认为扫描的目录存在,并写进result.html中,并且会在run方法中调用msg()函数,实时打印出扫描的进度

发现问题

其实这里我们只使用返回的状态码是否为200来判断目录是否存在精确度是不够的

例如我们扫描一下百度的页面,查看扫描结果

但是点开其中的一些链接,会发现这些页面其实都是不存在的,但是被302重定向了。

这里我们点开 http://www.baidu.com/beingmate_in.php 会发现我们被重定向到了http://www.baidu.com/forbiddenip/forbidden.html

我们再访问一下

http://www.baidu.com/syssite/install/ini_setup.php

这时候我们会被重定向到了

http://www.baidu.com/search/error.html

因为这里我们直接用requests.get()访问

http://www.baidu.com/syssite/install/ini_setup.php 和

http://www.baidu.com/beingmate_in.php

都是会得到状态码200的,所以我们的扫描器就认为这个页面是存在的了

但实际上这两个页面都是被重定向了的,状态码按道理来说应该是302,至于为什么这里实际上是会返回200,具体原因我也不知道,但肯定是百度对这个做了一些处理。

动手优化扫描器

既然发现了问题,我们下面就对这个扫描器进行优化一下,提高扫描页面的准确性,判断页面是否存在多加几个标准,思路

首先访问Zheshiyigebucunzaideyemian233333333.php记录下返回的页面的内容长度,然后在后来的扫描中,返回长度等于这个长度的判定为404

Tips:这里修改脚本的时候注意一下各种变量在类和函数中的传递过程,注意一下变量的作用范围,引用范围。

修改后的脚本我命名为DirScan_youhua.py

对比测试一下,先运行DirScan.py

说明一下这里我把字典设置为只有这个链接是有效的

http://www.baidu.com/home/news/data/newspage?nid=14578898130818524711&n_type=0&p_from=1

其他都是无效的

这里DirScan.py明显把很多不存在的页面也识别为存在了

我们下面看看我优化过的脚本的执行情况

识别度得到了明显的提高

然后后面能扫出多少就全靠字典了

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-12-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 恒星EDU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档