Skip to content

Latest commit

 

History

History
85 lines (34 loc) · 3.41 KB

CVE-2021-45456ApacheKylin命令注入分析补充.md

File metadata and controls

85 lines (34 loc) · 3.41 KB

CVE-2021-45456 Apache Kylin 命令注入

看着y4er师傅写的分析,第一次看有点懵逼,所以简单的补充一下。

补充分析

首先漏洞点在该路由的 dumpProjectDiagnosisInfo方法中project可控。

image-20220114222208845

跟着进去,可以看到runDiagnosisCLI方法之后正常执行命令并且project一直可控。所以非常有机会RCE了!

image-20220114222316611

唯一绕过就是不让 projectInstance为null,不然就throw抛异常。所以我们看看projectInstance得到如何获得。

首先通过 convertStringToBeAlphanumericUnderscore方法进行替换,输入 touch 123则替换之后就为 touch123

image-20220114222541519

之后通过 getProject方法去找有没有 touch123这个项目。看下面是通过**projectMap.get(projectName);**去获得如果有就不会抛异常就成功命令执行。

image-20220114222809923

所以我们在看看得到才什么类中获取,也就是去看 projectMap是指的那个类。

image-20220114222920990

然后跟上ProjectInstance,则到了如下代码,可以看到setname进去,所以我们最开始需要setname进去和 touch123相同就可以了

image-20220114223024834

向上跟踪

image-20220114223153636

然后去跟踪 createProject方法,之后到了 saveProject方法

image-20220114223350119

可以看到传递的是json格式然后去获得name,并且通过isAlphanumericUnderscore判断了,但是如果执行命令肯定set进去的name是 tuoch123,巧的是 tuoch123刚刚好去绕过。

image-20220114223924151

image-20220114223911294

从而成功执行命令。

演示

y4er师傅的图

先创建项目名

image-20220114224040087

执行命令

image-20220114224119476

修复

image-20220114224356250

传入cmd的参数改为projectName而非http传入的project,projectName经过convertStringToBeAlphanumericUnderscore() 处理,所以无法输入非字母数字下划线的字符来触发命令执行。

(除非单个命令可以创成严重危害。。。。。