某系统代码审计RCE
bcloud 发表于 四川 技术文章 674浏览 · 2024-11-25 13:02

代码分析

查看代码通过分析发现处理逻辑为前端通过ajax发起http请求,由ajax转发至后端Controller控制器进行处理


通过查看ajax可知路由为/system/actionNetworkCmd.do,因此我们需要找到Controller中的处理代码,因为该代码为class文件,在导入idea时会自动进行反编译,因此我们直接搜索actionNetworkCmd关键词可能会找不到,这里有个技巧,就是直接搜索system,因为java命名都是以接口目录+Controller来进行命名,因此我们直接双击shift搜索system关键字即可

通过搜索即可发现actionNetworkCmd,那么这一段代码就是ajax转发至后端并进行后续处理的代码

通过前面的js代码中的myajax方法分析接收四个参数,其中传入参数port后端只有在检测宽带测试,走case2语句才会进行处理

主要查看ip参数,type参数通过ajax传入后端使用type來判断走那个switch語句,因此查看代码不难发现type的用处不大,即使控制也并不影响代码的处理逻辑
查看switch判断语句可知代码对我们传入的参数的ip地址进行了拼接然后使用>重定向符号保存至filename文件,后续会进行下载,这里不是重点,所有不做探究。

此时cmd的值为:因为filename为空,所以值保持不变

"ping " + "127.0.0.1" + " -i 1 -c " + time + " | awk '{print $0\"\\t\" strftime(\"%H:%M:%S\",systime())}'

继续向下执行,发现调用本类的MyThread类(此类为私有,只有在本类里面才能调用,如果需要其它类能够调用需要使用反射技术)


查看本类里面的thread类发现run函数调用CMSTools.execCentosCmd函数,其中的cmd参数为如上值


通过同样的方法搜索CMStools类

我们继续查看CMSTools.execCentosCmd函数可以发现进行了三步处理。
其中第一步把当前进程kill掉

第二部对文件进行判断,如果存在进行删除操作

最后使用exec进行命令执行达到RCE

漏洞复现

随机输入,点击开始测试抓包

使用dns外带


成功rce

0 条评论
某人
表情
可输入 255
目录