使用Python编写一个暴力资源探测器

本篇概要

  • 资源探测
  • 一个有用的字典资源
  • 第一个暴力探测器

资源探测

资源探测在渗透测试中还是属于资源的映射和信息的收集阶段。

主要有以下三个类型:

  • 字典攻击
  • 暴力破解
  • 模糊测试

字典攻击,在破解密码或密钥的时候,通过自定义的字典文件,有针对性地尝试字典文件内所有的字典组合。

暴力破解,也叫做穷举法,按照特定的组合,进行枚举所有的组合。简单来说就是将密码进行逐个推算直到找出真正的密码为止。

模糊测试,指通过向目标系统提供非预期性的输入并监视其发生的异常结果来发现目标系统的漏洞。

资源探测的作用

通过资源探测,我们可以在目标系统中发现文件、目录、活动、服务还有相关的参数,为下一步的行动提供信息参考。

开源模糊测试数据库

https://github.com/fuzzdb-project/fuzzdb是一个开源的漏洞注入和资源发现的原语字典。其提供了攻击、资源发现和响应分析的资源。

第一个暴力探测器

在之前的章节,我们了解了使用Python进行HTTP请求的方法,在本章,我们了解的资源探测的作用的用途。接下面我们就利用Python编写一个资源探测器,用来对Web网站进行资源探测。

我们将上面介绍的开源模糊测试数据库FUZZDB从github上克隆或下载下来:

这个数据库会作为我们的资源探测器的字典,来对web站点进行针对性的探测。

新建一个Python文件,开始我们的暴力探测器的编写。

首先,引入相关的模块:

  • requests,用于请求目标站点;
  • threading,用于启用多线程;
  • sys,用于解析命令行参数;
  • getopt,用于处理命令行参数;

然后,定义一个程序的横幅:

这个横幅用于在程序启动的时候显示出来,除了让程序个性一点之外,也没啥用。

再定义一个函数,用来显示程序的用法:

我们的程序因为是在命令行下运行的,所以需要设置一些参数,在这里,我们用:

  • -w来指定网址
  • -t 来指定线程数
  • -f来指定字典文件

这三个参数缺一不可。

这两个函数创建好后,运行程序便会出现如下界面:

看上去是不是有那么点意思。

接着,我们创建一个继承于Thread的类request_performer(),用于创建线程并向目标站点发起请求以及获取响应:

在request_performer()类的run()方法里面,我们利用requests对URL进行请求并将响应的状态码打印出来。而这,就是我们这个探测器的最主要功能了。

再创建一个启动request_performer()类的函数launcher_thread(),用于遍历字典文件中的关键字组合成URL并生成新的线程。

继续创建一个函数start(),用于接收命令行中的参数将其传递给launcher_thread()函数:

最后,当然是在主程序中运行了:

咱们这个程序到底有什么用呢?

在这里,我们不得不再提一下上面提及过的FUZZDB数据库。fuzzdb是一个用于模糊测试的数据库,类似于一个庞大的字典。而这些字典的内容呢,都是安全大神们维护的、在实践中发现很有可能会是攻击点的目录或路径。

我们可以打开数据库中的一个txt文件看看:

这是一个针对wordpress博客系统插件的一个字典,这里面都是插件的路径和目录。

测试暴力探测器

还记得在渗透测试环境搭建那篇文章介绍的虚拟机环境吗?里面有一个充满漏洞的Web应用http://www.scruffybank.com/,我们可以使用我们刚刚编写好的暴力探测器对这个网站进行一下探测。

字典文件我们先采用一个简单的字典:

我们在命令行运行命令:

得到结果:

common.txt字典中有三个是成功的响应,我们打开其中一个http://www.scruffybank.com/robots.txt看看:

包含了三个禁止搜索引擎爬取的链接,看字面意思,其中一个还是后台地址admin,但是在结果页我们知道/admin是404错误,但是有一个/Admin,我们打开看看:

弹出了认证登录框,但是我们没有用户名和密码,目前来说只能作罢。

我们再使用FUZZDB数据库里的字典测试一下。选择fuzzdb-master/discovery/predictable-filepaths/php目录下的PHP.fuzz.txt:

同样在终端命令行运行命令:

得到结果:

虽然有很多404,但是我们还是发现了一些成功的响应。

比如info.php,打开原来是PHP的info界面:

login.php为登录页面:

phpmyadmin是mysql数据库的web管理入口:

在数据探测收集阶段,我们通过我们自己编写的暴力探测器,获得了这些页面的信息,对分析服务器和web应用的漏洞并进行针对性的渗透有很大的帮助。

在接下来的文章里,我们将丰富和完善我们编写的渗透测试工具的功能。

敬请期待!

PS:代码看不清的可以点击阅读原文,前往博客阅读

原文发布于微信公众号 - 州的先生(zmister2016)

原文发表时间:2017-11-22

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏从零开始学自动化测试

pytest文档12-skip跳过用例

pytest.mark.skip可以标记无法在某些平台上运行的测试功能,或者您希望失败的测试功能

1633
来自专栏撸码那些事

使用缓存的正确姿势

缓存是现在系统中必不可少的模块,并且已经成为了高并发高性能架构的一个关键组件。这篇博客我们来分析一下使用缓存的正确姿势。

4746
来自专栏菩提树下的杨过

ssh 免密码设置失败原因总结

先复习一下设置ssh免密码操作的步骤: 进入主目录 cd 生成公钥 ssh-keygen -t rsa -P '' (注:最后是二个单引号,表示不设置密码) 然...

1868

Kafka体系结构:日志压缩

这篇文章是从我们介绍Kafka 体系结构的一系列文章中获得的启发,包括Kafka topic架构,Kafka生产者架构,Kafka消费者架构和Kafka生态系统...

2563
来自专栏后端技术探索

Nginx从入门到学会(4.事件处理)

有人可能要问了,nginx采用多worker的方式来处理请求,每个worker里面只有一个主线程,那能够处理的并发数很有限啊,多少个worker就能处理多少个并...

651
来自专栏精讲JAVA

Java新一代网络编程模型AIO原理及Linux系统AIO介绍

从JDK 7版本开始,Java新加入的文件和网络io特性称为nio2(new io 2, 因为jdk1.4中已经有过一个nio了),包含了众多性能和功能上的改进...

2388
来自专栏Python小屋

Python使用标准库urllib模拟浏览器爬取网页内容

爬取网页内容的第一步是分析目标网站源代码结构,确定自己要爬取的内容在哪里,这要求对HTML代码有一定了解,对于某些网站内容的爬取还需要具有一定的Javascri...

791
来自专栏木头编程 - moTzxx

AJAX 下拉无刷新分页加载

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

1471
来自专栏腾讯IVWEB团队的专栏

Git commit message 和工作流规范

本文的目的是统一团队 Git commit 日志标准,便于后续代码 review,版本发布以及日志自动化生成等等;以及统一团队的 Git 工作流,包括分支使用、...

1.8K0

Kubernetes的服务网格(第2部分):Pods目前看来还是很棒的

在我们最近关于Kubernetes的序列,Kubernetes的服务网格,第一部分:顶级服务质量一文中,细心的读者注意到,linkerd是使用DaemonSet...

2166

扫码关注云+社区