【文件读写】绕过验证下

.htaccess

在Apache服务器的运行体系中,.htaccess文件作为目录级别的配置载体,具备对上级配置进行局部覆盖的能力,其优先级高于全局配置文件,且修改后无需重启服务即可即时生效。攻击者正是利用这一特性,通过上传经恶意构造的.htaccess,使服务器在加载当前目录资源时误以为指定文件类型具备脚本执行权限,从而将原本受限的后缀名绕过校验,达成WebShell的解析与触发,实现对访问控制策略的隐蔽突破。

httpd-conf

httpd-conf作为统摄整站的全局配置文件,虽然规定了服务器的基本行为与安全基线,却因优先级较低且需重启才能生效,难以对目录级的动态篡改作出即时响应。防御方若仅依赖全局策略而忽视对目录级配置的强制校验,便会在文件上传与解析环节留下可被利用的缝隙;攻击者借此在特定目录内重新定义文件类型与执行权限,使防御体系在局部失效,最终完成针对上传限制的策略绕过,凸显出局部配置动态覆盖全局策略所带来的潜在风险。

绕过路径 被屏蔽的关键环节 具体屏蔽效果 对后续防御链的影响
.htaccess 目录级篡改 文件落地可见性与解析控制权 即时把".jpg/.txt"等无害后缀重映射为 PHP/CGI 执行入口,传统后缀黑白名单、MIME 校验、杀软静态扫描全部失效 上传-解析-审计链路失去对恶意脚本存在感的感知,纵深防御因源头失真而瘫痪
httpd-conf 全局级篡改 上传目录整体执行权限标记 将整站或指定目录设为"脚本可执行区",Webshell 查杀、RASP 注入监控失去定位锚点 文件已落地却难以删除、脚本已运行却无日志可追,形成持续盲区

user.ini

user.ini 是 PHP 为用户或目录量身定制的"小宪法",只要被扔进站点根目录,无需重启服务即可立刻覆盖 php.ini 的全局条款;攻击者把 auto_prepend_file、open_basedir 等关键指令悄悄改写后,就能让同目录下的任意后缀伪装成合法脚本,从而把传统依赖后缀白名单、MIME 校验和静态查杀的"上传即第一道关"变成"上传即放行"的真空地带。

php.ini 虽然统摄整个 PHP 运行环境,却因优先级低且需进程重启方可生效,对目录级动态篡改反应迟缓;一旦防御方仅把住主配置文件却未禁止用户级 ini 的写入权限,便等于在局部为攻击者开启"绿色通道",使后续 Webshell 查杀、RASP 行为监控因源头失真而陷入"文件已落地却无人敢删、脚本已运行却无日志可追"的盲区,整条"上传-解析-审计"链路随之瘫痪。

用靶场来示范,首先在upload下创建一个.user.ini的文件,内容的意思就是包含1.txt。意味着所有php文件都会包含1.txt, 1.txt文件可以放木马文件

<?php

@eval($_POST['a']);

echo "123"; #1.txt内容

?>

这段代码是一句话木马,用于远程执行 PHP 命令

在创建一个readme.php,用于读写生成的内容

<?php

header('Content-Type: text/html; charset=utf-8');

echo "该目录是上传文件保存,该文件为系统说明文件,请勿删除!";

?>

先上传.user.ini (没有任何反应) -->再上传1.txt(也没反应),验证一下,打开readme.php文件。发现读写了.user.ini文件并且包含了1.txt的内容

大小写绕过

由于 Windows 对文件名大小写不敏感,后台黑名单仅以小写形式拦截 .php 时,只需把后缀改为大写 .PHP 即可骗过校验、顺利落地文件;服务器依旧按 PHP 脚本解析,一举实现 WebShell 上传与执行。

空格绕过

Windows 会自动忽略文件名末尾的空格,但 PHP 黑名单检测不会;于是在 .php 后加个空格写成 shell.php 即可躲过校验、成功保存,系统仍按 PHP 解析执行。

加空格forward过去

末尾单点绕过

Windows 会丢弃文件名结尾的"点",但 PHP 只删一次点且不再循环 trim;把 Shell 命名成 shell.php. 即可让黑名单判定为 .(不在列表)而放行,落盘时系统自动去掉末尾点,最终生成 shell.php 并被解析。

ADS 特殊流绕过

NTFS 允许用"文件名::DATA"访问备用数据流,上传'test.php::DATA时 Windows 实际写入的是test.php,PHP 因 str_ireplace('::$DATA','')仅把字符串删掉而保留.php`,文件既保存成功又能被当成 PHP 执行,从而绕过对主数据流的黑名单检查。

原理:Windows 系统下,若上传文件名为 test.php:$DATA,服务器会生成一个 test.php 文件,内容与上传文件相同,并可被解析执行。

用notepad查看2.txt的数据流

生成一个3.php,服务器只生成一个 3.php 文件

发送回去,新标签打开去掉后面的::$DATA,能看到解析出来了,蚁剑连接也能成功

字节标识绕过

  • JPEG/JFIF0xFF 0xD8

  • PNG0x89 0x50

  • GIF0x47 0x49

  • BMP0x42 0x4D

服务器靠"文件头魔数"判断上传内容是否为真实图片,但只验头几个字节 ,后面数据不再检查。攻击者把 PHP 一句话附在合法图片头之后,形成"图马"------前端通过头字节检验,后端保存为 .jpg;再借助解析漏洞(Apache 多后缀、文件包含、.user.ini 等)让服务器把图片当成 PHP 执行,从而拿到 WebShell

保存为后缀为.php的文件上传到upload14关

图片二次渲染

在上传后重新压缩/绘制图像,使原始内容(包括一句话木马)被丢弃,只有重新把 PHP 代码插入到 经渲染后仍保持不变的位置(如 JPEG 注释段、PNG IDAT 压缩数据或 GIF 帧调色板)才能绕过检查并保留执行点。

比较两张图片的格式,可以看到很多都被重写了,在匹配这里插入一句木马,绕过就可以上传

相关推荐
BingoGo15 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack15 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理4 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
QQ5110082854 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe4 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5