前言:
如今看官们对“php判断上传文件类型”大体比较看重,小伙伴们都需要学习一些“php判断上传文件类型”的相关知识。那么小编同时在网上搜集了一些有关“php判断上传文件类型””的相关文章,希望同学们能喜欢,看官们快快来了解一下吧!比较常见类型漏洞讲解(一)
这里继续介绍比较容易找到的不同类型的漏洞。
演示准备
目标主机:Metasploitable2
攻击目标:目标主机的dvwa系统
攻击机:Kali
文件上传
以前文件上传这类漏洞是非常经典的,经常会被人利用上传病毒。
文件上传其实是比较普遍的功能,但是以前后端开发对于安全这块没有很强的预防意识,所以对于上传上来的文件没有做很全面的检测判断,导致以前有很多文件上传类型的漏洞可以利用。
可以先试一下上传正常图片,默认对于文件大小有限制,不能传太大的文件:
可以通过访问指定地址看到上传的图片:
文件上传-low
将安全级别调整到low,我们来演示怎么利用文件上传这种类型的漏洞。
先来准备一个可执行的php文件,因为目标系统后端是用php写的,所以这里使用php文件,在实际渗透过程中,可以根据后端具体可执行哪些类型的文件,来决定将什么类型的文件进行上传。
文件里代码的意思是获取cmd变量名的内容,传递给shell_exec方法作为入参,执行完shell_exec方法后,用echo方法将结果显示到页面。
将文件上传给目标系统:
然后访问上传后的文件,并在地址后面加上参数cmd:
看一下后端的逻辑:
可以看到后端没有对上传的文件做任何校验判断,只要上传成功了就提示文件位置。
在这个级别遇到需要上传的文件大小超过了允许大小,先别急着给文件瘦身,可以抓包看一下这个文件大小是哪里设定的:
通过抓包结果可以看到前端参数规定了文件大小。将这个参数修改的比上传文件还大后,将请求释放,就能上传成功:
这样就绕过了前端控制的上传文件大小限制。
文件上传-medium
将安全等级调整到medium,再次尝试通过抓包改参数上传超过规定大小的文件,会发现无法成功:
看一下源码:
可以看到这个安全级别时,后端对于文件格式和大小做了判断,且大小的判断不在依然前端请求中的参数,而是写死在了后端代码里。但是文件格式的判断依据,还是来源于前端请求的参数。随便提一下kali提供了一个minetype可以查看文件类型:
正常操作上传文件,的确是无法将可执行文件上传到靶机了。但是通过抓包,可以将文件格式的参数进行修改:
将这个application/x-php修改成image/jpeg,就又可以上传成功:
然后就可以通过访问这个可执行文件执行shell命令了。
文件上传-high
将安全等级调整到high,再次通过前面的抓包改Content-Type的值进行上传,发现失败了。先看一下源码:
可以看到这次文件类型的判断是通过文件名的后缀为依据的。但是这个文件名也是请求传入的,也是可以修改的,比如这样:
修改后释放请求,上传成功:
还是可以通过访问上传文件执行指定的命令:
就算是high安全级别,上传文件功能还是可以用来上传可执行文件的。当然这个靶机不能代表行业现状,只能说明上传文件的确是非常容易被利用的漏洞类型。
现在很多都是直接使用文件内容中的前面几位字符判断类型的,可以看到文件内容的前几位是代表了文件类型的:
将内容进行修改:
修改文件名是为了让后端系统认为这是个可执行文件,文件内容是一个前面使用的执行代码。释放请求后,上传成功:
然后又可以愉快地访问上传后的文件了:
总结
文件上传是比较容易被入侵的功能,上传文件的过滤方式有很多,绕过过滤的方式也很丰富,做渗透的时候对于文件上传可以多分析分析。但是webshell上传成功了,有时候也不代表就能够去执行特定命令了,因为后端安全防护做得好,会将用来绕过过滤的那些文件后缀名解析成不可执行文件,或者直接将上传文件的目录删除可执行权限。
标签: #php判断上传文件类型