这篇文章给大家介绍怎样使用Python对HTTP摘要认证进行暴力测试,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
作为一个认证方式,HTTP基本认证的最大不足就是安全性不够。首先是它使用的Base64编码加密简直弱爆了而且明文传输容易被拦截窃取;其次,HTTP基本认证有一个搞笑的Bug,就是使用其登录之后,登录状态会一直保存着,除非关闭了浏览器或清除浏览器缓存;还有一个就是基本认证容易遭受到重放攻击(攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的)
为了弥补以上基本认证的种种不足,在HTTP1.1中,定义了一个HTTP摘要认证(Digest Authentication)。
HTTP摘要认证的原理与基本认证很相似,都是由客户端发出一个没有认证的请求,之后服务器响应一个带有www-Authenticate头的响应,指明请求需要的认证。
与基本认证不同之处在于,摘要认证使用MD5算法对用户名和密码加随机数进行哈希。
通过对用户名和密码进行哈希,可以实现密码的隐藏,而加入随机数,则避免的重放攻击。
下面,我们看看如果对提高了安全等级的HTTP摘要认证进行密码暴力测试。
暴力密码测试HTTP摘要认证
熟悉requests模块的同学应该知道requests模块提供了基于多种身份认证的支持,上一篇对基本认证的测试也是通过requests模块中的属性进行的。
requests模块的对身份认证的支持通过auth子模块来提供。
通过下面的代码,就可以完成一个HTTP摘要认证(示例来源于官方文档):
在此,我们借助于requests的auth模块,改进一下我们的密码暴力测试器,添加对HTTP摘要认证的支持。
首先在上一版代码的基础上引入requests模块的auth子模块:
因为我们要同时支持基本认证和摘要认证,需要一个参数能够指定认证的方法。所以,需要添加一个参数-m,首先在usage()函数中添加:
接着还需要对request_performer()类添加一个method参数,在run()方法中添加一个对method的判断:
然后在start()函数中添加接受method参数:
同时用于启动线程的launcher_thread()函数也需要将method参数添加进去:
验证新的程序
代码修改完成后,我们来测试一下新的程序。
我们已经知道了http://www.scruffybank.com/Admin/这个链接是使用的基本认证,那么其他的链接呢?我们可以在请求头中进行判断的:
先看看http://www.scruffybank.com/Admin/的请求头:
再看看我们在编写资源探测器中 http://zmister.com/archives/180.html 发现的robots.txt文件中禁止搜索引擎爬虫爬取的链接:/backoffice
我们访问它,发现也需要登录认证,那就跑一遍我们的新密码暴力测试器吧:
我们首先使用基本认证方式试试,在命令行运行:
结果并没有测试出密码来,我们再换成摘要认证的方式:
诶,提示我们发现了密码:admin123,看来已经成功了。我们使用这个密码在网页上登录看看:
登录成功了,我们在请求头中看看:
这确实是一个使用了HTTP摘要认证方式进行认证的页面。
这样,我们就完成了我们的密码暴力测试器的新功能添加——支持HTTP摘要认证。
关于怎样使用Python对HTTP摘要认证进行暴力测试就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。