客户端校验:一般是在网页上写一段Js脚本,用Js去检测,校验上传文件的后缀名,有白名单也有黑名单。
判断方式:在浏览加载文件,但还未点击上传按钮时便弹出对话框,可以通过抓包来判断,如果弹出不准上传,但是没有抓到数据包,那么就是前端验证
前端验证非常不可靠,传正常文件改数据包就可以绕过,甚至关闭JS都可以尝试绕过
黑白名单机制:
黑名单:不允许上传什么
白名单:只允许上传什么
白名单比黑名单更安全
服务端检测几个常见的手段:
检查Content-Type (内容类型)
检查后缀 (检查后缀是主流)
检查文件头
图片马
图片马可以绕过Content-Type (内容类型)和文件头检测
图片马的制作很简单,写一个一句话木马放在txt文件然后找一张你喜欢的图片(注意文件大小,越小越好)
然后打开cmd copy a.jpg/b + 1.txt 123.jpg (将a.jpg和1.txt 合并为123.jpg (注:这个是效果))
三、靶场大闯关Pass-01:前端检测
文件类型,将一句话木马保存成1.jpg格式,选择1.jpg文件,用burp拦截数据包,讲文件类型改成php
Pass-02:Content-Type方式绕过
此题为后端检测,上传1.php文件用burp拦截请求,将Content-Type改成image/jpeg
Pass-03:黑名单绕过
由于没有过滤不严谨,.php3,.php4,.php5,.phtml 都是会被解析为php的,可以直接上传php3文件
Pass-04:.htaccess文件绕过
.htaccess文件也被成为分布式配置文件,提供了针对目录改变配置的方法,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。
先上传含一句话木马的1.jpg,在上传.htaccess文件使1.jpg文件按照php解析(新建1.txt 内容为AddType application/x-httpd-php .jpg ,用命令行将重命名ren 1.txt .htaccess)
Pass-05:大小写绕过
$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".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",".htaccess");
WEB容器除非非常老的版本,不然都不区分大小写
将文件命名成1.PHp就可以上传
Pass-06:文件后缀(空)绕过
在文件名后面留一个空格,然后上传上去后空格会被自动的省略,但是看源码可知道,源码中黑名单中没有过滤空值,那么php和php ,当然是不一样的
将文件命名成"1.php " 就可以上传,windows的需要burp修改数据包
Pass-07: 文件后缀(点)绕过
windows有一个特性,会自动去掉后缀名最后的
将文件命名成1.php.就可以上传,windows的需要burp修改数据包
Pass-08: ::$DATA(Windows文件流绕过)