业务逻辑漏洞,是由于程序逻辑不严谨或逻辑太过复杂,导致一些逻辑分支不能正常处理或处理错误,这样的漏洞统称为业务逻辑漏洞。
简单理解:就是编程人员的思维逻辑不够严谨导致攻击者有机可乘的漏洞
逻辑漏洞还是一种虽然没有在owasptop10中提及到,但是往往会存在的漏洞。好像一名隐士,大隐隐于市,然而造成的破坏可能一点不比sql注入,xss等漏洞小。如下是逻辑漏洞的top10挖掘方向:
逻辑漏洞大概出现在如下几处。下面我们根据出现位置来一处一处进行总结
暴力破解用户名密码的情况,一般出现在登陆部分没有验证码机制,没有根据用户名限制失败次数,没有根据ip限制失败次数等情况下。
通常思路:
常见限制:有时候会发现用户名或者密码是密文加密,这时可能是通过前端或者其他方式加密,对于简单的来说base64编码和md5的签名是很好识破的,在爆破的时候可以选择encode和hash
cookie伪造
测试方法:
修复方法:对于客户端标识的用户信息,使用Session会话认证方式,避免通过Cookie去仿冒其他人的身份。
Session会话固定攻击
Session会话固定攻击:一种诱骗受害者使用攻击者指定的会话标识(Sessionid)的攻击手段,利用了服务器的session不变的机制
攻击步骤:
攻击者重置Sessionid的方法:通过xss,嗅探等方法取得用户的session,修改数据包。
修复方法:每次登陆成功之后重新生成session,sessionID闲置过久时,进行重置sessionID
支付处存在的逻辑漏洞很多,但是一言以蔽之:数据篡改。
下面我们先来看一个支付处逻辑漏洞的复现。
LAMP环境的安装直接省略掉了,phpstudy一把梭非常的舒适。将源码copy到phpstudy的WWW文件夹中,启动lamp环境,即可进入安装页面
ps:环境搭建成功后,我发现访问index页面显示空白页面。在大佬的提醒下发现是自己php版本不对(7.x)换成php5.x版本再次访问即可
首先点击最上方的登陆按钮,登陆默认账户test@test.com密码test(自己注册的)
这里我们随便选择了一个商品,选择好产品参数之后,点击购买。
点击购买时,使用bp进行抓包,在数据包中,将表示商品数量的num变量改为负数,然后forward这个数据包。
这样就利用网站漏洞成功薅到了店家羊毛
除了上述修改商品数量的方法,支付处的逻辑漏洞还包含如下几种思路,由于操作比较简单且大同小异,这里为了节省篇幅只放利用思路。
修改商品编号
如果业务是通过商品编号来判断价格的话,可能存在只修改A商品编号为B商品编号,做到以A商品的价格购买B商品
条件竞争
支付处,多线程请求付款确认,结果如果余额为负数,则存在该漏洞
金额修改
金额直接写在了post或者get请求中,对其进行修改达到修改了商品金额的效果
充值中放弃订单未失效
在充值中选取大额充值订单,放弃订单,获得订单号,之后充值小额订单,拿到充值成功的界面,将订单号修改为放弃的大额订单,观察是否成功
由于没有对用户权限进行严格的判断,导致低权限的账号(比如普通用户)可以去完成高权限账号(比如超管)范围内的操作,如果能够成功操作,则称之为越权操作。越权漏洞形成的原因是后台使用了不合理的权限校验规则导致的。
开发人员在对数据进行操作时对客户端请求的数据过分相信,遗漏了对于客户端权限的仔细判定。
越权漏洞主要分为水平越权和垂直越权两大类。
例如两个不同的公司A和B,通过修改请求,公司A可以任意修改B公司的员工、部门、考勤等信息。
垂直越权危害:
向下越权:一个高级用户可以访问低级用户信息(暴露用户隐
例如同一个公司的职员A和经理B。显然他们在公司后台管理系统中账号的管理权限不同。垂直越权通过修改请求,职员A可以修改不在他管辖范围内的员工、考勤、工资等(自我加薪??)
关于如上介绍的总结话,偷我亲爱的来自MS08067团队的讲师一张图是再好不过了
环境准备:
下载metinfoV4.0CMS源码进行网站搭建
下载后将源码解压至phpstudy的web根目录即可。
登陆后进入修改基本信息的页面,随便修改一个密码,点击提交信息的同时上传
抓包修改useid为管理员id
成功修改管理员账号密码为123456,尝试登陆
成功登陆,在界面风格->模板管理->添加新模板处发现一处文件上传漏洞。将冰蝎木马压缩成zip文件成功上传
查看一下编辑模板参数,报错是在意料之中的,我们需要的是木马路径
使用冰蝎服务器端连接木马。成功执行
环境准备
复现该漏洞需要注册两个网站账号
1.test@test.com/1234562.ms08067/123456
漏洞复现
分别用chrome和微软两个浏览器登陆这两个账号
通过抓包,获取ms08067用户的phpsessid为:df9jjuneuuqo5hgjjsid106km4
在另一账号test@test.com的修改密码操作上抓包,并将sessid修改为ms08067账号的sessid。尝试更改密码为123456789。放包,显示修改成功。
尝试使用新密码登陆ms08067账户,发现登陆成功。
漏洞描述
环境搭建
使用虚拟机安装docker,vulhub
cdvulhub/couchdb/CVE-2017-12635#进入靶场目录docker-composeup-d#开启靶场dockerps#查看端口一个小报错处理
p.s:运行命令docker-composeup-d这里出现了一个报错。百度搜了一波,发现这是由于当前用户未加入docker组。解决方案是运行命令
sudogpasswd-a${USER}docker然后退出当前用户比如切换为root,再次切换回原用户。然后执行docker-composeup-d就ok了。
漏洞原理分析
由于Erlang和JavaScript对JSON解析方式的不同,导致语句执行产生差异性(对于给定的键,Eralang解析器将存储两个值,但是JavaScript只存储第二个值)
如:Erlang:
{[{<<“a”>>,<<“1”>>},{<<“a”>>,<<“2”>>}]}
JavaScript:
{a:“2”}
可以被利用于,非管理员用户赋予自身管理员身份权限。
访问服务器ip:5984并抓包将抓到的包发送给重发器(Repeater)并将发送数据改为如下(服务器IP地址为自己搭建的IP):
PUT/_users/org.couchdb.user:qaqHTTP/1.1Accept:/Host:192.168.160.141:5984/Accept-Language:enUser-Agent:Mozilla/5.0(WindowsNT10.0;WOW64;rv:49.0)Gecko/20100101Firefox/49.0Content-Type:application/jsonConnection:closeContent-Length:101{"type":"user","name":"qaq","roles":["_admin"],"password":"666666"}返回403错误:{“error”:”forbidden”,”reason”:”Only_adminmaysetroles”}报错原因是只有管理员才能设置Role角色。通过增加一个roles字段数据包的方式绕过限制
复现完记得销毁环境哦~目录中执行命令
现在通达官网已经把版本升级到了11.7,所以下载11.6版本需要自己寻找资源
傻瓜式安装,配置界面如下。完成安装之后就可以暂时不用管它了。记得接触80端口占用(一般是要把phpstudy关掉)
安装完之后就可以访问网站首页了。这个漏洞复现手动过程比较容易,执行exp写马就可以了
exp:
脚本内容如下,核心思路就是删除网站里的一个名为auth.inc.php的文件,进而越权拿shell
蚁剑拿shell
程序执行之后出现了一个URL,为一句话木马所在位置。使用webshell管理工具(如蚁剑链接即可)
利用phpstudy搭建,下载源码后copy进根目录安装即可
用户名admin密码admin进入后台,系统设置->系统基本参数->会员设置将是否开启会员功能一栏调为是
接着返回网站主页,注册一个账号,记得不要设施安全提示问题
接着回到后台将等待验证邮件修改为:”审核通过,提示填写完整信息”
进入test123用户的个人中心,打开bp抓包,将DedeUserID_ckMD5覆盖为last_vid_ckMd5。修改完成后释放该包
此时发现test123用户变成了admin
使用F12打开控制台,进入储存,仍然是将DedeUserID_ckMD5覆盖为last_vid_ckMd5。将DedeUserID的值修改为test123.
刷新抓包,发送至repeater
1.使用最小权限原则对用户进行赋权,对待权限做一只一毛都不多拔的铁公鸡
2.使用合理(严格)的权限校验规则;
方法很多,思路重复,这里挑重要的讲
返回凭证
返回凭证的三种方式:
方法:
举例:
暴力破解:
要了解常见验证码机制:
回显测试:
绕过验证码:
漏洞成因:
特殊姿势:篡改手机号
逻辑漏洞看似复杂,乱花渐欲迷人眼。然而其实思路非常单一:先前端后后端顺序枚举各处漏洞点。其实考察的是你的耐心,细心,专心。