logo头像

黑客的本质就是白嫖

zzcms CVE复现(下)

本文于 516 天之前发表,文中内容可能已经过时。

zzcms CVE复现(中)

CVE-2018-7434

CVE URL http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-7434
poc URL https://github.com/kongxin520/zzcms/blob/master/zzcms_8.2_bug.md
漏洞位置:3/ucenter_api/code/friend.php3/qq_connect2.0/API/class/ErrorCase.class.php,影响版本:zzcms8.2
一上来一个配置错误,这也能申请CVE的意思是…

1
2
3
4
3/ucenter_api/code/friend.php
...
$num = uc_friend_totalnum($Example_uid);
...

1
2
3
4
3/qq_connect2.0/API/class/ErrorCase.class.php
...
require_once(CLASS_PATH."Recorder.class.php");
...

两个配置错误导致直接访问页面会爆出网站物理路径
zzcms_73.png
zzcms_74.png

CVE-2018-8965

CVE URL http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-8965
poc URL https://github.com/Ni9htMar3/vulnerability/blob/master/zzcms_8.2/ppsave.php.md
漏洞位置:user/ppsave.php,影响版本:zzcms8.2
zzcms_75.png
8.3版本的任意文件删除一样,代码也没有变动,因为利用方式和上面的一样,POST一个oldimg上去就能做到任意文件删除,这里就不重复演示了

CVE-2018-8966

CVE URL http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-8966
poc URL https://github.com/Ni9htMar3/vulnerability/blob/master/zzcms_8.2/install.md
漏洞位置:install/index.php,影响版本:zzcms8.2
zzcms_76.png
114行代码处,直接将传入的参数写入到配置文件中,这样会导致注入
zzcms_77.png
zzcms_78.png
注入成功,但是这个漏洞有些鸡肋,毕竟都可以直接重新安装系统了,一个注入而已,是小事了

CVE-2018-8967

CVE URL http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-8967
poc URL https://github.com/Ni9htMar3/vulnerability/blob/master/zzcms_8.2/adv2.php.md
漏洞位置:user/adv2.php,影响版本:zzcms8.2
zzcms_79.png
可以看到,在72行处存在一个SQL注入,未对参数进行任何过滤就将其拼接至查询语句中
而这处漏洞在函数setAdv中,函数setAdv又在同一文件的第111以及117行被调用了
zzcms_80.png
这样我们需要构造一个payload

再次审计之后发现,如果这边要SQL注入的话,需要在zzcms_main或者zzcms_zh表中以当前用户插入一条数据,审计之后发现cms中对于这两个表的大部分操作都是admin权限才能够执行的,不过找到一个存在注入的非管理员权限的页面
zzcms_81.png
结果注入不了…明明没有过滤的啊,先放着吧

CVE-2018-8968

CVE URL http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-8968
poc URL https://github.com/Ni9htMar3/vulnerability/blob/master/zzcms_8.2/manage.php.md
漏洞位置:/user/manage.php,影响版本:zzcms8.2
zzcms_82.png
又是一样的任意文件删除,这个漏洞连续两个版本都存在,难道都不修复一下的吗…

CVE-2018-8969

CVE URL http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-8969
poc URL https://github.com/Ni9htMar3/vulnerability/blob/master/zzcms_8.2/licence_save.php.md
漏洞位置:user/licence_save.php,影响版本:zzcms8.2
zzcms_83.png
还是一样的漏洞…

CVE-2018-9309

CVE URL http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-9309
poc URL https://github.com/lihonghuyang/vulnerability/blob/master/dl_sendsms.php.md
漏洞位置:/dl/dl_sendsms.php,影响版本:zzcms8.2
zzcms_84.png
CVE-2018-14961一样的漏洞,直接使用了POST过来的语句,没有太多的过滤,只有一个去除反斜杠操作
zzcms_85.png
和另一个一样,为了省事就直接把结果dump出来了,没有去设置邮件服务器

CVE-2018-9331

CVE URL http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-9331
poc URL https://github.com/cherryla/zzcms/blob/master/adv.php.md
漏洞位置:user/adv.php,影响版本:zzcms8.2
zzcms_86.png
基本上都是重复的漏洞了

CVE-2019-8411

CVE URL http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-8411
poc URL https://github.com/615/VulnPoC/issues/1
漏洞位置:admin/dl_data.php,影响版本:zzcms2018
zzcms_87.png
还是一样的漏洞(为了偷懒直接连这个版本的cms我都没下,直接盗的网图(/▽\))

CVE-2019-9078

CVE URL http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-9078
poc URL https://github.com/NS-Sp4ce/ZZCMS-XSS/blob/master/xss.md
漏洞位置:user/ask.php,影响版本:zzcms2019
问答页面的XSS

1
2
3
4
5
6
<?php
$do=isset($_GET['do'])?$_GET['do']:'';
switch ($do) {
case "add":add();break;
case "modify":modify();break;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function modify()
{
global $username; ?>

<div class="admintitle">修改问答信息</div>
<?php
$page = isset($_GET['page'])?$_GET['page']:1;
checkid($page);
$id = isset($_GET['id'])?$_GET['id']:0;
checkid($id, 1);

$sqlzx="select * from zzcms_ask where id='$id'";
$rszx =query($sqlzx);
$rowzx = fetch_array($rszx);
if ($id<>0 && $rowzx["editor"]<>$username) {
markit();
showmsg('非法操作!警告:你的操作已被记录!小心封你的用户及IP!');
} ?>
1
2
3
4
5
6
7
function markit()
{
$userip = $_SERVER["REMOTE_ADDR"];
//$userip=getip();
$url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
query("insert into zzcms_bad (username,ip,dose,sendtime)values('" . $_COOKIE["UserName"] . "','$userip','$url','" . date('Y-m-d H:i:s') . "')");
}

但是这个XSS针对的是管理员,在管理员查看违规操作的用户时会触发,普通用户啥的没影响,大致思路是在触发非法操作时通过改包将自己访问的URL改成/user/ask.php?do=modify&page=1&id=1&aaa=<sCrIpT>alert(/xss/)</ScRiPt>像这样,最后在管理员查看时这里就会触发一个XSS,标签名大小写是为了绕过过滤

总结

一周多时间把zzcms的漏洞都过了一遍,碰到过问题,解决过问题,也还存在问题,这次复现给我的感受大概有几点

  • 1.系统中的漏洞基本上存在于与用户交互处,在登陆处的漏洞会少一点(从这个cms来看),一般存在漏洞的地方都是一些功能组件,这种地方程序员在写代码时往往会粗心一点,从而导致漏洞
  • 2.很多漏洞都是由于对用户的输入过滤审查不够严格导致的,如果可以把用户入口点放在同一个地方,在这里对所有的输入进行过滤,这样系统的安全性会得到极大地提升
  • 3.不同的人挖洞的方式、喜好、位置也不同,像其中的几个连号的漏洞,基本上都是同一个逻辑漏洞,只是出现的位置不同,所以申请了多个CVE
  • 4.大多数漏洞都出现在有一定权限的普通用户功能处,对于匿名用户,系统的审核都会严格一点,但是似乎普通用户就少了许多忌惮,安全性低了很多

评论系统未开启,无法评论!