渗透测试之文件上传漏洞和任意文件下载

文件上传漏洞类型分类



如何判断上传漏洞类型?



本次实现使用的靶场系统是upload-labs      upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。


任务1:


查看下源码   只在js里添加了几个白名单 后端没有任何过滤

第一关只有前端用JavaScript过滤   先把木马的名字改为合法的后缀  再用burp抓包 修改成PHP后缀名就可以上传


任务2:


第二关检查的是文件类型   

步骤和任务一的一样

任务3:

还是先查看一下源代码


设置了黑名单 删除两边空格 

$deny_ext=array('.asp','.aspx','.php','.jsp');  这里是黑名单验证 可以试下php3 php5后缀名  但是Apache默认是不允许解析 如果运维人员修改配置文件是可以解析的

如果中间件是IIS6.0 2003服务器的话 可以利用IIS的解析漏洞绕过

直接上传名为 xx.asp:.jpg的文件    

任务4:


利用Windows的命名特性  上传xx.php:.jpg    Windows系统会自动去掉:.jpg

先把马的名字改成xx.jpg  然后利用burp抓包 修改文件名


文件上传成功了


但是文件是空的  然后再上传一遍   然后将文件名改为4.<或4.<<<或4.>>>或4.>><后再次上传,重写4.php文件内容,Webshell代码就会写入原来的4.php空文件中。


任务5:

 源代码



和之前对比没有了转换为小写

黑名单后缀名:$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");

可以直接把后缀名改成PHP或者PhP等组合绕过




由于Windows系统不区分大小写  大写PHP也可以正常当做php文件解析

任务6:

源码


过滤代码会删除文件名后面的点  但是过滤时只过滤.php  没过滤.php点

利用Windows字体文件命名特性  在xx.php后面加空格点  . 直接切掉 .  只留xx.php


任务7:


源代码

和任务6原理相同   加空格加点



任务8:

什么是数据流?

php在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名



相比之前缺少了数据流检测

可以在后面直接加::$DATA绕过



任务9:


加点加空格加点

删除掉末尾点  还有点和空格  再去空  还剩个点  Windows会自动去掉后面的点



任务10:


因为只过滤了一次php


在后面打乱一个php中间插入一个php  过滤掉完整的php后又拼出一个完整的php

任务11:


这关是白名单验证   可以使用%00截断绕过   但是PHP版本要小于5.3.4



任务12:


00截断上传



任务13:

绕过文件头检查,添加GIF图片的文件头GIF89a,绕过GIF图片检查

或者我们使用命令copy 1.jpg /b + shell.php /a

webshell.jpg,将php一句话追加到jpg图片末尾,代码不全的话,人工补充完整。形成一个包含Webshell代码的新jpg图片,然后直接上传即可。但是我们没有办法拿到shell,应为我们上传的图片马无法被解析成php形式,通常图片马配合%00或者0x00截断上传,或者配合解析漏洞

任务14:

同13

任务15:

同14

任务16:


16多出个图片二次渲染

直接找一个正常的图片  然后在里面插入webshell 不用管图片是否可以正常显示   被二次渲染后webshell还是在里面

图片插入一句话木马方式和任务13一样

任务17:

利用条件竞争删除文件时间差绕过

服务器先把文件保存  然后再检查上传的文件是否合法 不合法再进行删除

先用burp多线程上传几千个文件   再多线程访问上传的文件     文件在打开时是无法删除的

利用服务器在处理文件时的时间差 不让程序删除上传的文件

先随便上传个图片 获取文件地址

http://192.168.60.84:99/upload/upload/

图片地址   

上传木马用burp抓包


把数据包发送给测试器


先清除掉负载


上传3000个文件 没有负载标记


线程数100    快速上传让程序来不及处理就访问   访问时文件就被占用  程序再去删除就无法删除

再抓一个访问这个文件的数据包    和上图一样  访问3000次   线程100

任务18:


还是和上一关一样   快速上传几千个文件 让程序来不及重命名

然后利用Apache的解析漏洞  直接访问xx.php.7z

任务20:

双文件上传


用于欺骗



如果hatccess没有加入黑名单 可以上传.hatccess文件  文件内容为

SetHandler application/x-httpd-php

意思为任意拓展名都当做PHP脚本解析

你可能感兴趣的:(渗透测试之文件上传漏洞和任意文件下载)