谈谈业务逻辑漏洞
业务逻辑漏洞简介
业务逻辑漏洞,是由于程序逻辑不严谨或逻辑太过复杂,导致一些逻辑分支不能正常处理或处理错误,这样的漏洞统称为业务逻辑漏洞。
简单理解:就是编程人员的思维逻辑不够严谨导致攻击者有机可乘的漏洞
逻辑漏洞还是一种虽然没有在owasp top10
中提及到,但是往往会存在的漏洞。好像一名隐士,大隐隐于市,然而造成的破坏可能一点不比sql注入,xss等漏洞小。如下是逻辑漏洞的top10挖掘方向:
根据漏洞出现位置来总结
逻辑漏洞大概出现在如下几处。下面我们根据出现位置来一处一处进行总结
登陆部分存在的逻辑漏洞
暴力破解用户名或密码
暴力破解用户名密码的情况,一般出现在登陆部分没有验证码机制,没有根据用户名限制失败次数,没有根据ip限制失败次数等情况下。
通常思路:
- 直接拿密码字典爆破某一个用户名
- 拿固定的弱口令密码,去跑top xxx的用户名
- 如果只是用户名限制失败次数,可以使用思路2的方法
- 在存在返回提示用户名错误或者密码错误的情况下,可以分别爆用户名和密码
常见限制:有时候会发现用户名或者密码是密文加密,这时可能是通过前端或者其他方式加密,对于简单的来说base64
编码和md5
的签名是很好识破的,在爆破的时候可以选择encode和hash
利用cookie&session
cookie伪造
Cookie伪造:通过修改 Cookie 中的某个参数来实现登录其他用户
测试方法:
1.使用一个账号登录,找一个可以证明身份的页面,例如首页的欢迎 xxx 或者是个人中心显示昵称的地方
2.刷新该页面拦截请求,观察 Cookie 中的字段和值,例如 userid=xxx,修改Cookie中的值,把 xxx 改成 admin
3.forword 放行,页面显示 admin 的信息,则存在此问题。
• 修复方法:对于客户端标识的用户信息,使用 Session 会话认证方式,避免通过 Cookie 去仿冒其他人的身份。
Session会话固定攻击
Session会话固定攻击:一种诱骗受害者使用攻击者指定的会话标识(Session id)的攻击手段,利用了服务器的session 不变的机制
攻击步骤:
1.攻击者通过某种手段重置目标用户的 Session id,然后监听用户会话状态
- 目标用户携带攻击者设定的Session id 登录站点
- 攻击者通过 Session id 获得合法会话
• 攻击者重置 Session id 的方法:通过xss,嗅探等方法取得用户的session,修改数据包。
• 修复方法:每次登陆成功之后重新生成session,sessionID闲置过久时,进行重置sessionID
案例-益云公益广告越权修改漏洞
用户A创建一个广告,记住id为420
用户B也创建个广告,进入修改页面,截断修改请求,并将id改为420
支付处存在的逻辑漏洞
支付处存在的逻辑漏洞很多,但是一言以蔽之:数据篡改。
下面我们先来看一个支付处逻辑漏洞的复现。
Tiny_shop CMS 逻辑漏洞复现
环境搭建
LAMP环境的安装直接省略掉了,phpstudy一把梭非常的舒适。将源码copy到phpstudy的WWW文件夹中,启动lamp环境,即可进入安装页面
http://127.0.0.1/TinyShop_v3.0/install/index.php?step=1
ps:环境搭建成功后,我发现访问index页面显示空白页面。在大佬的提醒下发现是自己php版本不对(7.x)换成php5.x版本再次访问即可
支付逻辑漏洞复现
首先点击最上方的登陆按钮,登陆默认账户 test@test.com 密码 test (自己注册的)
这里我们随便选择了一个商品,选择好产品参数之后,点击购买。
点击购买时,使用bp进行抓包,在数据包中,将表示商品数量的num变量改为负数,然后forward这个数据包。
这样就利用网站漏洞成功薅到了店家羊毛
除了上述修改商品数量的方法,支付处的逻辑漏洞还包含如下几种思路,由于操作比较简单且大同小异,这里为了节省篇幅只放利用思路。
修改商品编号
如果业务是通过商品编号来判断价格的话,可能存在只修改A商品编号为B商品编号,做到以A商品的价格购买B商品
条件竞争
支付处,多线程请求付款确认,结果如果余额为负数,则存在该漏洞
金额修改
金额直接写在了post
或者get
请求中,对其进行修改达到修改了商品金额的效果
充值中放弃订单未失效
在充值中选取大额充值订单,放弃订单,获得订单号,之后充值小额订单,拿到充值成功的界面,将订单号修改为放弃的大额订单,观察是否成功