IDOR
整个部分结构大部分基于乌云的几篇密码找回、逻辑漏洞类文章,在其基础上记录和归纳
免责声明
本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.
大纲
认证绕过
未授权访问
身份认证绕过
密码重置
验证码突破
Ticket_Trick
授权绕过
越权测试
执行顺序绕过
race_condition
限制绕过
IP限制绕过
时间刷新缺陷
JS绕过
接口利用
BOLA
数据篡改
重放攻击
DoS
文章 & Reference
案例
相关工具
ztosec/secscan-authcheck - 越权检测工具
实战渗透测试中,web 的攻防一直是重中之重,而无论是对于富有经验的老手黑客和新手脚本小子来说,相比 SQL 注入、XSS 漏洞等传统安全漏洞,逻辑漏洞都是最具价值的。这类漏洞往往危害巨大,可能造成企业的资产损失和名誉受损,并且传统的 WAF 设备和防护措施收效甚微。
认证绕过
相关文章
未授权访问
非授权访问是指用户在没有通过认证授权的情况下能够直接访问需要通过认证才能访问到的页面或文本信息.可以尝试在登录某网站前台或后台之后,将相关的页面链接复制于其他浏览器或其他电脑上进行访问,看是否能访问成功.
身份认证绕过
相关文章
Cookie & Session
加密测试
前端加密,用密文去后台校验
可以使用 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$
返回凭证
密码找回凭证
返回短信验证码
邮箱弱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
相关案例
授权绕过
越权测试
越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定.
Tips
HTTP Header based bypass:
X-Original-URL: /redact
Referer: https://site.com/api/redact
相关文章
垂直越权(垂直越权是指使用权限低的用户可以访问权限较高的用户)
水平越权(水平越权是指相同权限的不同用户可以互相访问)
手机号篡改
抓包修改手机号码参数为其他号码尝试,例如在办理查询页面,输入自己的号码然后抓包,修改手机号码参数为其他人号码,查看是否能查询其他人的业务.
用户 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 渗透中的越权
https://owasp.org/www-project-api-security/
相关文章
相关案例
Tips
部分内容来自 [A Deep Dive On The Most Critical API Vulnerability — BOLA (Broken Object Level Authorization]、[31 Days of API Security]
FUZZ 接口路径、接口名
https://github.com/ffffffff0x/AboutSecurity/tree/master/Dic/Web/api_param
大小写替换
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,用低积分换区高积分商品.
金额数据篡改
抓包修改金额等字段,例如在支付页面抓取请求中商品的金额字段,修改成任意数额的金额并提交,查看能否以修改后的金额数据完成业务流程.
案例:
http://www.0dayhack.net/index.php/634/
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
实际上开发人员使用了正则表达式来对用户输入的数据进行有效性校验, 当编写校验的正则表达式存在缺陷或者不严谨时, 攻击者可以构造特殊的字符串来大量消耗服务器的系统资源,造成服务器的服务中断或停止。常见的点如注册时检查密码是否包含用户名。
正则知识点
regex
API参数可控
当查询请求或插入请求参数可控时,一般我们会认为存在数据泄露、批量XXX漏洞,但这里也存在占用服务器资源的利用点,当无法实际越权时,可以尝试加大参数,或缩短时间间隔,耗尽服务器资源。
Infinite loop
通过控制参数,让服务器无限循环某个请求处理,从而消耗服务器资源.