web漏洞分析--ZZCMS

spider   ·   发表于 2021-09-24 21:17:05   ·   技术文章投稿区

简述:

ZZCMS是中国ZZCMS团队的一套内容管理系统(CMS)。

ZZCMS 8.3及之前版本中的zs/subzs.php文件存在SQL注入漏洞。该漏洞源于基于数据库的应用缺少对外部输入SQL语句的验证。攻击者可利用该漏洞执行非法SQL命令。

下载地址

https://pan.baidu.com/s/1vFT6pG31J7NMKtRsbt1fLQ?_at_=1632443525498

安装步骤


这里要安装库,如果没有要去创建一个数据库



完事之后点击下一步就好了
他会有一个查询过程,等他查询结束就好了


这样子就算安装结束了

代码分析审计

在简述中已经提到,漏洞产生在文件zs/subzs.php中
先用Seay代码审计工具打开zs/subzs.php

仔细一看,漏洞就产生在第一个函数里


细细分析,,从if开始。
if (!isset($_COOKIE[“zzcmscpid”])){
$str=”暂无记录”;
判断COOKIE中如果不存在zzcmspid函数,那么就会将”暂无记录”赋值给变量str

否则,判断到cokie有zzcmspid的话,就直接把zzcmspid赋值给cpid,由cpid来判断当前id值是否大于0。其次直接带入数据执行sql语句。
else{
$cpid=$_COOKIE[“zzcmscpid”];
if (strpos($cpid,”,”)>0){
$cpid=str_replace(“ “,””,$cpid);
$cpid=str_replace(“deleted”,””,$cpid);//cookie会出现deleted的情况
$sql=”select id,proname,img from zzcms_main where id in (“.$cpid.”)”;
}else{
checkid($cpid);
$sql=”select id,proname,img from zzcms_main where id=’$cpid’ “;
}

漏洞原因是因为函数未对cookie值验证,sql查询语句没用引号引起来,是数字型注入,一定要注意,从前端传到后端的数据都是可更改的。
全局搜索一下,看看哪里调用了这个函数:


可以看到在/label.php中调用了,跟进去看看。


functionfixed($cs,$channel){
switch($channel){
case’ad’: returnshowad($cs); break;

case’zs’: returnshowzs($cs); break;

case’dl’: returnshowdl($cs); break;

case’pp’: returnshowpp($cs); break;

case’job’: returnshowjob($cs); break;

case’zx’: returnshowzx($cs); break;

case’zh’: returnshowzh($cs); break;

case’announce’: returnshowannounce($cs); break;

case’cookiezs’: returnshowcookiezs($cs); break;

case’zsclass’: returnshowzsclass($cs); break;

case’keyword’: returnshowkeyword($cs); break;

case’province’: returnshowprovince($cs); break;

case’sitecount’: returnshowsitecount($cs); break;

}
再次全局搜索一下调用fixed函数的地方,就在同一文件处,即label.php中的showlabel函数。

functionshowlabel($str){
global$b; //zsshow需要从zs/class.php获取$b;zxshow从s/class.php获取$b;

$channels= array( ‘ad’, ‘zs’, ‘dl’, ‘zx’, ‘pp’, ‘job’, ‘zh’, ‘announce’, ‘cookiezs’, ‘zsclass’, ‘keyword’, ‘province’, ‘sitecount’);

foreach($channels as$value) {
if(strpos($str, “{#show”.$value. “:”)!== false){
$n=count(explode( “{#show”.$value. “:”,$str)); //循环之前取值

for($i= 1;$i ‘’){$str=str_replace( “{#show”.$value. “:”.$cs. “}”,fixed($cs,$value),$str);} //$cs直接做为一个整体字符串参数传入,调用时再转成数组遍历每项值
}
}

}

//自定义标签

$channels= ‘zs,dl,zx,pp,job,wangkan,zh,company,special,baojia,ask,link,ad,about,guestbook,help’;

$channel = explode( “,”,$channels);

for($a= 0; $a

用户名金币积分时间理由
奖励系统 100.00 0 2021-10-07 14:02:37 投稿满 10 赞奖励
奖励系统 50.00 0 2021-10-07 14:02:39 投稿满 5 赞奖励
Track-手电筒 60.00 0 2021-09-29 22:10:22 一个受益终生的帖子~~

打赏我,让我更有动力~

1 Reply   |  Until 7个月前 | 328 View

1428136846
发表于 7个月前

11111

评论列表

  • 加载数据中...

编写评论内容
LoginCan Publish Content
返回顶部 投诉反馈

© 2016 - 2022 掌控者 All Rights Reserved.