由于程序逻辑不严谨或逻辑太过复杂,导致一些逻辑分支不能正常处理或处理错误,统称为业务逻辑漏洞。常见的逻辑漏洞有交易支付、密码修改、密码找回、越权修改、越权查询、突破限制等,下图是简单的逻辑漏洞总结,在挖掘的过程中更多的时候需要脑洞大开:
挖掘逻辑漏洞的过程中,需要一些技巧和非常规思路,有点像边缘测试的思想。一般的思路是:
确定业务流程--->寻找流程中可以被操控的环节--->分析可被操控环节中可能产生的逻辑问题--->尝试修改参数触发逻辑问题0X01逻辑漏洞分类
同样是注册功能,在输入用户名时,发现会提示用户名是否存在,猜测该位置可以猜测哪些用户注册过该网站。
抓取该位置数据包发现,会对用户名id进行判断,是否存在,是否符合规则,由此我们可以批量探测用户,发现可以批量探测已注册过的用户:
在验证码功能中输入验证码进行验证,发现其中有一段JavaScript代码document.userreg.yzm_mobile2.value=='no'是用来验证验证码是否正确,那么就可以直接在控制台直接改变这个值就可以绕过验证码:
发送到repteater数据包中,看到cookie中存在username参数,修改为已存在的用户名,发现返回包中可查看其他用户敏感信息。
首先对实验环境做一个简单说明:
1.过程1代表攻击者safedog通过邮件等方式发送恶意链接(嵌有可盗取并发送Cookie的JS脚本)给受害者victim;
2.过程2代表在受害者victim受诱导点击恶意链接后,会经由浏览器将攻击者safedog嵌入的JS脚本当做数据发送给服务器上的PHPMyWind网站的反射型XSS漏洞点;
3.过程3与过程4代表PHPMyWind网站在受到反射型XSS攻击后,会执行JS脚本,将受害者victim的Cookie返回给受害者victim,并发送给攻击者safedog。
4.过程5代表攻击者safedog在获得受害者victim的Cookie后,利用受害者victim的Cookie与PHPMyWind网站的逻辑漏洞点进行密码重置攻击。
攻击者搭建可接收受害者Cookie的PHP网站;
该PHP网站由“ReflectiveXSS.js”“ReflectiveXSS.php”和“cookie.txt”这3个文件构成。
其中“ReflectiveXSS.js”用于针对服务器端PHPMyWind网站的反射型XSS漏洞窃取受害者victim的Cookie,并将该Cookie值传输给ReflectiveXSS.php;“ReflectiveXSS.php”用于接收名为“victimcookie”的GET请求,并将“victimcookie”的参数值保存到“cookie.txt”。
ReflectiveXSS.js的代码如下:
12345678910111213
该漏洞出现的文件路径为:/data/api/oauth/connect.php,其中的代码段:
1234if(method_exists($connect,$method))$connect->method();elseecho"请求的方法[".$method."不存在";if判断的作用是“判断函数名是否存在”,代码的逻辑是“如果函数名不存在,则在PHP页面输出函数名”,这一做法会造成反射型XSS漏洞。
该漏洞出现的文件路径为:/member.php
1.修改金额;
2.修改商品数量;
3.修改优惠金额;
4.修改数量、单价,优惠价格参数为负数、小数,无限大;
5.商品价格更改;
6.支付key泄露等。
实际安全中会有一些比较特别的,反正各种能改的参数都去尝试。个数单价-优惠券个数单价=总额,每个值都可能存在问题,就看服务自身处理是否有问题了。
顺丰宝业务逻辑漏洞:数量和金额没有做签名
移动手机支付业务逻辑漏洞:爆破四位验证码
新东方逻辑支付漏洞:修改运费金额为负数,使得课程金额+运费大于0即可
中国零食网支付逻辑漏洞:同上
阿里云计算按量付费逻辑漏洞一枚(低价享受超级主机):经过base64编码的数据可以被篡改,并且后端会接受篡改的数据
乐视商城支付逻辑漏洞(价格可更改):价格参数明文显示在url,可以直接更改
再次挖掘乐视商城支付逻辑漏洞:同上
读览天下支付逻辑漏洞可刷充值金额:替换支付订单号
益盟爱炒股商城支付逻辑漏洞:修改Cookie中的参数值
饿了么逻辑漏洞之免费吃喝不是梦:手机号+;+手机号绕过服务器对手机号码的次数限制
七夕单身专场之性多多免费刷成人用品(支付逻辑漏洞):改负数刷代币
1.找回密码的验证码为四位数字可爆破真实验证码;
2.采用本地验证,可以先尝试修改自己的帐号密码,保存正确的返回包,然后修改他人密码的时候替换返回包;
3.最终修改密码的数据包,以另外的ID作为身份判断(例如userid),而该ID在别处可以获取到;
4.接受验证码的手机号修改为自己的号码,然后输入自己的号码接收到的验证码去进行密码重置;
5.获取验证码的时候,会生成一个身份标识(例如cookie值),那么我们就替换他人账号的身份证重置他人的密码;
具体可以去i春秋看carry_your发过的一篇专门针对
用户凭证暴力破解
四位或者六位的纯数字
WooYun:当当网任意用户密码修改漏洞
返回凭证
url返回验证码及token
WooYun:走秀网秀团任意密码修改缺陷
WooYun:天天网任意账户密码重置(二)
密码找回凭证在页面中
通过密保问题找回密码
返回短信验证码
WooYun:新浪某站任意用户密码修改(验证码与取回逻辑设计不当)
WooYun:奇虎360任意用户密码修改漏洞
WooYun:中兴某网站任意用户密码重置漏洞(经典设计缺陷案例)
用户凭证有效性
短信验证码
WooYun:OPPO手机重置任意账户密码(3)
WooYun:第二次重置OPPO手机官网任意账户密码(秒改)
WooYun:OPPO修改任意帐号密码
WooYun:身份通任意密码修改-泄漏大量公民信息
重置密码token
WooYun:魅族的账号系统内存在漏洞可导致任意账户的密码重置
重新绑定
WooYun:如家酒店某严重逻辑漏洞可登陆任意账号可导致几千万敏感信息泄露(涉及任意用户账号个人基本信息、入住记录等)
Wooyun:华住酒店官网某严重逻辑漏洞可登陆任意账号(涉及任意用户账号个人基本信息、入住记录等)
WooYun:12308可修改任意用户密码
WooYun:某彩票设计缺陷可修改任意用户密码
WooYun:中国工控网任意用户密码重置漏洞
服务器验证
WooYun:携程旅行网任意老板密码修改(庆在wooyun第100洞)
服务器验证可控内容
WooYun:AA拼车网之任意密码找回2
WooYun:四川我要去哪517旅行网重置任意账号密码漏洞
服务器验证验证逻辑为空
WooYun:某政企使用邮件系统疑似存在通用设计问题
用户身份验证
账号与手机号码的绑定
WooYun:上海电信通行证任意密码重置
WooYun:和讯网修改任意用户密码漏洞
找回步骤
跳过验证步骤、找回方式,直接到设置新密码页面
WooYun:OPPO手机同步密码随意修改,短信通讯录随意查看
WooYun:中国电信某IDC机房信息安全管理系统设计缺陷致使系统沦陷
本地验证
在本地验证服务器的返回信息,确定是否执行重置密码,但是其返回信息是可控的内容,或者可以得到的内容
WooYun:看我如何重置乐峰网供应商管理系统任意用户密码(管理员已被重置)
WooYun:oppo重置任意用户密码漏洞(4)
发送短信等验证信息的动作在本地进行,可以通过修改返回包进行控制
WooYun:OPPO修改任意帐号密码-3
WooYun:OPPO修改任意帐号密码-2
注入
在找回密码处存在注入漏洞
WooYun:用友人力资源管理软件(e-HR)另一处SQL注入漏洞(通杀所有版本)
Token生成
token生成可控
WooYun:天天网任意账号密码重置(非暴力温柔修改)
WooYun:天天网再一次重置任意账号密码(依旧非暴力)
注册覆盖
注册重复的用户名
WooYun:中铁快运奇葩方式重置任意用户密码(admin用户演示)
session覆盖
WooYun:聚美优品任意修改用户密码(非爆破)
越权漏洞是Web应用程序中一种常见的安全漏洞。它的威胁在于一个账户即可控制全站用户数据。当然这些数据仅限于存在漏洞功能对应的数据。越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定。所以测试越权就是和开发人员拼细心的过程。
1.操作时分析请求中的数据包,看看每个参数的作用,修改参数查看变化。
2.拥有更多权限的账号,把能访问的URL都提取出来,给低权限用户访问或者直接访问,查看能否访问。
3.猜测隐藏的API,如:guest/getorder,修改成admin/getorder。
4.通过搜索引擎,或者提取JS中的URL,查找隐藏功能。如burpsuite中有一个BHPJSscraper的插件。
5.猜测隐藏的参数,添加进去查看变化,如修改信息的时候加个ID。
6.抓取所有的数据包,搜索用户名等关键词,比如我的用户名是test,在burpsuite中的HTTPhistory搜索test,看看有没有哪个数据包包含这个参数,将其修改为其他的用户名,查看变化。
我的越权之道
垂直越权的手法:
1.编辑个人信息的时候,修改权限组的id,一般管理员的值为0或者1;
2.后台修改密码的地方,如果是根据userid来修改密码的,可以修改id的值来修改管理员的密码;
3.在个人资料处插入XSS脚本,一般能打到管理员cookie的概率很大;
4.查看个人资料的时候,如果是根据id来显示,一般都有越权,可以遍历id获取管理员信息;
5.测试后台功能,找一下注入、上传、命令执行等漏洞,直接拿下数据库权限或者shell,再找管理员权限就轻而易举了。