zzcms cve部分复现


前言

最近想要学习代码审计,跟着dd师傅,dd师傅的师傅,告诉他需要先复现漏洞,你才可以找的到漏洞,所以开始看cve,cms的cve是比较容易挖的,所以我选择了zzcms的cve,但是看遍了zzcms8.3和8.2的cve,不难发现,很多漏洞都很睿智,而且大同小异,所以我就进行选择性的复现。

CVE-2018-1000653

这是一个头部注入的cve,注入点在host,关键词query

cve_poc

1
2
3
4
5
#top.php
$editor=isset($_REQUEST['editor'])?$_REQUEST['editor']:'';
$editor=substr($_SERVER['HTTP_HOST'],0,strpos($_SERVER['HTTP_HOST'],'.'));//从二级域名中获取用户名
$rs=query("select * from zzcms_userdomain where domain='".$_SERVER['HTTP_HOST']."' and passed=1 and del=0");//从顶级级域名中获取用户名
$row=num_rows($rs);

这里可以注意,$_SERVER['HTTP_HOST']这个参数没有进行任何的过滤处理,直接放入sql中进行查询,然后我们寻找这个的使用处
zzcms_1

我们这里就按照poc中的job.php中来,看一下我们job.php需要的参数,然后进行构造
zzcms_2
zzcms_3

这里响应的时间可以看出,我们的payload生效了,poc中有一点是如何知道构造数据库的表的行和列,这里我们不用fuzz,因为我们自己搭建的,所以我们可以直接进入直接看见表的情况。

这里补充一个知识点,关于ubuntu和win下的host头部问题,在win10的环境下,使用apache还是使用nginx都可以修改host头,不会对请求有任何影响,服务器也能正常响应,当有两个host时,apache会获取两个,而nginx只会获取后一个;在ubuntu下,使用apache时,只有在host后只能是数字和点才不会出现400错误,其他情况下都会出错,包括添加字符、添加第二个host头等等,而使用nginx时,和在win10下一样,可以修改任意字符,使用两个host头,但是也是只有第二个会被取

CVE-2018-13056

任意文件删除漏洞,关键词 unlink()

cve_poc

定位在/user/del.php
zzcms_4

这里的功能就是把上传上去的图片进行检查,如果图片已经存在了,就会进行删除,不过这里有个问题,就是没有对图片进行检查,所以就会导致这里可以使其他的文件,最终就会导致了任意文件删除。
这里我们通过全局检索的方式,来寻找哪里插入数据进入了这个表
zzcms_5
因此我们只需要进入这个页面,然后构造,插入即可
zzcms_7
zzcms_6
现在我们去删除文件
zzcms_8
zzcms_9
这个比较神奇的地方在于,居然这个漏洞跨版本存在,这十分严重,任何人可以导致网站瘫痪。

CVE-2018-14962

cve_poc

定位在user/manage.php
zzcms_10
这里有个很神奇的地方,就是都check了,就只有content检测了一下是否为空就放入数据库,我们再寻找一个调用点
zzcms_14
zzcms_11
因此我们可以在这里各种play,其实完全可以做二次注入,不过就先按照poc进行一个存储的xss吧
zzcms_12
在/show.php?id=1界面进行调用
zzcms_13

其余还有好多感觉大多都好睿智,就随便复现一下,水一篇吧,感觉那么多都那么无聊的cve自己有空也可以刷一刷好吧。

不过收获最大的可能还是配置好了自己的phpstorm+xdebug