前天看到zzzphp这一个cms,看着有点像zzzcms,去看了也是zzzcms开发的一套程序,于是就去审计一下,这zzzcms我之前也有审计过 https://bbs.ichunqiu.com/thread-14684-1-1.html https://getpass.cn/zzcms-Any-user-password-changes-loopholes-code-points/ https://getpass.cn/ZZCMS8.2-any-file-deleted-to-getshell/ 这套程序漏洞确实比较多,后面也做了很多改善。 那天看了表哥写的一篇PHPCMS的代码审计文章,深有感悟,授人以鱼不如授人以渔,确实是,写那么多审计文章,从审计代码的开始到结束,这种文章少之甚少。我也希望我以后写的文章也带上这种方式。 这套审计的漏洞比较多,SQL注入漏洞、任意文件删除漏洞、任意文件读取漏洞、远程执行漏洞,当中也借助了漏扫工具。废话不多说,直接开始吧。 文章也是原来的方式,先复现后分析。
payload:
对比两次的时间就晓得我们的语句执行成功了,表示存在SQL注入漏洞。
大家测试的时候可以用PHPstorm或者vscode这些工具去调试,走一遍整个过程,这样会对程序有所了解。
再发一次包到search页面会停留到文件,这个文件比较简单,包含了一个的文件。
进到文件有一些包含的进来的文件类似模板的文件等,这里通过上面的找到
到下面就实例化,解析模板
往下走进到文件,注入的主要是这一句,继续函数跟下去
走到的1561行,如果经过函数的话会被过滤掉,但是我们用的cookie,所以这里直接获取没有过滤。
我们可以进函数看下,前缀是所以我们的参数为,这里获取到了了数据但也没有过滤直接就返回了
下面就是直接执行了我们带有恶意的SQL语句了
这个漏洞是无需登录后台的,后台的地址可以直接写一个Python脚本来爆破一下就行了,命名规则为
文件路径
前面是获取和参数,看到文件的最后面包含文件这里,走进去看下
作用是把我们刚才传入的模板名称然后生成一个缓存文件
后面会走到缓存文件的26行,加载文件,网站的根目录和刚才传入的也就是我们的路径
的函数,这里做了一个替换,不过没什么卵用,判断是否是文件就直接读取内容了。
读取网站之外的文件
先在里面包含文件,但是这个文件判断后没有用这类的函数,导致程序继续往下走,又会回到执行67行的内容,导致出现了可以不用登录后台也能读取任意文件。
Payload:
根据我们的paylaod可以看到的文件,函数,这里从post方式获取到路径,这里做了一个限制的数组,通过函数来寻找是否匹配。如果存在的话就传递给函数。
比较数组
但是这里做了后缀的限制,后缀一定不能是类型
但是我们能删除之类的文件,删除这个安装文件就可以重新安装程序,然后远程写入配置文件的方法把我们的恶意语句写进配置文件中去,参考文章https://getpass.cn/MIPCMS%20V3.1.0%20Remotely%20Writing%20the%20Configuration%20File%20Getshell/ ,但是这个程序不行,他的大部分get、post都是经过函数的,这个函数里面用了一个转换来过滤掉我们的字符
虽然说这个能作为防御,但是也影响了程序模板部分的功能,等会getshell的时候会分析到。
这个漏洞有点类似于seacms的那个前台getshell,但是这个是要在后台修改模板文件才可执行。
1.登录后台,找到模板管理,电脑模板
忘了没跟大家说,先是执行里面的模板解析函数,然后再进入我们刚才开始分析的地方
上面任意文件删除漏洞说到的影响了模板文件的功能,原因是在函数里面,因为开始编辑保存的时候它会把整个模板文件的内容传到上面的的函数,然后返回数据的时候用了下面的函数,一般模板文件里面会有一些类似的字符但是这里过滤了所以导致影响了这个编辑模板的功能,这样就很矛盾了。
最近总是拖延,本来这篇文章在上周就可以发布了。
因为什么?理由总是比做的多。
这套程序好像也可以申请cve,这种cve不要也罢,类似dedecms、phpcms、thinkPHP、dz这种才有意思。
最近又从coding转到GitHub了,conding自从转移到腾讯之后一直都很炸。