RCE
第一处
在逛后台的时候 发现上传的地方
可以任意上传东西 但是直接jsp这些传上去访问直接下载 无法利用 但是在上传zip的时候会自动解压 这就有意思了 于是乎 先抓包抓到路由 然后全局搜索
然后跟进来
这里调用了这个zipupload 继续跟进
经过简单代码跟进 发现 这一步才开始对参数进行利用
经过初步判断这个函数的作用是将zip里面的文件取出来 然后存入到文件夹里面 具体是不是 利用断点来进行详细的分析
这里是将传进来的文件先写入了临时文件 然后将临时文件和一个路径传入到zip函数
继续跟进
先判断传入的路径是不是文件夹 不是就直接报错
然后看下面 定义了一些相关变量
这里创建了一个zipfile文件对象 目标正式传入的zip文件的临时存储文件
这一步一个就是获取了文件的相关信息
然后走到这一步就直接将文件写入到文件里面 其中也没有任何的过滤 所以我们哪怕是文件里面放入jsp一句话也可以
先试试
jsp文件访问不到 发现在uploads前面竟然多了一个/jsp 其他类型文件直接下载 但是文件又确实存在 那说明肯定是拦截器之类的
经过搜索 找到这里 在这里打上断点
访问之后 确实是走到这里来了 所以直接jsp文件无法利用
那么这里 既然存入文件的过程没有什么过滤 直接利用跨目录的方式写一个war包到 但是这里前提得用tomcat搭建 因为我之前直接用的springboot的 重新切换到tomcat
- jspxcms安装包(部署到Tomcat):https://www.ujcms.com/uploads/jspxcms-9.0.0-release.zip
也是有安装手册的
根据手册把配置文件改了 然后启动tomcat
然后来到上传的地方
先准备恶意的zip包
把一句话打包成war包
然后把war包压缩 这里得用到脚本来
import zipfile file = zipfile.ZipFile('shell.zip','w',zipfile.ZIP_DEFLATED) with open('test.war','rb') as f: data = f.read() file.writestr('../../../test.war',data) file.close()
然后上传
冰蝎连接
第二处
在pom.xml中发现该系统用的shiro版本是1.3.2
符合shiro-721的条件 现在版本符合了 就需要寻找构造链了
这是该系统的 和ysoserial的利用链的版本有些差异 但能不能用 先测试一下
要了一个payload
然后利用exp脚本 开始爆破
https://github.com/inspiringz/Shiro-721
爆破的时间有点久
然后把cookie复制 我们来执行
反序列化的细节就不在这篇文章叙述了 请听下回分解
参考:https://www.freebuf.com/articles/others-articles/229928.html
JAVA代码审计入门篇