某运维审计系统任意文件写入漏洞挖掘过程

分享下最近挖掘漏洞的一些手段

临近实习,有木有大佬收实习小弟,端茶倒水样样精通

目标系统如下:
8E9ACE3DADE4C6986668BC7245332ACD.jpg
是一个安全审计系统,根据主页的关键词在网络安全产品大全中进行查询,得知目标系统开发商为广州某科。
网络安全产品大全:https://t.wangan.com/c/products.html

同时,通过搜索引擎查到了一些历史漏洞。
noname.png
本以为可以直接拉出payload出来打呢。但是看了下,目前所遇到的系统版本为3.*最新版,而乌云所存储的时间居然是2011年?
这明显对不上了,且新版使用的mvc模式。直接略过

既然没有可利用的公开漏洞,那么只有自己挖掘漏洞了。还是老方法,通过fofa采集了一波相同程序的站点,准备探测一下弱口令,进去挖一些未授权的漏洞。

测了十几个站点,都没有一个成功的。。。卒!再也不相信弱口令了

因为这类系统一般都是采用的iso镜像文件或者安装包。既然知晓了开发厂商以及产品版本号。那么可以直接去找一下镜像或者安装包,脱取源码进行审计。

百度云文件搜索引擎:https://www.lingfengyun.com/
noname.png
根据筛选,发现了某用户在19年分享过这类系统的操作文档。将其下载下来。发现文档中包含了openstack以及docker的安装方法。由于openstack需要环境,本机没有配置。所以这里我简单看了看docker的安装方法。
noname.png
截图.png
docker pull 的是一个私有仓库。但是,这里可以注意下。docker在push的时候一般是以用户名/镜像名。一般在知道用户名的情况下可以尝试去搜索一些镜像。在安装文档中,pull的地址为*nsec.com。
尝试使用docker search xxxnsec 搜索。
image.png
这里有两个镜像,一个是geteway,一个是web firewall。但是,当我尝试下载的时候。
image1.png
去dockerhub上看了一下
image.png
并没有内容。应该是被清空了。可惜啊。
既然分享过操作文档,肯定会有安装包。
image1.png
直接切入该用户的详细信息,并且筛选zip,rar等压缩文件。最终以大小确定一个结尾为V3.7的zip压缩包。
将其下载到本地。解压出来为iso镜像文件。
image2.png
开始用Vmware搭建环境,
根据相关提示,开始安装程序
安装完过后,提示输入账户和密码
image3.png
由于解压出来的文件里并没有安装文档,在历史分享中也并没有找到类似文件。盲测了几个弱口令发现都不行。
这里想到了忍者师傅前段时间发过一篇文章,也是在不知道目标主机账户密码的情况下读取系统文件。
在本地新建了一个centos7系统,添加一块现有虚拟磁盘。磁盘文件选择运维审计系统的vmdk文件
image4.png
开启centos7系统,查看硬盘以及分区信息

sudo fdisk -l

image5.png
可以看到这里多了一个sdb2,这就是刚刚添加的现有虚拟磁盘,也就是运维审计系统的磁盘
将其挂载。

sudo mount /dev/sdb2 mnt1

image6.png
因为目标程序是使用php开发的,这里直接find查找一下
image7.png
找到对应路径 直接tar 打包整个文件夹,拖出来。源码到手~!
开始审计。
由于是MVC模式,直接找Controller
image8.png
在indexController下发现某方法存在调用file_put_contents()函数
image9.png
且参数可控。可造成任意文件写入。
ce为内容,user由于是在末尾拼接,可以直接../跨目录
image10.png
image12.png
准备写个phpinfo进去,测试下可执行性
image13.png
发现写入的文件内容被替换了,经过一系列测试,发现只要出现<>; '"就会在该字符前面加一个\

由于\的写入导致php代码语法错误,不能被执行。这里想到了php的特性
链接https://blog.csdn.net/chengjianghao/article/details/100078052

加结尾的:之后的内容视为 纯文本直接输出,直到再次碰到 <? 或 <?php
不加的:之后的内容视为 PHP 代码,除非没有代码了。

不加结尾并不影响php代码的执行。如果传入<?php phpinfo(); 那么最终格式为 \<?php phpinfo()\;

这里的;最终也被替换了。导致语句还是无法正常执行。这里请教了群里的师傅

在1师傅的指导下获得了最终的payload: <?php if(expr) 在php中 if是以{}作为结尾。
image14.png
同理,使用while也是可以的。
image15.png

本文链接:

https://www.websecuritys.cn/index.php/archives/318/
1 + 8 =
快来做第一个评论的人吧~