加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.zhandada.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

yapisql注入到RCE

发布时间:2023-01-08 10:01:03 所属栏目:MsSql教程 来源:转载
导读: mongoose sql injection
注入看修复的commit就可以看出来在哪:

这里对token增加了限制很容易想到token为其它类型的的情况,比如json,再结合注入就基本确定是mongoose的sql注入了
接着看

mongoose sql injection

注入看修复的commit就可以看出来在哪:

image-20221119095825117

这里对token增加了限制很容易想到token为其它类型的的情况,比如json,再结合注入就基本确定是mongoose的sql注入了

接着看下面的逻辑,注意两点

image-20221119100150570

parseToken,看下代码的话会发现功能是解密token,获得原始的token,默认情况下salt是abcde和uid的拼接

image-20221119101039474

这段逻辑是没什么问题,但是在下面parseToken失败了之后mssql 注入,代码又尝试把这个token当作原始的token进行查询和校验,这里就有点奇怪了。

一直跟踪getProjectIdByToken到最终调用mongoose的api都没有对token做任何过滤,所以这里存在注入。

mongoose的注入可以参考,

最终的效果就是可以通过注入真实的token,然而这里token并不是用户登录的token等等,而是项目的token

所以还要看看什么接口可用,来获取加密后的token以及RCE

image-20221119101735816

可以通过 /api/open/plugin/export-full 这个接口uid然后推出加密后的token,然后就是分析怎么RCE了

mock sandbox

因为yapi之前有开放注册导致mock处可以RCE,所以我也先看了这个,相关接口是全部可以通过token访问的。不过因为之前的洞导致这里的沙箱增强了很多,所以之前的sandbox bypass也无法使用了

所以这里研究了下mock sandbox,发现之前的VM沙箱换成了safeify:

image-20221119102346514

可以参考 了解这个沙箱:

3

发现safeify直接调用了vm2 , 在安全上没有增加很多限制

那问题就是bypass vm2 了,vm2是一个相对安全的NodeJS沙箱,绕过这个难度就会大很多,只能寄希望于目标站点搭建时间比较早,用的vm2版本相对低一点,这样就可以用vm2的bypass方法来绕过

pre_script

image-20221119104022515

再去看了一下漏洞预警,发现这次似乎RCE的点是pre_script, 所以又看了一下pre_script是怎么处理的:

在runAutoTest pre_script被处理,runAutoTest 是 /api/open/run_auto_test的处理函数,也是可用token调用的

image-20221119103122058

然后是handleTest调用crossRequest,crossRequest通过sandbox运行preScript,

image-20221119103223991

然后就发现pre_script处的沙箱居然是vm.., 那就可以直接用vm沙箱bypass的方法来命令执行了,

image-20221119103433464

默认也是用sandboxByNode来执行script,不过还是可以看看else里面的sandboxByBrowser

image-20221119103624314

发现沙箱都省了。。不过不会走到这就是了。

总结这个漏洞产生的根本原因是在处理token的时候parse失败了都不返回,多此一举,既然会有直接校验原始token这一步那么花这么多功夫加密解密token干什么呢?

(编辑:站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!