使用Python对HTTP摘要认证进行暴力测试

1

本篇概要

  • HTTP摘要认证
  • 在Python密码暴力探测器中支持HTTP摘要认证

2

HTTP摘要认证

在上一篇利用Python进行Web渗透测试(十一):使用Python编写一个密码攻击测试器中我们介绍了HTTP的基本认证,也了解了HTTP基本认证的一些缺点和不足。

作为一个认证方式,HTTP基本认证的最大不足就是安全性不够。首先是它使用的Base64编码加密简直弱爆了而且明文传输容易被拦截窃取;其次,HTTP基本认证有一个搞笑的Bug,就是使用其登录之后,登录状态会一直保存着,除非关闭了浏览器或清除浏览器缓存;还有一个就是基本认证容易遭受到重放攻击(攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的)

为了弥补以上基本认证的种种不足,在HTTP1.1中,定义了一个HTTP摘要认证(Digest Authentication)。

HTTP摘要认证的原理与基本认证很相似,都是由客户端发出一个没有认证的请求,之后服务器响应一个带有www-Authenticate头的响应,指明请求需要的认证。

与基本认证不同之处在于,摘要认证使用MD5算法对用户名和密码加随机数进行哈希。

通过对用户名和密码进行哈希,可以实现密码的隐藏,而加入随机数,则避免的重放攻击。

对HTTP摘要认证的介绍就点到为止,需要更加详细的介绍的同学可以查看《HTTP权威指南》这本书,公众号回复关键字“http”

下面,我们看看如果对提高了安全等级的HTTP摘要认证进行密码暴力测试。

3

暴力密码测试HTTP摘要认证

熟悉requests模块的同学应该知道requests模块提供了基于多种身份认证的支持,上一篇对基本认证的测试也是通过requests模块中的属性进行的。

requests模块的对身份认证的支持通过auth子模块来提供。

通过下面的代码,就可以完成一个HTTP摘要认证(示例来源于官方文档):

在此,我们借助于requests的auth模块,改进一下我们的密码暴力测试器,添加对HTTP摘要认证的支持。

首先在上一版代码的基础上引入requests模块的auth子模块:

因为我们要同时支持基本认证和摘要认证,需要一个参数能够指定认证的方法。所以,需要添加一个参数-m,首先在usage()函数中添加:

接着还需要对request_performer()类添加一个method参数,在run()方法中添加一个对method的判断:

然后在start()函数中添加接受method参数:

同时用于启动线程的launcher_thread()函数也需要将method参数添加进去:

4

验证新的程序

代码修改完成后,我们来测试一下新的程序。

我们已经知道了http://www.scruffybank.com/Admin/这个链接是使用的基本认证,那么其他的链接呢?我们可以在请求头中进行判断的:

先看看http://www.scruffybank.com/Admin/的请求头:

再看看我们在编写资源探测器中 http://zmister.com/archives/180.html 发现的robots.txt文件中禁止搜索引擎爬虫爬取的链接:/backoffice

我们访问它,发现也需要登录认证,那就跑一遍我们的新密码暴力测试器吧:

我们首先使用基本认证方式试试,在命令行运行:

结果并没有测试出密码来,我们再换成摘要认证的方式:

诶,提示我们发现了密码:admin123,看来已经成功了。我们使用这个密码在网页上登录看看:

登录成功了,我们在请求头中看看:

这确实是一个使用了HTTP摘要认证方式进行认证的页面。

这样,我们就完成了我们的密码暴力测试器的新功能添加——支持HTTP摘要认证。

下一篇,我们将介绍如果暴力测试基于表单登录的认证方式。

PS:点击“阅读原文”,查看博客完整代码。

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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏鬼谷君

HTTP协议状态码

963
来自专栏Java进阶

HTTP 通信协议

3488
来自专栏Play & Scala 技术分享

如何清除Chrome浏览器301缓存?

40411
来自专栏java思维导图

全面了解 Nginx 到底能做什么

作者:Raye 链接:http://www.raye.wang/2017/02/24/quan-mian-liao-jie-nginxdao-di-neng-z...

813
来自专栏移动端周边技术扩展

解释型语言与编译型语言

计算机不能直接理解的高级语言,只能直接理解机器语言,所以必须把高级语言防疫成机器语言,计算机才能执行高级语言的编写的程序,翻译的方式两种:

693
来自专栏web编程技术分享

【php增删改查实例】第十九节 - session的使用: 让服务器知道你是谁?

1525
来自专栏Java职业技术分享

后端技能树修炼:基于队列的流量削峰模式

在分布式架构中,前端一个请求会经过后端的多个服务的处理才返回结果,这时就可能会存在一种情况,在间歇性高负载情况下,某个服务 B 的处理能力不能满足负载的需求,从...

440
来自专栏云计算教程系列

如何使用Nginx创建临时和永久重定向

HTTP重定向是将一个域或地址指向另一个域或地址的方式。有几种不同的重定向,每种重定向都意味着与客户端浏览器不同。两种最常见的类型是临时重定向和永久重定向。

793
来自专栏信安之路

http 协议详解

HTTP 协议,即超文本传输协议 (Hypertext transfer protocol)。 是一种详细规定了浏览器和万维网 (WWW = World Wid...

780
来自专栏idealclover的填坑日常

从零开始折腾博客(0):静态?动态?

这两天心血来潮,忽然想折腾一个属于自己的博客,也就是这一系列的缘由。而最终也总算是折腾出来了,要不你就不会看到这篇文章了

621

扫码关注云+社区