整个部分结构大部分基于乌云的几篇密码找回、逻辑漏洞类文章,在其基础上记录和归纳
本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.
文章&Reference
- 密码找回逻辑漏洞总结
- 密码找回功能可能存在的问题
- 密码找回功能可能存在的问题(补充)
- 业务安全漏洞挖掘归纳总结
- 应用程序逻辑错误总结
- 在线支付逻辑漏洞总结
- web渗透测试之攻破登录页面
- 我的越权之道
- 谈高效漏洞挖掘之Fuzzing的艺术
案例
实战渗透测试中,web 的攻防一直是重中之重,而无论是对于富有经验的老手黑客和新手脚本小子来说,相比 SQL 注入、XSS 漏洞等传统安全漏洞,逻辑漏洞都是最具价值的。这类漏洞往往危害巨大,可能造成企业的资产损失和名誉受损,并且传统的 WAF 设备和防护措施收效甚微。
Cookie & Session
-
会话固定攻击
利用服务器的session不变机制,借他人之手获得认证和授权,冒充他人.
-
Cookie仿冒
修改cookie中的某个参数可以登录其他用户.
- 案例:
加密测试
-
前端加密,用密文去后台校验
- 可以使用 burpsuite 的 payload processing 功能,把字典按照加密方式先加密再发包
- 用字典生成工具生成加密好的字典,pydictor 内置 encode 功能可以支持
IP 限制
如果登录系统设置了 IP 地址白名单,我们可以通过下面的几个 http 头字段伪造 IP 地址,用 burp 抓包后将下面的某个 http 头字段加入数据包发送到服务器
Client-Ip: 127.0.0.1
X-Client-IP: 127.0.0.1
X-Real-IP: 127.0.0.1
True-Client-IP: 127.0.0.1
X-Originating-IP: 127.0.0.1
X-Forwarded-For: 127.0.0.1
X-Remote-IP: 127.0.0.1
X-Remote-Addr: 127.0.0.1
X-Forwarded-Host: 127.0.0.1
手机号篡改
抓包修改手机号码参数为其他号码尝试,例如在办理查询页面,输入自己的号码然后抓包,修改手机号码参数为其他人号码,查看是否能查询其他人的业务.
邮箱和用户名更改
抓包修改用户或者邮箱参数为其他用户或者邮箱
订单 ID 更改
查看自己的订单 id,然后修改 id(加减一)查看是否能查看其它订单信息.
- 案例:
商品编号更改
例如积分兑换处,100 个积分只能换商品编号为 001,1000 个积分只能换商品编号 005,在 100 积分换商品的时候抓包把换商品的编号修改为 005,用低积分换区高积分商品.
- 案例:
用户 ID 篡改
抓包查看自己的用户 id,然后修改 id(加减 1)查看是否能查看其它用户 id 信息.
金额数据篡改
抓包修改金额等字段,例如在支付页面抓取请求中商品的金额字段,修改成任意数额的金额并提交,查看能否以修改后的金额数据完成业务流程.
商品数量篡改
抓包修改商品数量等字段,将请求中的商品数量修改成任意数额,如负数并提交,查看能否以修改后的数量完成业务流程.
- 案例:
最大数限制突破
很多商品限制用户购买数量时,服务器仅在页面通过 js 脚本限制,未在服务器端校验用户提交的数量,通过抓包修改商品最大数限制,将请求中的商品数量改为大于最大数限制的值,查看能否以修改后的数量完成业务流程.
本地 js 参数修改
部分应用程序通过 Javascript 处理用户提交的请求,通过修改 Javascript 脚本,测试修改后的数据是否影响到用户.
用户凭证暴力破解
像是四位或者六位纯数字的验证码,对验证码进行暴破,未作限制的情况下,很快就会得到结果了
返回凭证
-
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,只要输入万能验证码,就可以无视验证码进行暴力破解.
未授权访问
非授权访问是指用户在没有通过认证授权的情况下能够直接访问需要通过认证才能访问到的页面或文本信息.可以尝试在登录某网站前台或后台之后,将相关的页面链接复制于其他浏览器或其他电脑上进行访问,看是否能访问成功.
- 案例:
越权测试
越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定.
-
垂直越权(垂直越权是指使用权限低的用户可以访问权限较高的用户)
-
水平越权(水平越权是指相同权限的不同用户可以互相访问)
顺序执行缺陷
-
部分网站逻辑可能是先 A 过程后 B 过程然后 C 过程最后 D 过程.
-
用户控制着他们给应用程序发送的每一个请求,因此能够按照任何顺序进行访问.于是,用户就从 B 直接进入了 D 过程,就绕过了 C.如果 C 是支付过程,那么用户就绕过了支付过程而买到了一件商品.如果C是验证过程,就会绕过验证直接进入网站程序了.
重放攻击
在短信、邮件调用业务或生成业务数据环节中(类:短信验证码,邮件验证码,订单生成,评论提交等),对其业务环节进行调用(重放)测试.如果业务经过调用(重放)后被多次生成有效的业务或数据结果.
-
恶意注册
目标业务注册流程不规范,使用抓包工具抓包可捕获创建用户的请求包,修改发包可以直接注册用户
-
短信炸弹
在测试的过程中,我们发现众多的金融交易平台仅在前端通过 JS 校验时间来控制短信发送按钮,但后台并未对发送做任何限制,导致可通过重放包的方式大量发送恶意短信.
内容编辑
点击"获取短信验证码",并抓取数据包内容,通过分析数据包,可以发现参数的内容有客户端控制,可以修改为攻击者想要发送的内容
大多有利用的案例发生在验证码以及业务数据的时效范围上,在之前的总结也有人将 12306 的作为典型,故,单独分类.
时间刷新缺陷
- 案例:
时间范围测试
针对某些带有时间限制的业务,修改其时间限制范围,例如在某项时间限制范围内查询的业务,修改含有时间明文字段的请求并提交,查看能否绕过时间限制完成业务流程.例如通过更改查询手机网厅的受理记录的 month 范围,可以突破默认只能查询六个月的记录.
文章
文章