前言
最近刚退伍了~~~
南部的缺好像没很多QQ
许多HTB机器的没写到
但最近觉得该提升一下Web方面
因此打算开始做Portswigger的labs
题目内容
https://portswigger.net/web-security/authentication/password-based/lab-username-enumeration-via-response-timing
是关于User的列举。
讲得很明白:
根据你的Request回应的时间来判断是否有此用户。
例如当你后端验证程序上,
若一时的大意,只在有此用户的情况下才去核对密码的话,
根据验证以及回传给Request方的时间
变有可能以此Response Time作为爆破用户名称的漏洞!
虚拟码大概会像这样:
if( username == exist ){ if( password.Correct() ){ return Login_Success(); } // if return Login_Fail();} // ifelse{ return Login_Fail();} // else
那么我们来到题目页面:
利用Burp拦截到后我们把Request送到Intruder:
(不会拦截的小伙伴可以参考这边喔!: https://www.itread01.com/content/1547158346.html)
注意在这里如果你错误太多次的话会Ban你的IP
我们可以尝试修改X-Forwarded-For这个标头内容来绕过
可以参考这个参数的说明:https://zh.wikipedia.org/wiki/X-Forwarded-For
根据他给的爆破名单大约有一百个
我自己写个bash来产生一个IP文件好让我等等能使用不同的IP标头来爆破。
#!/bin/shEND=245for i in $(seq 1 $END)do echo 203.123.132.$i >> IPList.txtdone
说一下我的Intruder设定:
Attack Type: Pitchforkpayload 1: 我的IP文件payload 2: 题目给的UserListPost Request参数payload点:X-Forwared-For: §§
username=§§
password=aaaaaaaaaaaaaaaaaaaaaaaa
记的Password一定要长一点,不要像我一样一开始用很短结果每个Response Time都差不多XD...
另外题目很有良心的还发了一组合法的用户Creds给我们可以比较
以下是结果:
(记的预设是不会给你Response Time的)
(要自己去Columns -> Response completed打勾)
你可以自己多测几次,有时候因为网路或是伺服器等变数有时会有奇怪的Response Time出现
因此多次验证比较好。
最后得出当UserName为ftp
时,Response Time都会多一点
看来他就是我们的明日之星了!
接着只需要把Intruder的设定稍作修改(以红色
表示):
题目给的password List
Post Request参数payload点:X-Forwared-For: §§
username=
ftp
password=
§§

接下来只要再回传结果
看到HTTP状态为302(重新导向),应该就是登入成功了:
成功登入后
一般情况下CSRF TOKEN是会发新的给你的
(延伸阅读:成功登入后要发新的CSRF token吗?)
所以你要再重新刷进页面一次。
之后就看到登入成功啦!