zzcms代码审计
框架目录
1 | /install 安装程序目录(安装时必须有可写入权限) |
前台任意文件写入
使用Fortify自动审计工具时发现可能存在一个xxe漏洞,
xml_parse解析xml文档,搜索他的方法parse
发现xml_unserialize对parse()函数进行了调用,再去搜索
这里是从post中获取原始的数据流
上面的ertuparse_Str是将解码后的字符串解析为变量并存储在$get中,而上面的$code可控,而$code经过_authcode的处理,跟进一下发现大概是加解密字符串的,$string是需要加解密的字符串,也就是$code,$operation 默认为DECODE也就是解密字符串,而 $key 则为加解密的秘钥。
他说这里的默认密钥是123456,我真没看出来那里说了是123456
因为code可控,所以下面的$time,$action可控
59行判断传入的$action是否在数组中,是的话继续运行并讲$get,post以参数形式传输,所以$get,post也可控
所以我们可以去数组中找找有没有危险操作的
updateapps里面有一个fwrite,接收的UC-API可控,而且下面的fwrite是将我们输入的信息进行正则匹配进行替换,所以可以实现任意文件读写
测试
因为这里的东西限制了我们两条
$timestamp - $get['time'] > 3600$get['action']=updateapps;
并且要经过_authcode()解码,所以我们要先讲$code编码
这里我也找到了UC-KEY—-他在配置文件中说是默认为123456,也就解释了上面的123456的默认
这里说明了要按照xml的格式进行编写,所以就有了
任意文件删除
全局搜索unlink的时候发现这么一个东西
追踪一下unlink的file发现action和mlname可控
这里的mlname可控,他传入文件夹名给ml然后遍历整个文件夹下的文件,最将文件名赋值给file然后通过unlink删除
当文件夹下的文件全部被删除后再通过rmdir删除传入的文件夹
payload:1
2/admin/uploadfile_nouse.php?action=del&mlname=..\文件夹名字
前端xss漏洞
该系统没有按照mvc开发模式进行开发,导致大部分前后端代码都在一个php文件中,
这里的两个参数imgid和noshuiyin参数可控,
sql注入
这里的classname是可控的,从上面要求action=modify是一个条件,
从这php开头可以看到dowhat是可控的
所以应该还有个条件是dowhat=modifybigclass
1 | payload=classname= xxxxxxx(自己填写sql语句) |
总结:
- 如果限制了登录失败次数像是10次这种,可以看源码中是否通过ip来进行限制的,如果是的话可以在爆破的时候将ip的第一位也爆破一下
- sql注入的相关漏洞可以看
select *这种的东西,后面看是否传入的参数可控 - 还是危险函数
- 在正常的使用中可能有些不是传统的mvn框架所以我们要对目事先录框架进行分析
- 可以使用Fortify以及seay等工具对参数先进行分析,这样方便我们后期的审计

























