【本文仅为学习和交流,切勿用作非法攻击 ,参与非法攻击与笔者无关 !!!】
下载某小众cms尝试进行代码审计,大佬勿喷
1、任意文件删除漏洞
2、XSS漏洞
3、ZIP解压getshell
4、文件上传漏洞
环境搭建
1、Phpstudy Mysql
2、Tomcat6.0 webapps/源码
后台登录
http://localhost:80/admin/xxxxcms/index.do
任意文件删除
1、后台存在删除功能 但是删除文件是有固定的目录 无法进行任意文件删除
2、找到对应的路由进行代码分析 关注是否有过滤 比如../等
ps: 该CMS中xml文件设置bean标签属性 可用来确定路由位置
1、先是获取前端传入的root、name的值
2、进而调用 this.tplManager.delete方法进行删除 跟进delete方法
1、判断当前name是否为目录,最后对当前文件进行删除
2、默认删除的文件只能在 /WEB-INF/t/cms/www/template-red/目录下
3、期间未对name的值做过滤 可用../ 来达到任意文件的删除
漏洞复现
1、提前设置一个测试文件 11111111.txt
2、传入的name为 /WEB-INF/t/cms/www/template-red/../../../../../../11111111.txt
3、成功将设置的11111111.txt进行删除
洞任
XSS漏洞
1、分析XSS漏洞 主要是字符有无进行过滤 比如插入到数据库、从数据库取出的时候 是否有实体化编码等
2、根据ID序号进行对应的替换 search为敏感词、replacement为替换的内容
3、被this.manager.updateEnsitivity进行调用
文
1、找到this.manager.updateEnsitivity 函数方法 会调用this.dao层在数据库中进行查询
2、对传入的search、replacement 直接进行内容的赋值修改
3、到数据库中存储基本没有任何过滤
1、查看数据的时候 是调用v_list.do
2、分析v_list.do路由代码 从数据库中取出也未经过任何过滤
3、调用 this.manager.getList(false)将获取数据信息
1、然后调用 this.dao.getList() 到数据库进行查询
2、到Dao层 CmsSensitivityDaoImpl类中 可以看到执行SQL查询 根据用户ID获取数据库信息
漏洞复现
zip解压功能getshell
1、找到o_import.do路由代码进行分析
2、File.createTempFile 先创建临时文件用于存储上传的ZIP文件
3、file.transferTo(tempFile) 将数据写入到临时文件中
4、关键函数this.resourceMng.imoport(tempFile, site) 来处理上传的压缩文件
5、tempFile.delete() 最后删除临时文件
漏洞复现
1、遍历压缩包中的文件,未做过滤,最后os.write(buf, 0, len); 将文件进行写入
漏洞复现
1、正常上传ZIP文件默认解压到 Tomcat x.0webappsROOTWEB-INFtcmswww
2、上传一个含有shell的war包,通过../跳到ROOT层进行部署war来getshell
import zipfile
if __name__ == "__main__":
zipFile = zipfile.ZipFile("test.zip", "a", zipfile.ZIP_DEFLATED)
with open('11111.war','rb') as f:
data = f.read()
zipFile.writestr('../../../../../11111.war',data)
zipFile.close()
文件上传
1、发现一处文件上传 o_upload_image.do 分析路由代码
2、this.validate(filename, file, request) 对文件上传的 文件名进行检测
1、先是获取文件后缀 getExtension(filename)
2、ImageUtils.isValidImageExt(ext) 通过ImageUtils类的isValidImageExt方法进行后缀检测
3、白名单+文件内容的检测 暂时无法绕过
1、获取后缀 FilenameUtils.getExtension(filename) 与 IMAGE_EXT的数组的白名单进行匹配
2、ImageUtils.isImage的check方法来对文件内容进行检测
3、可采用%00来进行尝试绕过白名单检测
1、偶然发现一处flash文件上传 o_upload_flash.do 跟进路由代码
2、依然存在 this.validateUpload(file, request) 跟进代码 观察是否存在检测
1、发现 validateUpload函数 并未对文件内容及文件名进行校验
2、故直接进入上面图片的else环节
1、进入到this.fileRepository.storeByExt(site.getUploadPath(), ext, file) 进行分析
1、跟进 UploadUtils.generateFilename(path, ext) 主要是创建文件名 当前时间+4位随机数+上传后缀 直接进行拼接
2、new File(this.ctx.getRealPath(filename)) 创建文件
3、file.transferTo(dest) 最后进行文件写入
漏洞复现
主要是学习交流,大佬勿喷
原文始发于微信公众号(弱口令验证机器人):小记某cms代码审计
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论