代码审计——zcncms几处漏洞合集(二)

from:小黑屋

继上一篇参数$parentid未正确处理后,在/module/products/admincontroller/products_photo.php中,

当 $a的值为’list’时,$where = ” productid = ‘”.$productid.”‘ “, $procuctid被单引号保护起来,参数引进是经过addslashes操作的,所以这里是安全的。但是当$a == ‘edit’时,$products->GetInfo(”,’ id = ‘.$productid),$productid被直接拼接到where语句中且没有单引号保护,导致SQL注入。构造payload如下:

1

反射型xss

在后台登陆文件 /include/admincontroller/login.php中,进行登陆是否成功后,设置模板文件为’login.tpl.php’.

跟踪到/admin/templates/default/login.tpl.php

在<title>标签中要echo三个变量,其中会检查$topTitle是否为空,我们再控制器文件login.php中并未找到$topTitle的定义或初始化,由于之前参数输入特性,可以进行变量覆盖。

2

后台getshell

在文件/include/admincontroller/sys.php中

可编辑网站的基本信息并且存入sys.inc.php,$rs_msg = $STR->safe($info);但是$info经过了safe函数,我们跟踪safe函数

safe函数过滤了单双引号及常见的xss,我们再看看sys.inc.php

我们继续跟踪sys.php中的写函数,file_Write()->_write()

发现经过一系列的安全处理后,写入前会进行stripslashes操作,但是之前单引号被替换了。这里想到了\
我们呢可以这样构造

将$sys[“closeinfo”]后面的单引号转义,使之和$sys[“webtitle”]的第一个单引号闭合,这样$sys[“webtitle”]的值就摆脱了单引号,再利用注释符”//“注释掉后面的单引号,中间直接可以写shell。执行完成后sys.inc.php如下

3

成功getshell

4

发表评论

要发表评论,您必须先登录