逻辑漏洞总结 | 您所在的位置:网站首页 › 业务逻辑漏洞挖掘 › 逻辑漏洞总结 |
前言 本篇文章是博主个人在网络学习时收集整理总结的笔记,在文章末尾已经标明参考原文的链接,有问题可以私聊整改。 0x01 逻辑漏洞逻辑漏洞是指由于程序逻辑输入管控不严或者逻辑太复杂,导致程序不能够正常处理或处理错误,逻辑漏洞根据功能需求的不同产生的漏洞方式也不同。一般出现在网站程序的登录注册、密码找回、验证方式、信息查看、交易支付金额等地方。 0x02 挖掘思路在测试逻辑漏洞之前,需要大家熟悉掌握Burpsuite工具使用,以及准备相应字典文件(例如:用户名字典、密码字典…)。 首先将所有逻辑漏洞的问题分为前端和后端两个部分,先测试绕过前端规则限制再测试绕过后端规则限制,一般情况下只要能够突破原有规则限制的都就可以算是漏洞了。 挖掘逻辑漏洞总体步骤分为以下三步: 明确业务逻辑,根据业务需求的特点,有针对性的进行测试; 寻找可控参数,例如用户ID参数、订单金额参数等等; 通过抓包,修改包参数,重放包对比结果差异。 0x03 业务逻辑漏洞1. 登录模块 暴力破解 任意用户/密码登陆 短信/邮箱轰炸 验证码绕过/爆破/重放/回传 用户名/手机号枚举 越权登陆(例如修改数据包中用户ID) 账号权限绕过(越权) Cookie伪造 用户空密码登陆万能验证码: 程序员在开发验证码模块时,为了方便调用验证码验证功能是否完善,故意设置了几个万能的验证码作为测试数据。在开发结束后由于程序员的疏忽,没有删除该测试验证码数据从而导致该漏洞的产生。 验证码回传: 通过抓包的方式,可以看到验证码内容回显在了数据包中;或者通过查看网页源代码可以看到验证码中的内容,导致正确验证码可以被直接读取利用到。 删除验证码绕过: 通过抓包将验证码的值删除或者直接删除验证码参数,然后将修改后的数据包进行重放导致验证码验证被绕过。 验证码爆破: 此处验证码爆破通常是指手机短信验证的方式,由于没有对输入同一个验证码的次数做限制,并且验证码的内容太简单,例如4位或者6位的纯数字组成。可以通过Burp的Intruder模块对验证码内容进行爆破,直到匹配到正确的验证码。 验证码重放 首先,输入错误的验证码,进行抓包重放一次,观察验证的返回的数据包内容,再用正确的验证码再进行抓包重放,对比两个数据包的差异,然后根据这些差异验证码是否失效。 然后将正确的验证码发送至Burp的Intruder模进行不断的重放,比较这些数据包是否都是正确验证码时返回的一样内容,如果数据包内容一样说明存在验证码重放的漏洞。 验证码与手机号未统一匹配 首先用自己的手机收到正确验证码,在点击注册时拦截包将手机号改为其他手机号,如果成功的话就注册了别人的手机号,这是因为后端仅验证了验证码是否是正确的而没有验证验证码是否与手机匹配。 2. 短信轰炸尝试不断重放发送验证码的数据包,查看手机是否在短时间内收到了多条短信,是的话则存在短信轰炸漏洞,这是因为后端没有对发送手机短信做时间/次数限制。 如果后端对短信验证码做了限制,那么可以尝试以下几种方式进行绕过: 删除修改cookie或者返回值,重放数据包 遍历参数发送数据包 对参数进行叠加 手机号后面加空格(%20)或者前面加其他的比如+86、逗号、分号、字母等 请求参数修改大小写,或者添加请求参数&id=1 多接口测试,可能登陆位置做了防护,但密码找回出没有防护 利用调用接口绕过短信轰炸限制 修改IP绕过短信轰炸限制 添加重复的手机号参数,重放数据包 3. 越权操作首先用一个账号登陆系统后,通过抓包修改用户参数,可以达到查看或者修改他人账号的目的,尽量对多接口或者多功能模块进行不断测试越权操作。同时也要多个账号登陆,分析对比这些账号数据包中的请求参数差异,通过修改这些存在差异的参数,看看是否能够达到越权操作的目的。 越权漏洞又分为平行越权,垂直越权和交叉越权。 平行越权:权限类型不变,权限ID改变 垂直越权:权限ID不变,权限类型改变 交叉越权:即改变ID,也改变权限 4. 用户信息泄露可能存在用户个人信息页面、密码找回处以及各种调用到用户信息数据的地方,通过抓包查看返回信息是否加载了一些敏感的数据信息,比如查询用户信息的时候也将用户的密码数据在数据包中回显了;或者在用户个人资料页面,通过抓包修改用户ID参数,可以通过遍历查询到其他账号的用户资料,导致用户信息泄露; 5. 任意用户密码重置通常发生在忘记密码处,由于系统没有严格匹配用户忘记密码时的验证方式,通过抓包修改用户参数,导致任意用户的密码都能够被重置。 比如某个忘记密码功能处采用手机号短信验证的方式来重置用户密码,如果该验证手机号没有对用户账户进行绑定,那么就可以通过输入任意手机号接收短信验证,然后就可以利用该验证码重置用户密码了。 6. 订单金额任意修改很多中小型的购物网站都存在订单金额任意修改漏洞。在提交订单的时候抓取数据包或者直接修改前端代码,然后对订单的金额任意修改。 经常见到的参数大多为:rmb 、value 、amount 、cash 、fee 、money 等 关于支付的逻辑漏洞这一块还有很多种思路,比如相同价格增加订单数量,相同订单数量减少产品价格,订单价格设定为负数等等。 7. 未授权访问有些业务的接口,因为缺少了对用户的登陆凭证的较验或者是验证存在缺陷,导致黑客可以未经授权访问这些敏感信息甚至是越权操作。 一般容易出现在文件导出下载,JSON数据页面,第三方应用页面等位置。 常见案例: 某电商后台主页面,直接在管理员web路径后面输入main.php之类的即可进入。 某航空公司订单ID枚举 某电子认证中心敏感文件下载 某站越权操作及缺陷,其主要原因是没对ID参数做cookie验证导致实际上还有很多案例,他们都存在一个共同的特性,就是没有对用户的登陆凭证进行效验 8. 接口无限制枚举有些关键性的接口因为没有做验证或者其它预防机制,容易遭到枚举攻击。 常见案例: 某电商登陆接口无验证导致撞库 某招聘网验证码无限制枚举 某快递公司优惠券枚举 某电商会员卡卡号枚举 某超市注册用户信息获取 9. cookie/token设计存在缺陷cookie的效验值过于简单。有些web对于cookie的生成过于单一或者简单,导致黑客可以对cookie的效验值进行一个枚举。或者通过修改cookie中的某个参数可以登陆其他用户,即cookie仿冒。 token一般是操作令牌,每个用户在登录系统时,服务器会为每个用户生成token令牌作为操作凭证。如果token设计太过于简单,那么可能会被破解;或者token没有设置过期的时间,使得用户token不唯一,导致用户token存在被盗用的风险。 10. 找回密码存在设计缺陷auth设计缺陷 经常研究逻辑漏洞的人可能会对以下URL很熟悉 www.xxx.com/resetpassword.php?id=MD5用户修改密码时,邮箱中会收到一个含有auth的链接,在有效期内用户点击链接,即可进入重置密码环节。而大部分网站对于auth的生成都是采用rand()函数,那么这里就存在一个问题了,Windows环境下rand()最大值为32768,所以这个auth的值是可以被枚举的。 如下面这个代码可以对auth的值做一个字典。 $a=0; for ($a=0;$a |
CopyRight 2018-2019 实验室设备网 版权所有 |