越权漏洞(IDOR)测试技巧


一、IDOR介绍

IDOR,Insecure Direct Object reference,即"不安全的直接对象引用",场景为基于用户提供的输入对象进行访问时,未进行权限验证。IDOR漏洞其实在越权(Broken Access Control)漏洞的范畴之内,也可以说是逻辑漏洞,或是访问控制漏洞,国内通常被称为越权漏洞。

二、常见的测试技巧

1.改变HTTP请求方法

如果某个请求方法无效,那么可以试试其它方法,如GET, POST, PUT, DELETE, PATCH…等,一个通常的技巧就是用PUT和POST进行互换,原因在于服务端的访问控制措施不够完善。

GET /users/delete/VICTIM_ID  --> 403 Forbidden
POST /users/delete/VICTIM_ID  --> 200 OK

2.路径穿越绕过

POST /users/delete/VICTIM_ID  -->  403 Forbidden
POST /users/delete/MY_ID/../VICTIM_ID --> 200 OK
POST /users/delete/..;/delete/VICTIM_ID --> 200 OK

3.改变Content-type(内容类型)

Content-type: application/xml  -->  Content-type: application/json

4.用数字ID替换非数字

GET /file?id=90ri2xozifke29ikedawOd
GET /file?id=302

5.大小写替换绕过

GET /admin/profile --> 401 Unauthorized
GET /ADMIN/profile --> 200 OK

6.用通配符替换ID

GET /api/users/<user_id>/ --> GET /api/users/*

7.给Web应用提供一个请求ID,哪怕它没作要求

如果Web应用在请求动作中没有ID号要求,那么可以尝试给它添加一个ID号看看会发生什么。比如添加一个随机ID号、用户ID、会话ID,或是其它的对象引用参数,观察服务端的响应内容。

GET /api_v1/messages --> 200 OK

GET /api_v1/messages?user_id=victim_uuid --> 200 OK

8.HTTP参数污染,为同一参数提供多个值。

用HTTP参数污染方式针对同一参数去给它多个不同的值,这样也是可以导致IDOR漏洞的。因为Web应用可能在设计时不会料想到用户会为某个参数提交多个不同值,因此,有时可能会导致Web后端接口的访问权限绕过。

GET /api_v1/messages?user_id=ATTACKER_ID&user_id=VICTIM_ID
GET /api_v1/messages?user_id=VICTIM_ID&user_id=ATTACKER_ID

GET /api_v1/messages?user_id[]=ATTACKER_ID&user_id[]=VICTIM_ID
GET /api_v1/messages?user_id[]=VICTIM_ID&user_id[]=ATTACKER_ID

9.更改文件类型。添加不同的文件扩展名(例如.json, .xml, .config)

切换请求文件的类型可能会导致Web服务端在授权处理上发生不同,如在请求URL后加上一个.json,看看响应结果如何。

GET /user_data/123 --> 401 Unauthorized
GET /user_data/123.json --> 200 OK

10.JSON参数污染

POST /api/get_profile
Content-Type: application/json
{"user_id" :<id_1>,"user_id" :<id_2>}

11.在请求体用数组包装参数值

{"id":111} --> 401 Unauthriozied
{"id":[111]}  --> 200 OK

12.尝试不同版本的API

GET /v2/users_data/1234 --> 403 Forbidden
GET /v1/users_data/1234 --> 200 OK

三、总结

IDOR是一类逻辑漏洞的思路,思路主要是贴合业务。需要站在业务流的角度去思考,如何产生安全隐患。案例只是对于思路的一种应用,对于不同的业务流程和特点,IDOR是能够变化出各种各样的独特思路。

### DVWA 中逻辑越权漏洞的防御方法 为了有效防止逻辑越权(Insecure Direct Object References, IDOR漏洞,在设计和实现应用程序时应遵循最佳实践。以下是针对 DVWA 平台中的逻辑越权漏洞的具体防护措施: #### 权限验证机制 确保每次访问敏感资源或执行操作前都严格检查用户的权限状态。即使 URL 或请求参数中包含了对象标识符,也应当通过服务器端代码确认当前用户是否有权访问该特定资源[^1]。 ```python def check_user_permission(user_id, resource_id): # 假设这里有一个数据库查询来验证用户权限 has_access = db.query(f"SELECT * FROM permissions WHERE user_id={user_id} AND resource_id={resource_id}") if not has_access: raise PermissionError("User does not have access to this resource.") ``` #### 使用间接引用映射 (Indirect Reference Maps) 代替直接暴露内部实体ID给客户端,可以采用一种称为“间接引用”的方式处理数据索引。即创建一个临时性的、不可预测的键值表用于转换实际存储位置与对外呈现形式之间的关系。 例如,当显示文章列表时,不向浏览器发送真实的记录编号而是随机生成的一组字符串作为替代标记;只有经过身份认证的服务端才能解析这些代号并定位到对应的文档实例上。 #### 实施严格的输入校验策略 对于任何来自外部的数据源——无论是GET还是POST提交的内容亦或是Cookie里的信息片段——均需进行全面细致地过滤清洗工作,剔除潜在危险字符组合的同时还要限定允许范围内的数值区间以及长度规格等属性特征。 ```javascript function validateInput(inputValue) { const allowedPattern = /^[a-9-_]+$/; // 定义合法模式 return allowedPattern.test(inputValue); } ``` #### 日志审计跟踪功能 启用详尽的日志记录体系以便于事后分析异常行为模式。每当发生涉及重要资料变更的操作之时,务必将其详情登记入册,包括但不限于发起者账号名、动作描述语句连同时间戳记等等要素一并保存下来供后续审查之用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值