文件上传漏洞原理web服务器没有对用户上传的文件做严格过滤导致用户可以上传一个可执行的脚本文件并通过该文件获得执行服务端命令的能力文件上传漏洞绕过方法具体可查看作者的upload-labs实验报告https://blog.csdn.net/Dhhdhdjshbd/article/details/162868938?spm1011.2415.3001.10575sharefrommp_manage_link前端js绕过禁用前端js也有可能影响页面正常渲染却不成功抓包修改后缀名绕过如果只是前端界面限制文件后缀名可使用BP抓包将正常的后缀名进行修改绕过抓包修改MIME类型若服务端代码是通过Content-Type的值来判断文件的类型这样我们可以直接对文件的Content-Type值进行修改来绕过。后缀名大小写绕过如果后端使用黑名单过滤后缀名且没有对后缀名进行大小写转化可更改后缀名大小写进行绕过后缀名双写绕过若后端对黑名单中的后缀名替换为空且只替换一次可将后缀名双写进行绕过等价扩展名绕过在有些ApachePHP环境中为了兼容旧版本的PHP会做特殊配置使.php2、.php3等后缀名的文件也会被当成PHP脚本来解析图片马绕过在一些要求.jpg、.png的文件上传中可制作图片马进行绕过GIF89a图片头文件欺骗在webshell前面加上GIF89a后台服务器会认为这是一个图片从而成功绕过%000x00截断旧版本的PHPPHP5.3.4以下允许字符串中存在\0、“%00”、0x00等字符串结束符当解析到这些字符时会被认为解析结束从而实现绕过::$DATA绕过在windows中会将文件名::$DATA之后的数据当成文件流处理保持::$DATA之前的文件名。假设上传的文件为test9.php::$DATA.jpg如果成功上传到服务器就会去掉::$DATA.jpg变成test9.php空格点绕过某些情况下源代码先是去除文件名前后的空格再去除文件名最后所有的.再通过strrchar函数来寻找.来确认文件名的后缀但是最后保存文件的时候没有重命名而使用的原始的文件名导致可以利用1.php. .点空格点来绕过.htaccess绕过○ .htaccess文件是Apache服务器中的一个配置文件它负责相关目录下的网页配置。通过.htaccess文件可以帮我们实现网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。○ 比如说在htaccess文件中有如下内容AddType application/x-httpd-php .png那我们随后上传png后缀图片马即可绕过.userini绕过.user.ini文件里的意思是所有的php文件都自动包含指定的文件比如说某网站限制不允许上传.php文件你便可以上传一个.user.ini再上传一个图片马包含起来进行getshell。不过前提是含有.user.ini的文件夹下需要有正常的php文件否则也不能包含了。 再比如你只是想隐藏个后门这个方式是最方便的。条件竞争绕过一些网站上传文件的逻辑是先允许上传任意文件然后检查上传的文件是否包含webshell脚本如果包含则删除该文件。这里存在的问题是文件上传成功后和删除文件之间存在一个短的时间差(因为要执行检查文件和删除文件的操作)攻击者可以利用这个短的时间差完成条件竞争的上传漏洞攻击。比如上传一个php文件里面这样写?php fputs(fopen(../shell.php,w),);?文件上传漏洞的危害上传webshell控制服务器远程执行命令修改web页面实现钓鱼挂马等操作上传挖矿木马系统病毒等占用服务器资源进行提权内网渗透永久留后门文件上传漏洞防范措施严格校验文件后缀名使用白名单对文件后缀名进行校验仅允许上传制定后缀名的文件。且不要根据客户端提交的Content-Type来确定文件类型修改上传后的文件名为随机的文件名如果使用磁盘存储上传的文件应对其名称进行重命名并使名字完全随机这样可加大攻击者遍历文件名的难度及成本及时升级web服务器程序不要使用低版本的web服务器程序关注相关漏斗及时打补丁对文件内容进行处理如果上传图片或office文档应使用对应的解析处理库载入文件处理后再导出文件以清除其中可能存在的脚本内容将数据存储在专用文件服务器上若条件允许可将上传的文件存储在专门的文件服务器上并单独设置文件服务器的域名这样既方便分离动静态资源又能避免恶意的网站文件影响当前域名