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

0x01web目录扫描程序

脚本利用演示

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

然后扫描一下

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

点开其中一个

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

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

脚本代码的实现和分析

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

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

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

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

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明显把很多不存在的页面也识别为存在了

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

识别度得到了明显的提高

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

原文发布于微信公众号 - 安恒网络空间安全讲武堂(gh_fa1e45032807)

原文发表时间:2017-12-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

如何优化服务器的性能

一、通常服务器的性能会卡在三个地方: cpu 网络IO 磁盘IO 二、在优化性能的时候,首先要判断性能的瓶颈在上述的哪个地方。然后对症下药,按照下面的方法来优化...

4319
来自专栏沈唁志

ThinkPHP-PHP开发中的主流框架

8484
来自专栏前端杂货铺

node模块加载层级优化

模块加载痛点 大家也或多或少的了解node模块的加载机制,最为粗浅的表述就是依次从当前目录向上级查询node_modules目录,若发现依赖则加载。但是随着应用...

3738
来自专栏大闲人柴毛毛

Linux文件系统——全方位掌握

文件系统的特性 磁盘分区完毕后需要进行格式化,操作系统才能使用这个分区。 不同操作系统能够使用的文件系统是不同的,例如:Windows98以前使用FAT/F...

3969
来自专栏Java后端技术栈

基于TCP和HTTP协议的RPC简单实现

(1)RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网...

1173
来自专栏GopherCoder

『Ansible 上手指南:2』

2154
来自专栏我是攻城师

使用Java Rest Client操作Elasticsearch

8375
来自专栏aCloudDeveloper

Linux探秘之用户态与内核态

一、 Unix/Linux的体系架构 ?   如上图所示,从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核)。内核从本质上看是一...

2398
来自专栏机器学习养成记

静态爬虫与地址经纬度转换(python)

“ 本文通过一个小例子,展示了用python进行静态爬虫的方法,并且将爬取下来的城市列表,通过调用百度地图api,返回对应经纬度。” ---- requests...

6038
来自专栏me的随笔

Cookie中的几个概念

Domain表示Cookie所在的域(如:www.baidu.com),对于Cookie的访问是不能跨域的(如:我们无法在www.baidu.com下访问www...

3434

扫码关注云+社区

领取腾讯云代金券