X5music_后台登陆绕过+后台getshell

# X5music 后台登陆绕过+后台getshell

=================================

一、漏洞简介
————

二、漏洞影响
————

三、复现过程
————

### 登录绕过

后台登陆验证逻辑存在问题 在/admin/admin\_login.php中

if($action==”login”) {
$CD_Name=SafeRequest(“CD_AdminUserName”, “post”);
$CD_Pass=md5(SafeRequest(“CD_AdminPassWord”, “post”));
$CD_Code=SafeRequest(“CD_CheckCode”, “post”);
$logtime=date(‘Y-m-d H:i:s’);
global $db;
if(cd_webcodea==’yes’) {
if($CD_Code!=cd_webcodeb) {
showmessage(“登录失败,认证码错误!”, “admin_login.php”, 0);
}
}
$sql=”Select CD_ID from ” . tname(‘admin’) . ” where CD_AdminUserName='” . $CD_Name . “‘ and CD_AdminPassWord='” . $CD_Pass . “‘ and CD_IsLock=0”;
$CD_ID=$db->Getone($sql); //从数据库中返回1
if($CD_ID) {
$db->query(“update ” . tname(‘admin’) . ” set CD_LoginNum =CD_LoginNum +1,CD_LoginIP='” . $_SERVER[‘SERVER_ADDR’] . “‘,CD_LastLogin ='” . $logtime . “‘ where CD_ID='” . $CD_ID . “‘”);
$row=$db->Getrow(“Select * from ” . tname(‘admin’) . ” where CD_ID='” . $CD_ID . “‘ “);
setcookie(“CD_AdminID”, $row[‘CD_ID’]);
setcookie(“CD_AdminUserName”, $row[‘CD_AdminUserName’]);
setcookie(“CD_AdminPassWord”, md5($row[‘CD_AdminPassWord’]));
setcookie(“CD_Permission”, $row[‘CD_Permission’]);
setcookie(“CD_Login”, md5($row[‘CD_ID’] . $row[‘CD_AdminUserName’] . md5($row[‘CD_AdminPassWord’]) . $row[‘CD_Permission’]));
//showmessage(“成功登录,正在转向后台管理主页!”, “admin_index.php”, 0);
echo’‘;
} else {
showmessage(“登录失败请确认输入的是正确信息以及帐号是否开启!”, “admin_login.php”, 0);
}
}

在登陆成功后设置cookies,没有任何session等服务端验证存储方式。
然后再看登录后验证是否登陆的逻辑。跟入admin\_index.php

![](/static/qingy/X5music_后台登陆绕过+后台getshell/img/rId25.png)

验证是否登陆的为admincheck()这个函数。 跟进/function\_common.php查看

function admincheck($value) {
if(empty($_COOKIE[‘CD_AdminID’]) || empty($_COOKIE[‘CD_Login’]) || $_COOKIE[‘CD_Login’]!==md5($_COOKIE[‘CD_AdminID’] . $_COOKIE[‘CD_AdminUserName’] . $_COOKIE[‘CD_AdminPassWord’] . $_COOKIE[‘CD_Permission’])) {
showmessage(“出错了,登录已过期,请重新登录!”, “admin_login.php”, 0);
}
if(!empty($_COOKIE[‘CD_Permission’])) {
$array=explode(“,”, $_COOKIE[‘CD_Permission’]);
$adminlogined=false;
for($i=0; $iWriteFile($str, 3);
showmessage(“恭喜您,保存设置成功!”, $_SERVER[‘HTTP_REFERER’], 0);

对变量\$str进行粗糙的过滤后直接写入了配置文件`x5music.config.php`
而过滤仅仅过滤了\’\”\’号。过滤方式是对其转义。
在后台配置文件修改插入如下代码

![](/static/qingy/X5music_后台登陆绕过+后台getshell/img/rId29.png)

这里由于`”`被转义,再给它添加一个`\`二次转义即可逃逸`”`包裹.

![](/static/qingy/X5music_后台登陆绕过+后台getshell/img/rId30.png)

![](/static/qingy/X5music_后台登陆绕过+后台getshell/img/rId31.png)

参考链接
——–

>

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容