小记某cms代码审计

admin 2023年6月25日17:25:09评论47 views字数 2326阅读7分45秒阅读模式

本文仅为学习和交流,切勿用作非法攻击 ,参与非法攻击与笔者无关 !!!

下载某小众cms尝试进行代码审计,大佬勿喷

1、任意文件删除漏洞2、XSS漏洞3、ZIP解压getshell4、文件上传漏洞

环境搭建

1、Phpstudy Mysql2、Tomcat6.0 webapps/源码

后台登录

http://localhost:80/admin/xxxxcms/index.do

小记某cms代码审计

任意文件删除

1、后台存在删除功能 但是删除文件是有固定的目录 无法进行任意文件删除2、找到对应的路由进行代码分析 关注是否有过滤 比如../等
ps: 该CMS中xml文件设置bean标签属性 可用来确定路由位置

小记某cms代码审计

小记某cms代码审计

1、先是获取前端传入的root、name的值 2、进而调用 this.tplManager.delete方法进行删除 跟进delete方法

小记某cms代码审计

1、判断当前name是否为目录,最后对当前文件进行删除2、默认删除的文件只能在 /WEB-INF/t/cms/www/template-red/目录下3、期间未对name的值做过滤 可用../ 来达到任意文件的删除

小记某cms代码审计

漏洞复现

1、提前设置一个测试文件 11111111.txt2、传入的name为 /WEB-INF/t/cms/www/template-red/../../../../../../11111111.txt3、成功将设置的11111111.txt进行删除

小记某cms代码审计

小记某cms代码审计

XSS漏洞


小记某cms代码审计

1、分析XSS漏洞 主要是字符有无进行过滤 比如插入到数据库、从数据库取出的时候 是否有实体化编码等2、根据ID序号进行对应的替换 search为敏感词、replacement为替换的内容3、被this.manager.updateEnsitivity进行调用

小记某cms代码审计

1、找到this.manager.updateEnsitivity 函数方法 会调用this.dao层在数据库中进行查询2、对传入的search、replacement 直接进行内容的赋值修改3、到数据库中存储基本没有任何过滤

小记某cms代码审计

小记某cms代码审计

小记某cms代码审计

1、查看数据的时候 是调用v_list.do2、分析v_list.do路由代码 从数据库中取出也未经过任何过滤3、调用 this.manager.getList(false)将获取数据信息

小记某cms代码审计

小记某cms代码审计

1、然后调用 this.dao.getList() 到数据库进行查询2、到DaoCmsSensitivityDaoImpl类中 可以看到执行SQL查询 根据用户ID获取数据库信息

小记某cms代码审计

小记某cms代码审计

漏洞复现


小记某cms代码审计

zip解压功能getshell


小记某cms代码审计

小记某cms代码审计

1、找到o_import.do路由代码进行分析2、File.createTempFile 先创建临时文件用于存储上传的ZIP文件 3、file.transferTo(tempFile) 将数据写入到临时文件中4、关键函数this.resourceMng.imoport(tempFile, site) 来处理上传的压缩文件5、tempFile.delete() 最后删除临时文件

漏洞复现

小记某cms代码审计

1、遍历压缩包中的文件,未做过滤,最后os.write(buf, 0, len); 将文件进行写入

小记某cms代码审计

漏洞复现

1、正常上传ZIP文件默认解压到 Tomcat x.0webappsROOTWEB-INFtcmswww2、上传一个含有shellwar包,通过../跳到ROOT层进行部署wargetshell
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()

小记某cms代码审计

小记某cms代码审计

文件上传

1、发现一处文件上传 o_upload_image.do 分析路由代码 2this.validate(filename, file, request) 对文件上传的 文件名进行检测

小记某cms代码审计

1、先是获取文件后缀 getExtension(filename)2、ImageUtils.isValidImageExt(ext) 通过ImageUtils类的isValidImageExt方法进行后缀检测3、白名单+文件内容的检测 暂时无法绕过

小记某cms代码审计

1、获取后缀 FilenameUtils.getExtension(filename) 与 IMAGE_EXT的数组的白名单进行匹配2、ImageUtils.isImagecheck方法来对文件内容进行检测3、可采用%00来进行尝试绕过白名单检测

小记某cms代码审计

小记某cms代码审计

小记某cms代码审计

小记某cms代码审计

1、偶然发现一处flash文件上传 o_upload_flash.do 跟进路由代码2、依然存在 this.validateUpload(file, request) 跟进代码 观察是否存在检测

小记某cms代码审计

1、发现 validateUpload函数 并未对文件内容及文件名进行校验2、故直接进入上面图片的else环节

小记某cms代码审计

1、进入到this.fileRepository.storeByExt(site.getUploadPath(), ext, file) 进行分析

小记某cms代码审计

小记某cms代码审计

1、跟进 UploadUtils.generateFilename(path, ext) 主要是创建文件名 当前时间+4位随机数+上传后缀 直接进行拼接2、new File(this.ctx.getRealPath(filename)) 创建文件3、file.transferTo(dest) 最后进行文件写入

小记某cms代码审计

漏洞复现

小记某cms代码审计

主要是学习交流,大佬勿喷

原文始发于微信公众号(弱口令验证机器人):小记某cms代码审计

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年6月25日17:25:09
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   小记某cms代码审计https://cn-sec.com/archives/1831969.html

发表评论

匿名网友 填写信息