漏洞简介
之前对 nginxWebUI 进行过搭建和审计,但是当时仅仅关注到了后台的一些命令执行漏洞,最近爆出了未授权远程代码执行,再一次进行搭建环境和分析。
环境搭建
https://github.com/cym1102/nginxWebUI/releases/download/3.4.8/nginxWebUI-3.4.8.jar
java -jar -Dfile.encoding=UTF-8 D:/home/nginxWebUI/nginxWebUI-3.4.8.jar --server.port=8080 --project.home=D:/home/nginxWebUI/


漏洞复现
我们利用网上公开的payload 进行测试
http://127.0.0.1:8080/AdminPage/conf/runCmd?cmd=calc%26%26nginx

漏洞分析
Solon 路由器对 url 的匹配默认是 “忽略大小写” 的

调试分析
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar -Dfile.encoding=UTF-8 D:/home/nginxWebUI/nginxWebUI-3.4.8.jar --server.port=8080 --project.home=D:/home/nginxWebUI/
com.cym.config.AppFilter#doFilter

传入的路由与设置的匹配条件均不满足,继续进行匹配
org.noear.solon.core.route.RoutingTableDefault#matchOne

在 solon
中将传入的路径与系统中路径依次进行匹配比较,因为大小写的不敏感,所以会匹配成功
com.cym.controller.adminPage.ConfController#runCmd

当到达函数 runCmd 时 cmd 参数可控,进行了一部分校验和过滤 只有cmd 中存在字符串 nginx
才可以继续执行,利用 &&
来实现命令的拼接
cn.hutool.core.util.RuntimeUtil#exec(String...)

漏洞修复
我们看到对漏洞针对性的修复操作是,将路由全部转换为小写再进行匹配校验

感觉没有官方提供的修复方式更简便些