生命在于学习——业务逻辑漏洞

声明:只是用于学习交流,笔记记录,不可用作违规用途。

一、业务逻辑漏洞简介

简单理解:就是编程人员的思维逻辑不够严谨导致攻击者有机可乘的漏洞。
逻辑漏洞还是一种虽然没有在owasp top10中提及到,但是往往会存在的漏洞,并且在hvv,渗透测试中广泛存在,造成的破坏可能一点不比sql注入,xss等漏洞小,如下是逻辑漏洞的top10挖掘方向。

二、常见的逻辑漏洞

交易支付、密码修改、密码找回、越权修改、越权查询、突破限制等各类逻辑漏洞,逻辑漏洞很多时候都需要脑洞大开。
生命在于学习——业务逻辑漏洞_第1张图片

三、场景

1、饮料贩卖机

  1. 替换订单ID,创建订单时在支付界面,在此创建订单替换订单ID(高价替换低价)
  2. 无限新用户优惠订单,重复创建优惠订单
  3. 替换优惠券ID(未达到条件使用)
  4. 个别情况订单数量为1.99时,客户端只支付1元,实际上服务器认为支付了2元。
  5. 取货时并发

2、直播

  1. 快速进出房间炸房
  2. 无限发送点赞协议
  3. 修改礼物数量,0,小数,负数,特定值(一般情况下为1073741824)
  4. 修改礼物ID,遍历尝试是否有隐藏ID。
  5. 并发送礼物,抽奖
  6. 无限创建首次优惠订单,有些首次优惠订单是一个特殊的pid,这种直接替换pid进行支付,有些是相同的ID,这种的提前创建订单,记录多个订单号在依次修改订单支付。
  7. 刷屏:发言刷屏,分享,点赞等有提示的地方刷屏。
  8. 房间内可以申请的地方进行申请取消操作,看看是否能炸房。
  9. 越权踢人,增加管理员,关闭房间等操作。
  10. 发送的表情是否可以修改长宽

3、购物APP

  1. 购买数量:为0,小数,负数,正负值
  2. 代金券:并发领取,遍历领取,同一个代金券重复使用,未满足条件使用代金券
  3. 越权:登录,操作别人订单,修改资料

4、外卖

  1. 商品数量,0,负数,小数,特定值,正负数
  2. 送餐员评价修改,星级,打赏金额
  3. 订单超出送餐地址
  4. 强行货到付款,取消订单,退款
  5. 越权操作别人订单,登录
  6. 优惠购买会员(重复使用优惠购买)

5、交易平台

  1. 钱包并发提现,负数提现
  2. 使用钱包支付时多个订单并发支付(是否支付金额能大于余额)
  3. 转账负数,并发转账
  4. 上架商品突破限制,例如数量,字数
  5. 替换订单,创建订单号如果订单状态可修改,先进到支付界面,然后将订单修改成更大的金额,然后支付提前进入的支付界面。
  6. 数量修改

6、社交

  1. 强行举报(读取本地消息上传那种)
  2. 强行加好友(一般尝试重发通过好友这条协议)
  3. 自由修改号码(靓号类)
  4. 群管理无限禁言
  5. 越权禁言,踢人,拉黑
  6. 会员修改金额,数量。无限优惠购买。
  7. 非会员使用会员功能。

7、漫画

  1. 打赏金额为负数,小数,特定值(溢出)
  2. 越权删除评论,登陆
  3. 修改充值金额
  4. 付费漫画免费看
  5. 评论图片数量过多会导致客户端加载卡死

8、音乐

  1. 唱歌类软件修改上传分数等参数
  2. 付费下载尝试替换下载ID
  3. 修改付费下载金额
  4. F12查看下是否有歌曲地址

9、网约车

  1. 无限叫车,重复发送协议造成市场混乱
  2. 修改评价分数
  3. 修改现实优惠叫车关键参数
  4. 替换优惠券
  5. 越权操作其他订单

四、根据漏洞出现位置来总结

生命在于学习——业务逻辑漏洞_第2张图片

五、如何挖掘

  1. 确定业务流程
  2. 寻找流程中可以被操控的环节
  3. 分析可被操控环节中可能产生的逻辑问题
  4. 尝试修改参数触发逻辑问题

六、注册处存在的逻辑漏洞

1、ZZCMS8.1批量注册

在这里使用phpstudy搭建好了zzcms,注册填写相关信息,然后抓包。
生命在于学习——业务逻辑漏洞_第3张图片
将数据包发送到repeater,每次修改username值,发现,只需要修改username值就可以注册
成功⽤户,图形验证码⽆效,并且未对电话,邮箱等信息校验,可批量注册
生命在于学习——业务逻辑漏洞_第4张图片

生命在于学习——业务逻辑漏洞_第5张图片

2、ZZCMS8.1批量猜解用户

同样是注册功能,在输⼊⽤户名时,发现会提示⽤户名是否存在,猜测该位置可以猜测哪些⽤户注册过该⽹站

生命在于学习——业务逻辑漏洞_第6张图片
在这里可以抓包,会发现对用户名id进行判断,发送到监测器,可以批量探测已经注册过的用户。

七、登录部分存在的逻辑漏洞

1、暴力破解用户名或密码

暴力破解用户名密码的情况,一般出现在登录部分没有验证码机制,没有根据用户名限制失败次数,没有根据IP限制失败次数等情况下。
一般来说:

  1. 直接拿密码字典爆破某一个用户名
  2. 拿固定的弱口令密码,去跑用户名
  3. 如果只是用户名限制失败次数,可以使用思路2的方法
  4. 在存在返回提示用户名错误或者密码错误的情况下,可以分别爆用户名和密码
    常见限制:有时候会发现用户名或者密码是密文加密,这是可能通过前端或者其他方式加密,对于简单的来说base64编码和md5签名是很好识破的,在爆破的时候可以选择encode和hash。

2、利用cookie&session

(1)cookie的作用和介绍

1、可以在客户端上保存用户数据,起到简单的缓存和用户身份识别等作用
2、保存用户的登录状态,用户进行登录,成功登录后,服务器生成特定的cookie返回给客户端,客户端下次访问该域名下的任何页面,将该cookie的信息发送给服务器,服务器经过检验,来判断用户是否登录。
3、记录用户的行为

(2)cookie分类

cookie分为会话cookie和持久cookie。
会话cookie是指在不设定它的生命周期,浏览器的开启到关闭就是一次会话,当关闭浏览器时,会话cookie就会跟随浏览器而销毁。
持久cookie则是设定了它的生命周期,此时,cookie像商品一样,有个保质期,关闭浏览器后,它不会销毁,知到设定的过期时间。

(3)cookie伪造

cookie伪造:通过修改cookie中的某个参数来实现登录其他用户。
测试方法:

  1. 使用一个账号登录,找一个可以证明身份的页面,例如首页的欢迎XX或者是个人中心显示昵称的地方。
  2. 刷新该页面拦截请求,观察cookie中的字段和值,例如 userid=xxx,修改cookie中的值,把xxx改成admin。
  3. forword放行,页面显示admin信息,则存在此问题。
    修复方法:对于客户端标识的用户信息,使用session会话认证方式,避免通过cookie去仿冒其他人的身份。

(4)cookie登录绕过漏洞

如果用户登录验证使用cookie身份验证会存在安全隐患,cookie信息是外部控制的,如果验证不严很容易被绕过。
模拟环境:cookie身份绕过。
cookie可以在浏览器提交的数据进行修改的。
绕过方法:用buspteuie修改username不等于空即可绕过。
生命在于学习——业务逻辑漏洞_第7张图片

生命在于学习——业务逻辑漏洞_第8张图片
修复方式:
1、使用cookie身份验证时,不要使用简单的验证,对外部输入的参数进行过滤。
2、尽量使用session安全认证,session是外部不可控的。

(5)cookie和session的区别

cookie实际上是一小段文本信息,客户端请求服务器,绕过服务器需要记录该用户的状态,就使用response向客户端浏览器颁发一个cookie,客户端浏览器会把cookie保存起来,当浏览器再次请求该网站时,浏览器就会把请求地址和cookie一同给服务器,服务器检查该cookie,从而判断用户的状态,服务器还可以根据需要修改cookie的内容。
session是另一种记录客户状态的机制,不同的是cookie保存在客户端浏览器中,而session保存在服务器上,客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是session,客户端浏览器再次访问时只需要从该session中查找该客户的状态就可以了。

(6)session会话固定攻击

Session会话固定攻击:一种诱骗受害者使用攻击者指定的会话表示的攻击手段,利用了服务器的session不变的机制。
生命在于学习——业务逻辑漏洞_第9张图片
测试方法:

  • Session会话注销测试
    用户注销或者退出应用时,利用登录时的Session是否能再次利用登录。
  • Session会话超时时间测试
    用户登录系统后,在固定时间没有与服务器任何交互操作,刷新页面,看是否需要重新登录账户。
    攻击者重置Session id的方法:通过xss,嗅探等方法取得用户的session,修改数据包。
    修复方法:
    每次登录成功之后重新生成session,session id闲置过久时,进行重置session id。

(7)Session身份绕过漏洞

使用已经登录用户的session,修改用户名为任意用户,同样可以成功登录。
生命在于学习——业务逻辑漏洞_第10张图片

修复方法:不要把session放置网站目录,绕过需要就设置权限访问,除了本地其他用户禁止访问。

八、支付时存在的逻辑漏洞

大米CMS支付逻辑漏洞复现

在产品展示中,商品大米测试产品价格6000元,网站存在支付逻辑漏洞,可以使用1毛钱购买6000元的大米测试产品。
开启抓包,点击加入购物车。
生命在于学习——业务逻辑漏洞_第11张图片
将price改为1,qty改为10,发送。(数量为10,价格为1)
生命在于学习——业务逻辑漏洞_第12张图片
在购物车即可看到已经被修改。
生命在于学习——业务逻辑漏洞_第13张图片
除了上述修改商品数量的方法,支付时的逻辑漏洞还包含以下几种思路:
修改商品编号,条件竞争,金额修改,充值中放弃订单未生效。

九、业务处理-越权漏洞

1、越权访问漏洞概念简析

(1)授权与验证

了解越权访问的概念,首先要了解授权和验证的概念,授权是指网站赋予特定人对网站特定资源的读写权限,而验证是网站用于检查操作者是否真的可以对特定资源进行读写。

(2)未授权访问

未授权访问是指用户在梦游通过认证授权的情况下,能够直接访问需要通过认证才能访问到的页面或文本信息。

2、什么是越权漏洞

由于梦游对用户权限进行严格的判断,导致低权限的账号(比如普通用户)可以去完成高权限账号(比如超管)范围内的操作,如果能够成功操作,则称之为越权操作,越权漏洞形成的原因是后台使用了不合理的泉休闲校验规则导致的。

3、越权漏洞的产生原因

开发人员在对数据进行操作时对客户端请求的数据过分相信,遗漏了对于客户端权限的仔细判定。

4、越权漏洞常见位置

1、修改、重置、找回其他账户密码
2、查看、修改其他账户未公开的信息,例如个人资料、文件、数据、程序等
3、与账户关联的权限操作

5、越权访问漏洞的分类

越权漏洞主要分为水平越权和垂直越权两大类。

(1)水平越权

同级别(权限)的用户或者同一个角色的不同用户之间,可以越权访问,修改或者删除的非法操作,如果出现此漏洞,你们将可能会造成大批量数据泄露,严重的甚至会造成用户信息被恶意篡改。

(2)垂直越权

指使用权限低的用户可以访问权限较高的用户。
危害:
向上越权:普通用户可以执行管理员权限, 比如发布文章,删除文章等。
向下越权:一个高级用户可以访问低级用户信息(暴露用户隐私)。

6、水平越权:metinfoV40越权漏洞

在会员中心注册登录,登录后进入修改基本信息的页面,随便修改一个密码,点击提交信息的同时抓包。
生命在于学习——业务逻辑漏洞_第14张图片

抓包修改useid为管理员id。
生命在于学习——业务逻辑漏洞_第15张图片

成功修改管理员账号密码为123456,尝试后台登录。
生命在于学习——业务逻辑漏洞_第16张图片
生命在于学习——业务逻辑漏洞_第17张图片

7、垂直越权:CouchDB垂直权限绕过漏洞(CVE-2017-12635)

(1)漏洞描述

Apache CouchDB是⼀个开源数据库,专注于易⽤性和成为”完全拥抱web的数据库”。它是⼀个使⽤JSON作为存储格式,JavaScript作为查询语⾔,MapReduce和HTTP作为API的NoSQL数据库。应⽤⼴泛,如BBC⽤在其动态内容展示平台,Credit Suisse⽤在其内部的商品部⻔的市场框架,Meebo,⽤在其社交平台(web和应⽤程序)。
在2017年11⽉15⽇,CVE-2017-12635和CVE-2017-12636披露,CVE-2017-12636是⼀个任意命令执⾏漏洞,我们可以通过config api修改couchdb的配置query_server,这个配置项在设计、执⾏view的时候将被运⾏。
影响版本: 小于1.7.0 以及 小于 2.1.1。
安装好环境。
生命在于学习——业务逻辑漏洞_第18张图片
生命在于学习——业务逻辑漏洞_第19张图片生命在于学习——业务逻辑漏洞_第20张图片
刷新抓包,将包覆盖,发送,即可使用test 123456登录成功。

生命在于学习——业务逻辑漏洞_第21张图片
生命在于学习——业务逻辑漏洞_第22张图片

(2)后记

越权漏洞的产生归根究底,还是由于网站开发者和管理者授权意识的淡薄,授权的滥用,因此,授权应当遵守如下几条原则:

  1. 使用最小权限原则对用户进行赋权,对待权限做一只铁公鸡。
  2. 使用合理(严格)的权限校验规则。
  3. 使用后台登录状态作为条件进行权限判断。

十、密码找回时存在的逻辑漏洞

生命在于学习——业务逻辑漏洞_第23张图片

1、邮箱弱token

(1)Unix时间戳+md5

通过邮箱找回密码,正常流程去邮箱查看重置密码链接,发现链接处有一串md5加密字符串。
重置他人密码只需力量用他人邮箱发送重置密码右键,在短时间内对Unix时间戳进行暴力破解,即可获得重置密码的链接。

(2)用户名

重置密码链接直接使用用户名进行区别,改变用户名即可更改他人密码。

(3)服务器时间

利用两个账号同时点击找回密码,去邮箱查看找回密码的链接,发现两者随机token只差1-2,而且可以猜测出为服务器时间,所以可以用一个未知账号和一个已知账号同时点击找回密码,稍微遍历随机token,就可以构造出未知账号的没密码找回链接。

2、生成可控token

例如当我们通过邮箱找回密码,正常流程下抓包查看提交验证码后返回的数据,有加密字符串,这个加密字符串和后面重新设置新密码URL链接中的加密字符串一样。
所以可以利用这个加密字符串实现新密码rul中的加密字符串可控。
根据上面提交验证码的抓包,修改user为其他用户,发送就可以返回其他用户的加密字符串。
接着重新返回到找回密码首页,利用其他用户找回,点下一步,到输入验证码处,直接修改URL链接,加入加密字符串,可以直接绕过验证码,重置密码。

3、短信验证码找回密码

1、进入某网站,找到找回密码或密码重置的功能点,首先填写自己的手机号码进行密码找回。
2、收到验证码后填入验证码和新密码提交,这时候使用数据抓包工具进行抓包,将数据包中的账户属性修改为其他账号,然后就可以使用自己设置的密码登录其他账户。

4、重新绑定用户手机

  1. 首先注册一个某邮箱的测试账号,然后会跳转到一个手机绑定页面上。
  2. 注意此链接中有个参数为UID,将UID修改为其他人的邮箱账号,填入一个可控的手机号码,获取验证码,确定后这个目标有限已经被越权绑定了密保手机。
  3. 走正常的密码取回流程,发现这个邮箱多了一个通过手机找回密码的方式,这个手机号就是刚绑定的手机号码。
  4. 获取验证码并填入新密码,最终重置目标账户的密码。

5、重新绑定用户邮箱

  1. 首先注册一个某网站的测试账号
  2. 连接尾部的一串数字时用户的ID,通过修改ID可以进入其他用户的页面,该页面提供了更改邮箱的功能,可以在此处将邮箱地址修改为自己测试的邮箱。
  3. 然后使用改邮箱进行密码找回。

6、密码找回漏洞

(1)模拟环境

生命在于学习——业务逻辑漏洞_第24张图片

(2)时间戳转换

生命在于学习——业务逻辑漏洞_第25张图片

(3)md5(当前时间戳+用户名)生成token原理

当前面条件都通过后就可以生成token,我们可以在提交key之前生成一分钟或者一个小时内的token值,用脚本去访问每一个链接。

(4)使用代码生成一个小时的token


function create_pass($username,$email){
 $token=md5(time().$username.$email);
 return $token;
}
for($i=1;$i<=3600;$i++){
 $timex= create_pass('admin','[email protected]');
 write_file($timex."\n");
 echo $i."\r\n";
 sleep(1);
}
function write_file($c){
 fwrite(fopen("time.txt", "a+"),$c);
}
?>

(5)运行脚本,同时网页也提交我们的信息,让数据库更新token值

生命在于学习——业务逻辑漏洞_第26张图片
生命在于学习——业务逻辑漏洞_第27张图片

(6)token.php(上面代码)运行会在当前目录创建一个time.txt文件保存预测的token值

生命在于学习——业务逻辑漏洞_第28张图片

(7)此时我们可以根据预测的token值,在网页进行提交测试,如果token值多,可以使用burp枚举

在这里插入图片描述

(8)修改成功

链接上面是c=send&token=(获取到的)
生命在于学习——业务逻辑漏洞_第29张图片

(9)修复方法

  1. 修改加密算法和加密内容,一定要是强加密,也要做到增加猜解难度或密文不可猜解。
  2. 用户身份验证一定要在后端实现
  3. 在最后一步修改密码的动作时,一定要校验账号是否通过了验证、短信与手机号是否对应、发送短信与已校验账号不要使用同一个session名称。

十一、验证码存在的逻辑漏洞

生命在于学习——业务逻辑漏洞_第30张图片

1、暴力破解

要了解常见验证码机制:

  1. 有的验证码输入正确一次,在一定时间内不用再输入。
  2. 有的验证码输入正确一次,会在你session中设定一个值,告诉服务器你已经通过验证码验证了。
  3. 有的验证码因为逻辑问题只是一个摆设,正常的逻辑为先对比验证码是否正确,再检测账号密码是否有正确,反过来就成了摆设。

2、时间、次数突破

概念:重复提交携带验证码的数据包,查看返回包,判断次数。
测试方法:
填写正确登录信息和验证码→抓取提交数据包→重复提交该数据包→查看是否登录成功→登录成功则存在验证码重复使用问题。

3、回显测试

概念:验证码直接由客户端生成,在回显中显示,可以通过浏览器工具直接查看。
测试方法:
1、在源码中显示,源代码审计,搜索源码中有无验证码。
2、在cookie中显示,抓包时分析cookie中是否含有验证码。

4、绕过验证码

漏洞成因:
由于逻辑设计缺陷,可以绕过验证,比如直接删除cookie或验证码参数可绕过,当验证不通过清空session时,验证码参数值为空时绕过等。
测试方法:

  1. 输入正确账户信息和错误验证码,登录时抓包
  2. 删除cookie
  3. 客户端登录成功

5、篡改手机号

在需要手机号的短信验证处,抓包修改手机号,可能做到非本账号手机号获取能够编辑本账号的验证码。

zzcms8.1任意密码重置

忘记密码功能,我们输入用户名正确后会进行短信验证码,通过手机验证码或者游戏验证码。
生命在于学习——业务逻辑漏洞_第31张图片
生命在于学习——业务逻辑漏洞_第32张图片
要选择拦截此请求包的回应,可以抓到这个包。
生命在于学习——业务逻辑漏洞_第33张图片
将no改为yes发送。
生命在于学习——业务逻辑漏洞_第34张图片
会直接跳到更新密码。
生命在于学习——业务逻辑漏洞_第35张图片

十二、业务接口存在的逻辑漏洞

随着网络的不断发展,一些网站为了实现某些功能,需要去调用一些第三方接口,比如三大运营商的短信业务接口、支付宝、微信等第三方支付接口,那么在调用过程中,如果未能做一些安全处理,你们就会容易发生一些业务接口调用上的安全漏洞,常见的业务接口调用漏洞如下:

1、重放攻击

在短信、电话、邮件调用业务或生成业务数据环节中(短信验证码,电话验证码,邮件验证码,订单生成,评论提交等),对其业务环节进行调用(重放)测试,如果业务经过调用(重放)后被多次生成有效的业务或数据结果。
危害:

  • 短信轰炸
  • 电话轰炸
  • 邮箱轰炸
  • 恶意用户注册
  • 恶意上传
  • 恶意评论

2、接口未授权访问

测试方法:
只要是登录后才可以返回相关信息的接口,在未登录状态下也可以返回,就是未授权访问,在一般的网站测试中,可以http history中选择网站的根目录地址,然后右键spider from here进行爬取相关的url,然后在target栏下的site map中利用mime type进行筛选,主要关注一下json、script、xml等这些类型,然后把rul贴到浏览器中看是否能访问来验证。
修复方法:
利用token校验的方式,在url中添加一个token参数,只有token验证通过才返回接口数据且token使用一次后失效,在接口被调用时,后端对会话状态进行验证,如果已经登录,便返回接口数据,如果没有登录,则返回自定义的错误信息。

你可能感兴趣的:(#,漏洞学习笔记,学习,安全,网络)