前 言
实战有风险,测试需谨慎,本文涉及到相关漏洞已报送厂商并修复,文章内容仅限技术讨论和研究,严禁用于非法用途,否则产生后果自行承担。
Part.1
漏 洞 复 现
拿到目标信息后,发现其中一目标单位靶标系统是一个IoT物联网管理平台系统。该平台页面有一个登录框,且在账号密码输入框外并无验证码输入项。随后,便通过admin/admin试弱口令,在没有进展后尝试进行“爆破”。依然毫无所获,不仅没有弱口令,目录扫描也没发现啥可用信息,端口只开了80和443,难搞哇!
首先我们需要先找一个存在弱口令的系统登录进去,查看一下这个系统的身份验证机制,以及各个模块的参数,访问目标网站使用弱口令进行登录,如下:
登录后如下:
拦截一个数据包看看身份认证机制,通过以下数据包我们可以看到,这个系统的身份认证机制是通过账号+密码登录获取用户的user-key,后续的操作全部使用user-key进行校验。
登录数据包如下:
后续认证机制如下:
利用登录成功的返回包,换一个同类型系统登录替换返回包发现不行,还是会跳转到登录界面。
返回刚刚存在弱口令的系统继续测试,我们点进用户列表,然后在burp中查看返回包,可以看到用户列表的返回包中把所有的用户的信息以及账号密码和user-key都返回来了。
具体如下:
接下来,我们删除一下这个user-key试试看还能不能查询到用户信息,操作后可以看到删除这个user-key的值之后,是无法查询到用户信息的。
但是我们在登录超级管理员账号的情况下,是可以获取到所有用户的账号密码和user-key信息,那我们先登录一下普通用户看看权限,操作后可以看到登录普通用户之后是没有用户列表这个模块的。
具体如下:
此路不通走彼路,现在我们换个思路。在上面的过程中,分析后确定登录之后的所有认证都是通过user-key进行的,那我们把用户列表模块查询数据包中的user-key替换成普通用户,看看能不能查询成功,结果显示是可以查询的,到这里基本已经可以证明这个系统是存在越权漏洞的。具体如下:
现在问题来了,以目前来看这个漏洞的利用条件至少是需要一个普通用户的user-key才行,如果连普通用户都没有那不就无法利用了?别慌,继续往下看。
这时想起在登录界面有个用户注册的接口,我们去看看能否利用。
点击“立即注册”进入注册页面
这里我用的是邮箱注册,先输入任意邮箱+密码试试,发现注册邮箱验证激活,登录直接提示未激活,莫慌继续试!
没办法用自己小号注册一个账号来测试,结果还是不行,收不到验证邮件,换了几个邮箱都不行,推测可能是后台没用配置邮件服务,所以发送不了邮件。
现在返回burp查看一下历史数据包。哦豁,有东西!此时,发现注册的数据包居然直接把刚注册用户的user-key带到返回包里了。如下:
这回有了前提条件user-key,我们试试看能否用这个未激活的用户user-key越权查询“用户列表”信息。现在,我们把查询用户列表数据包中的user-key值替换掉,发包结果显示是可以查询到用户的身份信息,但是只查到了管理员用户,普通未激活用户和超级管理员用户的信息则是没有查到。
既然查不到,那我们看看能不能用刚刚注册的账号user-key直接创建一个管理员账号呢?这就需要先使用弱口令通过超级管理员账号登录系统,并创建一个超级管理员账号。此时,在burp中可以查看到创建用户的数据包,具体如下:
拿到数据包之后,把user-key替换成之前注册的普通未激活用户user-key,然后发包试试看能否创建成功。
替换user-key发送数据包,查看返回包,并不能确定是否成功,直接拿刚刚注册的超管账号test111登录试试。
成功登录系统且权限为超级管理员
既然可以注册,那我们换个同类型网站注册一个普通账号,利用注册包里返回的user-key来越权注册一个超级管理员账号试试。
返回包显示注册成功
此时,我们登录一下test222账号试试,成功登录且权限为超级管理员。
到这里我们再次转换思路,既然上面的用户列表能查询到用户信息,那编辑用户的时候是不是也能查询到用户的信息呢?动手试试!选择用户列表模块,点击编辑,并在burp中查看到以下数据包,如图:
通过以下数据包,我们可以看到id=1代表默认超级管理员admin,其他值则代表其他用户。
这时,我们尝试把数据包中的user-key替换成普通未激活用户的user-key,结果显示依旧可以越权查询到超级管理员账户的信息。
经过一顿操作,此时我们捋一下思路。利用这个漏洞获取该系统的超级管理员信息,首先需要一个任意权限用户user-key,其次这个user-key可以通过前台注册普通未激活用户获取。那么现在新的问题来了,如果出现以下情况,没有用户注册的入口我们该怎么办?
这里猜测可能是开发人员将注册入口隐藏了,其实我们直接使用之前的注册数据包进行注册,修改数据包中的host然后发包,结果显示是可以注册的,并返回了用户的user-key。
经过测试发现,这是个通用漏洞,只要是同类型网站全部通杀,最后成功拿下靶标系统,还顺便拿了个0Day分。
Part.2
产 品 解 决 方 案
本次的分享的漏洞均属于业务逻辑漏洞,一旦被攻击者利用,攻击者将可能直接拿下目标系统的权限,并可对应用系统后台所有数据进行增、删、改、查,严重影响客户业务的正常运行,造成不可估量的损失。
关于业务逻辑漏洞,可以简单理解成由于编程人员的思维逻辑不够严谨,导致攻击者有机可乘的漏洞。至于如何应对业务逻辑漏洞,云科安信「睚眦」申请出战!
睚 眦
云科安信致力于以实战攻防视角打造全域数字风险解决方案,将攻防实战能力、经验与成果转化为可落地的产品,为客户提供更贴合业务场景的安全解决方案。
面对业务逻辑漏洞带来的安全风险,云科安信睚眦数字风险全栈防御系统特有的逻辑攻击动态防护功能模块,直接通过“URL动态令牌”技术,对每个数据包进行签名,可有效阻断利用参数枚举发起的越权、经营干扰等多种类型的业务逻辑攻击,提升应用系统的业务安全性。
作 者
SERAPH 安全实验室
圥丶忈
攻其不备,守其不失
云科安信
北京云科安信科技有限公司(简称:云科安信)创立于2018年,是一家基于攻击者视角、风险叠加理论和信息图鉴技术,为政企客户提供高效、轻量安全解决方案的数字世界风险管理领导厂商。
云科安信依托自身持续积累的攻防实战经验,在“风险度量、防御前移”的新风险管理理念下, 致力于通过「信息图鉴」产品矩阵,利用“感知、度量、处置”等手段,重塑客户的数字风险管理能力。
原文始发于微信公众号(云科安信Antira):实战攻防|某物联网系统通用漏洞实战案例分享