通过响应时间爆破用户名

  • A+
所属分类:安全文章
0x00 前言
hello大家好,我是小黑。今天给大家分享一个渗透小tip,做安服项目的时候可以水一个中低危(误)。

0x01 爆破用户名
大家应该都知道,对一个登陆框进行爆破时,如果能【先爆破出用户名再针对存在的用户名爆破密码,则比起【同时爆破用户名和密码的方式能极大的提升爆破效率。

判断用户名是否存在通常是根据登陆失败后页面上的回显(响应包的长度)来判断,比如:

用户名存在时:“密码错误!”

用户名不存在:“用户名不正确!”


遇到这种情况,报告上就可以写一个:“低危漏洞—登陆界面未做模糊化处理”。然后就可以愉快的下班了~

但如果开发这样写:无论用户名是否存在,登陆失败的回显都是:“用户名或密码不正确!”,这种情况下是否就无法判断用户名的存在性了呢?今天给大家分享一个小tip,如何在模糊化处理的情况下尝试爆破用户名。

0x02 根据响应时间爆破用户名
模糊化处理的情况下,可以根据服务器的响应时间来判断用户名的存在性,下面介绍一下如何用burp进行这个操作:

1、在爆破用户名的时候使用一个超长的密码
通过响应时间爆破用户名

2、保证网速稳定良好(倒也不用这么好)
通过响应时间爆破用户名

3、在爆破界面的Columns选项中勾选Response这两项。
通过响应时间爆破用户名

4、按响应时间顺序排列,响应时间最长的即是有可能存在的用户名
通过响应时间爆破用户名

5、此方法有一定的误差,可以更换可能存在的用户名在字典中的位置进行多次测试,如果发现多次测试后这个用户名仍然像腰间盘一样突出在首位,那基本可以确定此用户名存在了。
通过响应时间爆破用户名

0x03 tip的原理
写了一段登陆逻辑的伪代码,大家看看有什么问题:
通过响应时间爆破用户名

首先介绍几个前提知识点:
1、按照安全规范,数据库里保存的不是明文密码,而是密码的哈希值,通常使用md5算法进行哈希运算。
2、哈希运算不可逆,只能加密不能解密。
3、不能解密,那如何判断用户提交的密码和数据库里的相同?把用户提交的也哈希加密一下,然后对比哈希值是否相同就行了。
4、哈希运算需要时间,越长的密码需要的时间越久。

OK,说到这里问题应该很明显了:用户提交的用户名不存在时,数据库里就查不到密码,程序也就走不到哈希运算的步骤。

但用户名存在时,程序需要进行哈希运算,同时我们故意提交长密码拖延时间,就造成了服务器响应时间的差别,根据这个差别就可以判断用户名的存在性啦!

0x04 后记
通过响应时间爆破用户名
VX公众号:《小黑的安全笔记》
这是一个程序员过度优化造成的漏洞,不过危害确实不大就是了。

同时不知是有意还是无意的,有部分程序是在判断用户名之前就先把用户提交的密码进行了哈希运算。这样就避免了这种漏洞的产生。

同时网络环境也对该漏洞的利用有很大的影响,所以实战中不保证100%能够利用哦~

END.


喵,点个赞再走吧~

本文始发于微信公众号(小黑的安全笔记):通过响应时间爆破用户名

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: