未授权访问
原理在于,服务器没有对用户的身份进行验证,导致攻击者可以在没有登录或者没有认证的情况下访问需要授权的数据或执行操作。
危害
信息泄露:在未经授权的情况下访问敏感信息,造成信息泄露。
恶意操作:在未经授权的情况下执行敏感操作,造成系统滥用。
漏洞示例
API接口未授权
Web应用的API接口(如数据查询、敏感操作)未对用户身份凭证(如Token、Session)进行校验,导致用户可以在未经授权的情况下调用接口,查看信息或执行操作。如下:
/api/user/list 查看用户列表接口
URL:
http://example.com/api/user/list
请求:
GET /api/user/list HTTP/1.1
Host: example.com
Cookie: session_id=abcde12345
如果该接口没有验证用户身份,就可以未授权访问,返回相关内容。
响应:
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "success",
"data": [
{
"id": 1,
"username": "admin",
"email": "[email protected]",
"role": "admin"
},
{
"id": 2,
"username": "test",
"email": "[email protected]",
"role": "user"
}
]
}
测试的时候,可以使用Burp拦截请求,删除请求中的认证信息(如Cookie、Token),看是否正常响应,还可以在浏览器隐私窗口访问URL,观察是否返回内容。
文件/目录未授权
服务器敏感文件或目录没有做访问控制,用户可以直接访问,不需要身份验证或授权。
数据库未授权
数据库暴露在公网,且没有使用身份验证,攻击者无需密码可以直接访问并操作数据库。
第三方组件未授权
包括但不限于Druid
、Swagger
、Spring Boot Actuator
未授权访问,导致用户信息和数据泄露、API接口泄露等等。
Findsomething
Findsomething
是一个浏览器插件,用来发现JS中的敏感信息和API接口,支持Chrome
和Firefox
,直接到浏览器插件商城下载就行。可以配合Burp Intrader进行未授权访问漏洞的检测。
把插件发现的接口信息复制到txt
文档中,形成一个接口字典,在Burp Intrader中使用该字典对目标进行接口遍历。
遍历的时候取消勾选URL编码,有些接口仅支持GET
方法,有些接口仅支持POST
方法,有些接口都支持但返回内容不同,所以遍历的时候,尽量两种方法都遍历一遍。有些接口参数并没有赋值,不用故意去给其赋值,可以留一个相同接口参数值为空的,进行滞空查询,有时候会获取全数据。
寻找接口参数
如果响应包返回缺少某某参数,可以加上参数再进行请求,但是很多时候缺少参数服务器并不会返回报错信息,而是直接拒绝请求,这种情况可以复制接口到JS中检索,或者使用其他请求的参数尝试,还有的接口需要分页参数才能返回数据。
GET:
GET /api/user/list?pageNo=1&pageSize=10
POST:
POST /api/user/list
{
"pageNo": 1,
"pageSize": 10
}
Bypass403
响应返回403,表示没有权限访问,如果要绕过,取决于服务器对访问控制的验证方法。
基于HTTP方法
比如服务器只拒绝GET
请求,其他方法均可访问,可以尝试其他方法绕过POST
、HEAD
、OPTIONS
等等。
基于Referer
服务器会检查Referer
头,比如只允许来源为管理后台(携带/admin)的请求访问,那么就可以伪造Referer
绕过。
基于User-Agent
基于User-Agent的访问控制是一种防止自动化工具(如爬虫、扫描器)访问网站的常见手段,绕过的话需要把该字段改为正常浏览器请求的User-Agent。
基于IP地址
服务器可能会禁止一些IP或只允许一些IP访问(如只允许内网IP),通常通过校验X-Forwarded-For
头来判断,可以通过伪造一些合法IP绕过。
基于路径和文件名
服务器根据自己的路径匹配规则来对路径和文件做访问控制,比如阻止访问/admin/
目录及其子目录,比如/admin/login
、admin/user
等等,如果服务器校验不严,可能会导致绕过。
路径规范化绕过:
URL编码:
http://example.com%2fadmin/login
服务器只匹配/admin/
,但对/
编码后的路径没有过滤,并且没有编码后的二次校验,所以可以尝试对/
进行URL编码或双编码进行绕过。
多斜杠:
http://example.com///admin/login
服务器只匹配/admin/
,不匹配双斜杠或多斜杠,根据路径规范化,多斜杠会被解析为单斜杠,所以可以尝试多斜杠绕过。
服务器解析绕过:
大小写:
http://example.com/ADMIN/login
还是路径匹配不严格,可以尝试大小写绕过,但需要目标服务器是windows系统,windows系统不区分大小写 。
绕过方式有很多,针对403绕过也有很多自动化工具,可以根据需要选择。
预防
对重要的操作或者数据查询,必须经过身份验证,并且进行权限校验,通常使用Token或Session进行身份验证。并在高风险操作(如资金转账、敏感信息修改)时增加二次验证机制(如验证码、双因素认证)。
总结
如果你对安全感兴趣,别忘了关注我们,持续为你带来最新的安全动态与技术分享!
原文始发于微信公众号(AlertSec):未授权访问
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论