逻辑漏洞总结

从实际案例学习逻辑漏洞,基本覆盖了所有常见的逻辑漏洞

Posted by 明心 on 2019-05-05

逻辑漏洞总结

一:逻辑漏洞概述

逻辑漏洞是指由于程序逻辑不严或逻辑太复杂,导致一些逻辑分支不能够正常处理或处理错误,一般出现在任意密码修改(没有旧密码验证)、越权访问、密码找回、交易支付金额等。

二:逻辑漏洞原理与利用方法

逻辑漏洞主要涉及的方向为业务安全和支付安全,这里尽可能多的找了一些实际应用的案例。

1:验证码突破

多存在于登录、找密码应用,提交敏感数据的地方

1.1:验证码暴力破解测试

①:使用burp对特定的验证码进行暴力破解

②:使用其他爆破工具也可以,常见的有Medusa和Hydra

点击这里→无锋大佬的文章 对验证码可以爆破进行了深度的原理分析

点击这里→验证码爆破实例 实例还原验证码可爆破

1.2:验证码时间、次数测试

①:抓取携带验证码的数据包不断重复提交,例如:在投诉建议处输入要投诉的内容信息,及验证码参数,此时抓包重复提交数据包,查看历史投诉中是否存在重复提交的参数信息。

②:尝试重放发送验证码的包,查看手机是否在短时间内收到了多条短信,是的话则存在短信轰炸漏洞,这是因为后端没有对发送手机短信做时间限制

实例:https://bugs.secquan.org/bugs/WooYun-2015-119180

点击这里→短信轰炸绕过姿势

1.3:验证码客户端回显测试

①:验证码客户端回显测试

当客户端有需要和服务器进行交互,发送验证码时,即可使用firefox按F12调出firebug就可看到客户端与服务器进行交互的详细信息,可以直接看到短信验证码。

1.4:验证码绕过测试

验证码漏洞存在场景:

●验证码刷新之后,而历史刷新的验证码还是可以继续使用

●验验证码使用过后不刷新,时效性不过期,可以一直复用

●验证码使用过后不刷新,时效性不过期,可以一直复用

●很多验证码的显示很简单,容易被机器识别

点击这里→圈子大佬开发的验证码识别

●有些手机短信验证码都为 4-8位 纯数字的验证码,在接口没有任何限制的情况下是可以直接爆破的

●在未上线前为了方便测试加了888888、000000这样的万能验证码但是上线后没去删除测试的内容导致被恶意利用

①:参数污染绕过

参数污染,就是说后台发送短信的时候会取数字那部分,当你混入其他字符之后绕过了对已经发送的手机号码的限制的校验

②:变量污染绕过

所谓变量污染呢,大概因为后台校验了第一个变量的内容都当成了值处理,但是当数据包在传递到后台过去的时候,如果参数名是一样的时候,是会以第二个、第三个、第四个…最后那个参数为基准去传递,因此绕过了后台的限制

③:数据长度绕过

手机号码的定义是11位数,但是后台没有对传递的手机号码做校验长度,比如123=0123=00123,通过该方法来进行一个手机号码的绕过:【狗的一个漏洞】

④:修改变量参数绕过

比较常见就是发送验证码的时候前端带入一个状态,通过修改这个状态可以来绕过系统的限制,如已注册的用户不能发送短信或者相反未注册的用户不能发送短信Flase 改成true

⑤:Cookie替换绕过

校验用户的凭证放在了cookie中,通过修改cookie中的某些参数可以打到绕过对以发送/已注册的手机号码进行发送短信

⑥:空格绕过短信轰炸

发送短信的时候是11位数,但是数据库没有限制字段长度为11,通过添加空格绕过了原有的校验,但是后台发送号码的时候,取有效字符前面的字段,导致了出现被绕过的方法。

⑦:验证码js绕过

短信验证码验证程序逻辑存在缺陷,业务流程的第一步、第二部、第三步都是放在同一个页面里,验证第一步验证码是通过js来判断的,可以禁用JS,在没有获取验证码的情况下可以填写实名信息,并且提交成功。

2:身份认证安全

2.1:暴力破解

此类例子在早期较多:大众点评后台爆破

常用工具:

Burpsuite 、Medusa 、Hydra

htpwdScan 撞库爆破必备 URL: https://github.com/lijiejie/htpwdScan

hydra 源码安装xhydra支持更多的协议去爆破 (可破WEB,其他协议不属于业务安全的范畴)

2.2:session & cookie类

会话固定攻击:利用服务器的session不变机制,借他人之手获得认证和授权,冒充他人。

点击这里→会话固定攻击详解与实战

2.3:弱加密

前端加密,用密文去后台校验,并利用smart decode可解

3:业务一致性安全

3.1:手机号篡改

抓包修改手机号码参数为其他号码尝试,例如在办理查询页面,输入自己的号码然后抓包,修改手机号码参数为其他人号码,查看是否能查询其他人的业务。

3.2:邮箱或者用户篡改

抓包修改用户或者邮箱参数为其他用户或者邮箱

案例:点击这里→绿盟RSAS安全系统全版本通杀权限管理员绕过漏洞

3.3:订单id篡改

查看自己的订单id,然后修改id(加减一)查看是否能查看其它订单信息

案例:点击这里→https://bugs.secquan.org/bugs/WooYun-2013-44137

3.4:商品编号篡改

例如积分兑换处,100个积分只能换商品编号为001,1000个积分只能换商品编号005,在100积分换商品的时候抓包把换商品的编号修改为005,用低积分换区高积分商品

案例:点击这里→https://bugs.secquan.org/bugs/WooYun-2013-41617

3.5:用户id篡改

抓包查看自己的用户id,然后修改id(加减1)查看是否能查看其它用户id信息

案例:点击这里→https://bugs.secquan.org/bugs/WooYun-2015-111617

案例:点击这里→key大佬的不同的脑洞

4:业务数据篡改

4.1:金额数据篡改

抓包修改金额等字段,例如在支付页面抓取请求中商品的金额字段,修改成任意数额的金额并提交,查看能否以修改后的金额数据完成业务流程

案例:点击这里→https://bugs.secquan.org/bugs/WooYun-2015-117083

4.2:商品数量篡改

抓包修改商品数量等字段,将请求中的商品数量修改成任意数额,如负数并提交,查看能否以修改后的数量完成业务流程。

案例:点击这里→https://bugs.secquan.org/bugs/WooYun-2013-45218

4.3:最大数限制突破

很多商品限制用户购买数量时,服务器仅在页面通过js脚本限制,未在服务器端校验用户提交的数量,通过抓包修改商品最大数限制,将请求中的商品数量改为大于最大数限制的值,查看能否以修改后的数量完成业务流程。

4.4:本地js参数修改

部分应用程序通过Javascript处理用户提交的请求,通过修改Javascript脚本,测试修改后的数据是否影响到用户

5:密码找回漏洞

注:密码找回逻辑测试的一般流程

①:先尝试正确的密码找回流程,选择不同的找回方式,记录所有数据包

②:分析数据包,找到敏感部分,例如找回密码或重置密码时的参数

③:分析后台找回机制所采用的验证手段

④:修改数据包验证推测

5.1:用户凭证暴力破解

①:点击这里→当当网任意用户密码修改-第一波

②:点击这里→https://bugs.secquan.org/bugs/WooYun-2013-46999

5.2:返回凭证

返回凭证可以修改遍历任意用户,或返回凭证可抓包获得,或凭证可以本地构造

①:点击这里→返回凭证修改用户id可重置任意用户密码

②:点击这里→https://bugs.secquan.org/bugs/WooYun-2014-57661

③:点击这里→https://www.freebuf.com/articles/web/160883.html

5.3:邮箱弱token

注:

●找回密码的token如果是base64编码的,而解码后的明文根据其规则修改就可以成为别人用户找回密码的凭证了。

对比法,使用A、B两个账号,A账号先正常走一遍流程,然后记录流程的请求报文跟响应报文,使用B账号来测试是否能绕过直接进入最后一步骤

①:点击这里→奇虎360时间戳可爆破

②:点击这里→举一反三

③:点击这里→中兴某网站弱token

④:点击这里→https://www.freebuf.com/articles/web/176211.html

5.4:用户凭证有效性

点击这里→用户修改凭证,绕过检验

5.5:重新绑定

①:点击这里→修改id用自己的手机绑定其他人的邮箱

②:点击这里→https://bugs.secquan.org/bugs/WooYun-2014-81467

5.6:用户身份验证

①:点击这里→密码找回的最后一步没有验证用户身份

②:点击这里→https://bugs.secquan.org/bugs/WooYun-2014-75941

5.7:找回步骤

①:点击这里→直接跳过中间的找回步骤

②:点击这里→https://bugs.secquan.org/bugs/WooYun-2016-175218

5.8:本地验证

直接本地验证是否通过,可以直接抓包修改,如验证验证码是否一致等

①:点击这里→https://bugs.secquan.org/bugs/WooYun-2014-83035

②:点击这里→OPPO验证码本地验证

5.9:注册&session 覆盖

在业务的同一个步骤,使用自己的凭证覆盖别人的凭证,从而修改别人的密码或覆盖

①:点击这里→session覆盖重置别人的手机号

②:点击这里→覆盖admin用户登录

6:业务授权安全

6.1:非授权访问

非授权访问是指用户在没有通过认证授权的情况下能够直接访问需要通过认证才能访问到的页面或文本信息。可以尝试在登录某网站前台或后台之后,将相关的页面链接复制于其他浏览器或其他电脑上进行访问,看是否能访问成功。

①:点击这里→https://bugs.secquan.org/bugs/WooYun-2013-34046

②:点击这里→https://bugs.secquan.org/bugs/WooYun-2014-86597

6.2:越权访问

越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定

6.2.1:垂直越权

垂直越权是指使用权限低的用户可以访问权限较高的用户,用户可以通过修改ID的方式访问其他权限的系统内容,属于垂直越权操作。

点击这里→https://bugs.secquan.org/bugs/WooYun-2014-84657

6.2.2:水平越权

水平越权是指相同权限的不同用户可以互相访问

①:点击这里→通过修改id即可查看其他人的信息

②:点击这里→https://bugs.secquan.org/bugs/WooYun-2016-172889

7:条件竞争(HTTP并发)

场景:

在签到、转账、兑换、购买等场景是最容易出现这样的问题,而并发测试的方法可以使用Fiddler也可以使用BurpSuite Intruder模块。

这里例举下Fiddler测试方法(BurpSuite测试很简单就不说明了):

配置好代理,设置好拦截:

然后点击 兑换转账签到 等最后一步按钮的时候会抓到一个请求,右键这一请求然后按住Shift点击Replay->Reissue Requests:

填入要重发的次数:(例如20次)

点击Go放行

最后自己来判断是否存在并发的问题,例如签到,如果存在那么肯定是签到天数或者签到所获得的奖励会一下子有很多,也可以看Fiddler中的响应报文结果。

三:逻辑漏洞实例拓展

以下案例使用的方法基本在前面都提到过,实战中关键靠思路和细心。

案例1:通过猜测用户身份标识,修改可导致被重置任意用户密码

思路清晰,分析过程详细→https://secquan.org/Discuss/858

案例2:综合分析,多想细观察是关键

点击这里→https://secquan.org/Discuss/823

案例3:cookie覆盖,重置其他用户密码

点击这里https://www.secquan.org/Discuss/426

案例4:多个漏洞存在

点击这里→https://www.secquan.org/Discuss/718