Uploads-labs 文件上传详细wp (一)
谨以此记录学习历程,同时希望能帮助到你们。
文件上传:
第一关 JS前端绕过
1. 前端验证
前端验证的概念是与后端验证所区分而来,所谓前端文件验证,即是在文件正式开始上传
之前,利如利用 javascript 脚本,对文件进行白名单或黑名单过滤,符合规则即可以向服
务器上传,不符合则拒绝上传。
2. 后端验证
后端即是服务器,当文件上传到服务器之后,再进行校验匹配文件是否符合规则,符合则
保留,不符合就删除。
JavaScript就是一种前端语言
这关利用JavaScript做了一个前端的上传文件的限制函数
function checkFile();
主要是允许JPG,PNG,GIF格式的文件上传
//定义允许上传的文件类型
var allow_ext = ".jpg|.png|.gif";
------绕过方法:
方法1. 可以禁用JS
在火狐浏览器中下载Disable Javascript插件就可以,路径也放进去了。使用的时候,只要在火狐右上角的插件栏点击这个按钮,变成这样
就禁用JavaScript了。然后上传文件就不受限制了。
方法2. 修改JavaScript代码
火狐浏览器整合了firebug,所以可以直接在控制台写一个新的checkfile()函数,增加php类型的白名单,或者直接删除checkfile()内的代码。
//定义允许上传的文件类型
var allow_ext = ".jpg|.png|.gif|.php";
上图就是修改的代码
上图就是删除函数内部代码。然后上传文件就不受限制了。
第二关 MIME绕过
媒体类型(通常称为 Multipurpose Internet Mail Extensions 或 MIME 类型 )是一种标准,用来表示文档、文件或字节流的性质和格式。
常见类型:
类型 | 描述 | 典型示例 |
---|---|---|
text | 表明文件是普通文本,理论上是人类可读 | text/plain, text/html, text/css, text/javascript |
image | 表明是某种图像。不包括视频,但是动态图(比如动态gif)也使用image类型 | image/gif, image/png, image/jpeg, image/bmp, image/webp, image/x-icon, image/vnd.microsoft.icon |
audio | 表明是某种音频文件 | audio/midi, audio/mpeg, audio/webm, audio/ogg, audio/wav |
video | 表明是某种视频文件 | video/webm, video/ogg |
application | 表明是某种二进制数据 | application/octet-stream, application/pkcs12, application/vnd.mspowerpoint, application/xhtml+xml, application/xml, application/pdf |
当文件上传时利用 MIME 类型匹配文件类型时候符合要求,符合则通过不符合再拒绝。
------绕过方法:
- 抓包修改content-Type,content-Type指定的就是上传的这个文件的MIME类型,改为网页允许上传的文件类型就可以绕过。
Content-Type: image/gif
第三关 扩展名绕过(黑名单)
黑名单禁止了上传的文件
$deny_ext = array('.asp','.aspx','.php','.jsp');
------绕过方法:
前提:apache的httpd.conf中有如下配置代码,在原来的代码里加入你想更改的php版本
AddType application/x-httpd-php .php .phtml .php5
- 更改文件名后缀直接上传就可以绕过了。
第四关 .htaccess(黑名单)
htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
htaccess详解:链接: 链接: https://blog.csdn.net/cmzhuang/article/details/53537591.
这道题几乎过滤了所有的后缀名,但是可以传Apache默认支持的 .htaccess 文件。
前提·:1.mod_rewrite模块开启。2.设置AllowOverride All
这道题几乎过滤了所有的后缀名,但是可以传Apache默认支持的 .htaccess 文件。
$deny_ext = array(".php",".php5",".php4",".php3",".php2",".php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".ini");
------绕过方法:
先写一个.htaccess文件,将如下代码放进记事本,改后缀为.htaccess就可以了。
SetHandler application/x-httpd-php
然后上传这个.htaccess文件,就可以修改文件上传的规则了。最后再上传.php文件就可以被解析执行了。
(未完待续)