yapi分析

admin 2022年11月29日01:58:17评论90 views字数 1542阅读5分8秒阅读模式

今天看到有公众号发了yapi的利用了,团队师傅之前已经分析好了,某些未知因素,就扔在星球了也没有发出来。不过目前已经出来详情了都出来了,现在发问题应该也不大,索性就发出来了。

利用文章 ,可以参考https://mp.weixin.qq.com/s/UTMly3wLfK0SQHOj5CcN8w

yapi分析

Yapi前台注⼊到RCE分析

获取token

直接来看看1.11.0版本修改了什么:

yapi分析

可以看到在base.js⾥添加了token类型判断,因此直接看看if⾥到底做了什么:可以看到如果pathoepnApiRouter⾥的任意⼀个或者以/api/open/开头就进⼊if,然后解析token


yapi分析

yapi分析

yapi分析

出错后进⼊getProjectIdByToken,继续跟⼊:此处可以看到直接将token放⼊进⾏查询,由于yapi⽤的mongodb,因此可以⽤json格式结合正则来跑出token,这⾥注⼊还是很简单也容易看到的,此漏洞主要在于拿到这个token后如何造成代码执⾏,接着往下看。

构造admin token

server/controllers/base.js,如果使⽤checkId的⽅式Uid就为固定的99999,但是要想构造uid,就需要进⼊else部分,也就是要通过parseToken

yapi分析

先看parseToken,从参数中传⼊的token是要进⾏aes解密,然后通过'|'分割来获取uidprojectToken的,projectToken也就是我们上⼀步中获取的token

yapi分析

passsalt默认是没有设置的,所以aespasssalt固定为'abcde',所以可以构造⼀个uidprojectToken然后加密就可以构造⼀个有效的token


yapi分析


通过构造这个token,经过parseToken后就可以解析到uidprojectToken,此处projectToken只要是任意⼀个存在到即可,关键在于这个uid,在后续漏洞利⽤很重要。

调⽤Pre-request ScriptPre-response Script

代码执⾏的关键就在于存在接⼝可以使⽤上⼀步构造的token上传Pre-request ScriptPreresponse Script;这两个script同样可以执⾏脚本,和mock类似,但是这种⽅式可以通过token的⽅式绕过鉴权;另外,mock在新版中已不再使⽤vm沙箱,换为了更为安全的safeify沙箱,因此mock从各种⻆度来看都不能作为RCE的点,⽽这两个script⽤的正好是可以逃逸的vm沙箱:

yapi分析


但是此接⼝在这个位置校验了权限,所以⾸先要通过这个鉴权:

yapi分析

跟进去发现必须为admin或者owner

yapi分析


接着看怎么获取role

yapi分析

发现输⼊的id必须和构造的token解密后的uid⼀致才可以,但是uid可以通过上⼀步设置,id此处也可控,就可以绕过权限校验了。

然后找到同样是可以⽤token鉴权的runautotest接⼝执⾏测试⽤例触发pre_script,下⾯看runautotest接⼝的逻辑:

yapi分析

yapi分析

yapi分析

⼀路⾛下来最终在此处⽤sandbox执⾏我们上传的Script

接着看sandbox是如何⽣成的:

yapi分析

yapi分析

发现⽤的是vm沙箱,vm沙箱可以逃逸,直接命令执⾏。另外,命令执⾏的回显结果可以放在requestBody参数中,即可在测试⽤例报告中看到命令执⾏结果;当然换其他参数也可以,还有其他⼏个,requestBody只是其中⼀个。

这里执行了一个回显的payload,大概如下

yapi分析

可以写一个payload进行回显集成,大概是这样子的效果,这里爆破了一下prokectid和colid因为我本地复现的时候发现不一样,索性就直接遍历跑了一下,看哪一个执行成功了。

yapi分析




原文始发于微信公众号(e0m安全屋):yapi分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年11月29日01:58:17
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   yapi分析http://cn-sec.com/archives/1431732.html

发表评论

匿名网友 填写信息