学习笔记-IDOR
IDOR
整个部分结构大部分基于乌云的几篇密码找回、逻辑漏洞类文章,在其基础上记录和归纳
免责声明
本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.
大纲
文章 & Reference
- 密码找回逻辑漏洞总结
- 密码找回功能可能存在的问题
- 密码找回功能可能存在的问题(补充)
- 业务安全漏洞挖掘归纳总结
- 应用程序逻辑错误总结
- 在线支付逻辑漏洞总结
- web渗透测试之攻破登录页面
- 我的越权之道
- 谈高效漏洞挖掘之Fuzzing的艺术
- 密码找回中的套路
- 登录点测试的那些事
- 基于业务场景的漏洞挖掘
- 针对医疗系统的快速漏洞挖掘思路
案例
- 挖洞经验 | 连接多个漏洞获取管理员访问权限
- 挖洞经验 | 看我如何发现谷歌电子表格、谷歌云盘和谷歌相册的3个漏洞($4133.7)
- 挖掘某小型CMS厂商逻辑漏洞的过程
- 对某大学管理信息系统的一次渗透测试
相关工具
- ztosec/secscan-authcheck - 越权检测工具
实战渗透测试中,web 的攻防一直是重中之重,而无论是对于富有经验的老手黑客和新手脚本小子来说,相比 SQL 注入、XSS 漏洞等传统安全漏洞,逻辑漏洞都是最具价值的。这类漏洞往往危害巨大,可能造成企业的资产损失和名誉受损,并且传统的 WAF 设备和防护措施收效甚微。
认证绕过
相关文章
未授权访问
非授权访问是指用户在没有通过认证授权的情况下能够直接访问需要通过认证才能访问到的页面或文本信息.可以尝试在登录某网站前台或后台之后,将相关的页面链接复制于其他浏览器或其他电脑上进行访问,看是否能访问成功.
身份认证绕过
相关文章
Cookie & Session
-
会话固定攻击
利用服务器的session不变机制,借他人之手获得认证和授权,冒充他人.
-
Cookie仿冒
修改cookie中的某个参数可以登录或冒充其他用户.
加密测试
-
前端加密,用密文去后台校验
- 可以使用 burpsuite 的 payload processing 功能,把字典按照加密方式先加密再发包
- 用字典生成工具生成加密好的字典,pydictor 内置 encode 功能可以支持
调式代码
00000 null %00
修改返回值
- 思路
HTTP/1.1 404 Not Found ... {"code": false} HTTP/1.1 404 Not Found ... {"code": true}
修改状态码
- 思路
HTTP/1.1 404 Not Found ... {"code": false} HTTP/1.1 200 OK ... {"code": false}
密码重置
相关文章
参数污染
- 思路
POST /reset email=test@mail.com # 参数污染 email=test@mail.com&email=f8x@mail.com email=test@mail.com,email=f8x@mail.com email=test@mail.com%20email=f8x@mail.com email=test@mail.com|email=f8x@mail.com email=test@mail.com%00email=f8x@mail.com # 参数值中没有域 email=test # 参数值中没有 TLD email=test@mail # 使用抄送 email=test@mail.com%0a%0dcc:f8x@mail.com # json 污染 {"email":test@mail.com","f8x@mail.com",“token":"xxxxxxxxxx"}
用户凭证暴力破解
像是四位或者六位纯数字的验证码,对验证码进行暴破,未作限制的情况下,很快就会得到结果了
-
思路
POST /reset email=test@mail.com&code=123456 POST /reset email=test@mail.com&code=$123456$
-
案例:
返回凭证
-
url 返回验证码及 token
不多说,直接输入验证码即可修改密码
- 案例:
-
密码找回凭证
- 案例:
-
返回短信验证码
邮箱弱token
-
时间戳的 MD5
- 案例:
-
服务器时间
用户凭证有效性
-
邮箱 token
-
重置密码 token
重新绑定
-
手机绑定
- 案例:
-
邮箱绑定
- 案例:
服务器验证
-
最终提交步骤
- 案例:
-
服务器验证可控内容
- 案例:
-
服务器验证验证逻辑为空
用户身份验证
-
账号与手机号码的绑定
- 案例:
-
账号与邮箱账号的绑定
- 案例:
找回步骤
- 跳过验证步骤、找回方式,直接到设置新密码页面
本地验证
-
在本地验证服务器的返回信息,确定是否执行重置密码,但是其返回信息是可控的内容,或者可以得到的内容.
-
发送短信等验证信息的动作在本地进行,可以通过修改返回包进行控制.
- 案例:
注入
- 在找回密码处存在注入漏洞.
Token生成
- Token 生成可控.
注册覆盖
- 注册重复的用户名.
Session覆盖
- Session 覆盖
验证码突破
相关文章
验证码暴力破解
- 使用 burp 对特定的验证码进行暴力破解
验证码不刷新
在一段时间内只要不刷新页面,无论登录失败多少次都不刷新验证码,这个时候就可以使用同一个验证码根据上面的方式进行暴力破解
验证码失效
不管在验证码表单输入什么样的数据,都会判断通过,但这种情况很少见
验证码绕过测试
当第一步向第二步跳转时,抓取数据包,对验证码进行篡改清空测试,验证该步骤验证码是否可以绕过.对于 request 数据: user=admin&pass=1234&vcode=brln
,有两种绕过方法:
- 一是验证码空值绕过,改成 user=admin&pass=1234&vcode=;
- 一是直接删除验证码参数,改成 user=admin&pass=1234.
验证码 js 绕过
短信验证码验证程序逻辑存在缺陷,业务流程的第一步、第二部、第三步都是放在同一个页面里,验证第一步验证码是通过 js 来判断的,可以修改验证码在没有获取验证码的情况下可以填写实名信息,并且提交成功.
万能验证码
渗透测试的过程中,有时候会出现这种情况,系统存在一个万能验证码,如 0000、9999,只要输入万能验证码,就可以无视验证码进行暴力破解.
Ticket_Trick
相关案例
- How I hacked hundreds of companies through their helpdesk
- How I hacked Google’s bug tracking system itself for $15,600 in bounties
授权绕过
越权测试
越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定.
Tips
- HTTP Header based bypass:
- X-Original-URL: /redact
- Referer: https://site.com/api/redact
相关文章
垂直越权(垂直越权是指使用权限低的用户可以访问权限较高的用户)
水平越权(水平越权是指相同权限的不同用户可以互相访问)
-
案例:
-
手机号篡改
抓包修改手机号码参数为其他号码尝试,例如在办理查询页面,输入自己的号码然后抓包,修改手机号码参数为其他人号码,查看是否能查询其他人的业务.
-
邮箱和用户名更改
抓包修改用户或者邮箱参数为其他用户或者邮箱
-
订单 ID 更改
查看自己的订单 id,然后修改 id(加减一)查看是否能操作其它订单信息.
-
用户 ID 篡改
抓包查看自己的用户 id,然后修改 id(加减 1)查看是否能查看其它用户 id 信息.
执行顺序绕过
-
部分网站逻辑可能是先 A 过程后 B 过程然后 C 过程最后 D 过程.
-
用户控制着他们给应用程序发送的每一个请求,因此能够按照任何顺序进行访问.于是,用户就从 B 直接进入了 D 过程,就绕过了 C.如果 C 是支付过程,那么用户就绕过了支付过程而买到了一件商品.如果C是验证过程,就会绕过验证直接进入网站程序了.
race_condition
相关文章
限制绕过
IP限制绕过
如果登录系统设置了 IP 地址白名单,我们可以通过修改 http 头字段伪造 IP 地址
或者直接修改 host 头
curl -v -H "Host: localhost" https://target/
wget -d --header="Host: localhost" https://target/
时间限制绕过
时间刷新缺陷
- 案例:
时间范围测试
针对某些带有时间限制的业务,修改其时间限制范围,例如在某项时间限制范围内查询的业务,修改含有时间明文字段的请求并提交,查看能否绕过时间限制完成业务流程.例如通过更改查询手机网厅的受理记录的 month 范围,可以突破默认只能查询六个月的记录.
JS绕过
相关案例
最大数限制突破
很多商品限制用户购买数量时,服务器仅在页面通过 js 脚本限制,未在服务器端校验用户提交的数量,通过抓包修改商品最大数限制,将请求中的商品数量改为大于最大数限制的值,查看能否以修改后的数量完成业务流程.
本地 js 参数修改
部分应用程序通过 Javascript 处理用户提交的请求,通过修改 Javascript 脚本,测试修改后的数据是否影响到用户.
接口利用
相关文章
相关案例
学习资源
BOLA
Broken Object Level Authorization
这个是 OWASP API Security Project 中的一种漏洞,和 IDOR 很像,我的理解就是 API 渗透中的越权
相关文章
相关案例
- How I could have hacked your Uber account
- Content Injection Vulnerability in WordPress
- How spending our Saturday hacking earned us 20k
Tips
部分内容来自 [A Deep Dive On The Most Critical API Vulnerability — BOLA (Broken Object Level Authorization]、[31 Days of API Security]
- FUZZ 接口路径、接口名
- 大小写替换
userinfo/view
userINFO/VIew
- 测试不同版本的 API 接口
/v1/userinfo/view
/v2/userinfo/view
- 添加后缀
userinfo/view.json
userinfo/view.action
- 内容注入
userinfo/view?id=123
userinfo/view?id=*
userinfo/view?id=ABC
userinfo/view?id=123ABC
userinfo/view?id=123ABC!@#
userinfo/view?id=1+2+3
userinfo/view?id=1%203
- 添加参数
userinfo/view
userinfo/view?id=xxx
- 数组
{"id":xxx}
{"id":[xxx]}
- JSON 对象
{"id":xxx}
{"id":{"id":xxx}}
{"id":{"id":[xxx]}}
- 去 JSON
{"id":xxx}
id=xxx
- 更改请求内容类型
Content-type: application/xml
Content-type: application/json
- 通配符
{""id"":""*""}
- 尝试执行 JSON 参数污染
或POST api / get_profile {"user_id":<legit_id>,"user_id":<victim's_id>} {"id":2,"id":1}
POST api / get_profile {"user_id":<victim's_id>,"user_id":<legit_id>}
- 尝试执行 HTTP 参数污染:
userinfo/view?id=xxx
userinfo/view?id=xxx&id=yyy
userinfo/view?id=xxx&id=yyy,zzz
- 查找未启用授权机制的 API 主机、或 API 节点
- 测试不同平台的 API 点、如 APP、微信公众号
- 尝试使用 GET/POST/OPTIONS/PUT/TRACE 等方法
- DOS
limit=999999999
- 测试该 API 是否支持 SOAP,将内容类型更改为
application/xml
,在请求正文中添加简单的 XML,然后查看 API 如何处理它。
数据篡改
商品编号更改
例如积分兑换处,100 个积分只能换商品编号为 001,1000 个积分只能换商品编号 005,在 100 积分换商品的时候抓包把换商品的编号修改为 005,用低积分换区高积分商品.
- 案例:
金额数据篡改
抓包修改金额等字段,例如在支付页面抓取请求中商品的金额字段,修改成任意数额的金额并提交,查看能否以修改后的金额数据完成业务流程.
-
案例:
-
Tips:
- 数量改为小数、负数、0
- 同时购买多个物品,部分商品数量改为负数
商品数量篡改
抓包修改商品数量等字段,将请求中的商品数量修改成任意数额,如负数并提交,查看能否以修改后的数量完成业务流程.
- 案例:
重放攻击
在短信、邮件调用业务或生成业务数据环节中(类:短信验证码,邮件验证码,订单生成,评论提交等),对其业务环节进行调用(重放)测试.如果业务经过调用(重放)后被多次生成有效的业务或数据结果.
相关文章
恶意注册
目标业务注册流程不规范,使用抓包工具抓包可捕获创建用户的请求包,修改发包可以直接注册用户
短信炸弹
在测试的过程中,我们发现众多的金融交易平台仅在前端通过 JS 校验时间来控制短信发送按钮,但后台并未对发送做任何限制,导致可通过重放包的方式大量发送恶意短信.
内容编辑
点击"获取短信验证码",并抓取数据包内容,通过分析数据包,可以发现参数的内容有客户端控制,可以修改为攻击者想要发送的内容
DoS
相关文章
资源生成大小可控
当遇到请求验证码或二维码请求参数可控时,可以尝试修改图片尺寸参数,例如将原本长宽 20x20 尺寸的请求,改为 2000x2000 查看返回的图片尺寸是否修改.
- 相关文章
Zip 炸弹
当遇到相应业务允许上传模板文件时,可以尝试上传 zip,当存在自动解压条件时,可通过非递归 zip 炸弹文件耗尽服务器资源.
Xml DoS
在 XXE 漏洞中常见的一种攻击方式,当服务端解析 xml文档,通过迭代解析和远程解析巨大文件,造成服务器资源的占用.
- Denial-of-Service
- External Entity
- Internal Entity
reDOS
Regular expression Denial of Service
实际上开发人员使用了正则表达式来对用户输入的数据进行有效性校验, 当编写校验的正则表达式存在缺陷或者不严谨时, 攻击者可以构造特殊的字符串来大量消耗服务器的系统资源,造成服务器的服务中断或停止。常见的点如注册时检查密码是否包含用户名。
API参数可控
当查询请求或插入请求参数可控时,一般我们会认为存在数据泄露、批量XXX漏洞,但这里也存在占用服务器资源的利用点,当无法实际越权时,可以尝试加大参数,或缩短时间间隔,耗尽服务器资源。
Infinite loop
通过控制参数,让服务器无限循环某个请求处理,从而消耗服务器资源.
- 相关案例
点击关注,共同学习!
安全狗的自我修养