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等工具对参数先进行分析,这样方便我们后期的审计