白袍的小行星

关于kkcms的填坑

字数统计: 457阅读时长: 1 min
2020/06/22 Share

之前一篇文章中,我发出来两个kkcms的漏洞,这次修改一点东西,顺便再审一审。

改正上次的错误

上次在审SQL注入时,我以为是毫无过滤的,事后发现,其实是有的:

if (!get_magic_quotes_gpc()) {
if (!empty($_GET)) {
$_GET = addslashes_deep($_GET);
}
if (!empty($_POST)) {
$_POST = addslashes_deep($_POST);
}
$_COOKIE = addslashes_deep($_COOKIE);
$_REQUEST = addslashes_deep($_REQUEST);
}

在头部引入了此文件,addslashes_deep()函数定义如下:

function addslashes_deep($_var_0)
{
if (empty($_var_0)) {
return $_var_0;
} else {
return is_array($_var_0) ? array_map('addslashes_deep', $_var_0) : addslashes($_var_0);
}
}

这个算是一个用来全局过滤引号的函数,但这个函数本身不安全,如果传入一个数组,它只会过滤数组的value,对于key不过滤。

在kkcms中,本来是有用的,可惜是白给:

$username = stripslashes(trim($_POST['name']));

本来转义了单引号,但这里代入的时候又去掉了反斜杠,所以过滤完全白给。

纠正一下自己的错误,向作者道歉,原来并不是没过滤,是过滤了个寂寞。

另一处前台SQL注入

/tamplate/wapian/vlist.php中:

if (isset($_GET['cid'])) {
if ($_GET['cid'] != 0){
$sql = 'select * from xtcms_vod where d_parent in ('.$_GET['cid'].') order by d_id desc';
$pager = page_handle('page',24,mysql_num_rows(mysql_query($sql)));
$result = mysql_query($sql.' limit '.$pager[0].','.$pager[1].'');
}else{
$sql = 'select * from xtcms_vod order by d_id desc';
$pager = page_handle('page',24,mysql_num_rows(mysql_query($sql)));
$result = mysql_query($sql.' limit '.$pager[0].','.$pager[1].'');
}
}

虽然$cid被全局过滤了引号,但这里的SQL语句没有用引号包裹变量,所以还是一样注入,不过要把cid设为不等于0的值,还需要闭合括号,回显位在这里:

总结

这个cms漏洞挺多,比较适合新手练习,一堆XSS和注入,上传之类的还没找到,可能作者用的其他人的代码写的上传哈哈哈(就是嘲笑的意思

CATALOG
  1. 1. 改正上次的错误
  2. 2. 另一处前台SQL注入
  3. 3. 总结