10086zzz
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

一、漏洞概述
1.1 组件描述
nginxWebUI是一款图形化管理nginx配置的工具,能通过网页快速配置nginx的各种功能,包括HTTP和TCP协议转发、反向代理、负载均衡、静态HTML服务器以及SSL证书的自动申请、续签和配置,配置完成后可以一键生成nginx.conf文件,并控制nginx使用此文件进行启动和重载。
1.2 使用方法
目标信息,源码名称:nginxWebUI,下载地址:https://www.nginxwebui.cn/。官方使用教程https://www.nginxwebui.cn/product.html
Windows系统: java -jar -Dfile.encoding=UTF-8 D:/home/nginxWebUI/nginxWebUI.jar --server.port=8080 --project.home=D:/home/nginxWebUI/
此处复现版本我们下载nginxWebUI-3.4.6.jar版本。因为下载下来的是jar包,所以我们通过反编译来拿到源码。
反编译源码我使用jd-gui,可以直接去GitHub下载
选择 "Save All sources" 导出该项目,导出成功后 使用IDEA去打开该项目。使用IDEA的debug动态调试+web请求来复现全部过程
我们在这里开始远程JVM调试,一般我们java web远程debug的话 只要设置好三要素
- 1.主机
- 2.端口
- 3.JDK版本
如图 服务端的地址为localhost 端口为5055 复制给出的命令行实参
在dos窗口中,使用Java命令行参数启动服务
添加到启动jar包的cmd命令: java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar -Dfile.encoding=UTF-8 D:/home/nginxWebUI/nginxWebUI.jar --server.port=8082 --project.home=D:/home/nginxWebUI/
而后,启动IDEA的debug服务
二、漏洞复现
2.1 权限绕过
config下目录AppFillter 类发现doFilter方法,通过全局过滤器发现这里校验不严格,可以大小写绕过。后续2.2的无需登录状态下远程命令执行漏洞产生,也是因为2.1的原因造成的
2.1 命令执行
在项目中全局搜索exec相关函数
可以看到在ConfController类中调用了RuntimeUtil.exec。进入ConfController类,跟踪查找有哪些上层类调用了ConfController的runCmd方法
可以看到是NginxApiController调用了runCmd方法。只要构造好payload,此处即有命令执行漏洞
回想到2.1的权限绕过,那么路径大小写,即可以构造payload。如下
url+/AdminPage/conf/runCmd?cmd=calc
url+/Api/nginx/runNginxCmd?cmd=calc
2.2 命令执行-RCE(jar包)
还是通过全局搜索exec相关。发现了很多处地方都有调用。代码审计就是要一个个找、跟踪执行方法呗。此处在UpdateUtil类中又发现一处
跟踪run方法,发现是MainController类的autoUpdate方法调用了。
该方法里面的逻辑,粗略一看感觉没有问题,可是问题点就出在第96行。我们传入url,服务器把我们传入的url下载,并且重命名为jar.getParent() + "/nginxWebUI.jar.update"。也就是path。我们继续根据run方法
在run方法里面,先是把.update结尾给删除了,然后重命名了一下文件名。后续就直接执行了服务器下载的jar包。
所以我们只需要搭建一个服务器,在服务器上创建一个恶意的jar包,让它去下载即可。复现过程如下图
除了以上的命令执行外,还有其他几处,多挖挖,肯定有
2.3 任意文件读取
对传入的文件进行判断,是否为空,是否为文件,是否存在。以上三者都满足的话就readString。然后赋值给confExt,而后用for循环对confExt进行换行读取。最后通过return返回。
该文件读取漏洞也可以配合权限绕过进行直接文件读取,如下
2.4 SSRF
根据关键http请求函数,定位到RemoteControll类,如下
服务器对传入的url进行了请求,并且以Stream流形式返回了数据
复现过程如下
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)