您的位置 首页 php

比较常见类型漏洞讲解(二):文件上传

这里继续介绍比较容易找到的不同类型的漏洞。

演示准备

目标主机:Metasploitable2

攻击目标:目标主机的dvwa系统

攻击机: kali

文件上传

以前文件上传这类漏洞是非常经典的,经常会被人利用上传病毒。

文件上传其实是比较普遍的功能,但是以前后端开发对于安全这块没有很强的预防意识,所以对于上传上来的文件没有做很全面的检测判断,导致以前有很多文件上传类型的漏洞可以利用。

文件上传入口

可以先试一下上传正常图片,默认对于文件大小有限制,不能传太大的文件:

上传成功

可以通过访问指定地址看到上传的图片:

查看上传后的图片

文件上传-low

将安全级别调整到low,我们来演示怎么利用文件上传这种类型的漏洞。

先来准备一个可执行的php文件,因为目标系统后端是用php写的,所以这里使用php文件,在实际渗透过程中,可以根据后端具体可执行哪些类型的文件,来决定将什么类型的文件进行上传。

文件里代码的意思是获取cmd变量名的内容,传递给 shell _exec方法作为入参,执行完shell_exec方法后,用 echo 方法将结果显示到页面。

将文件上传给目标系统:

上传成功

然后访问上传后的文件,并在地址后面加上参数cmd:

获取执行结果

看一下后端的逻辑:

后端逻辑

可以看到后端没有对上传的文件做任何校验判断,只要上传成功了就提示文件位置。

在这个级别遇到需要上传的文件大小超过了允许大小,先别急着给文件瘦身,可以 抓包 看一下这个文件大小是哪里设定的:

文件最大允许值

通过抓包结果可以看到前端参数规定了文件大小。将这个参数修改的比上传文件还大后,将请求释放,就能上传成功:

上传成功

这样就绕过了前端控制的上传文件大小限制。

文件上传-medium

将安全等级调整到medium,再次尝试通过抓包改参数上传超过规定大小的文件,会发现无法成功:

上传失败

看一下源码:

上传文件源码

可以看到这个安全级别时,后端对于文件格式和大小做了判断,且大小的判断不在依然前端请求中的参数,而是写死在了后端代码里。但是文件格式的判断依据,还是来源于前端请求的参数。随便提一下kali提供了一个minetype可以查看文件类型:

mimetype 1.php

正常操作上传文件,的确是无法将 可执行文件 上传到靶机了。但是通过抓包,可以将文件格式的参数进行修改:

请求中文件格式的参数

将这个application/x-php修改成image/jpeg,就又可以上传成功:

上传成功

然后就可以通过访问这个可执行文件执行shell命令了。

文件上传-high

将安全等级调整到high,再次通过前面的抓包改 Content-Type 的值进行上传,发现失败了。先看一下源码:

上传文件源码

可以看到这次文件类型的判断是通过文件名的后缀为依据的。但是这个文件名也是请求传入的,也是可以修改的,比如这样:

修改文件名

修改后释放请求,上传成功:

上传成功

还是可以通过访问上传文件执行指定的命令:

执行特定命令

就算是high安全级别,上传文件功能还是可以用来上传可执行文件的。当然这个靶机不能代表行业现状,只能说明上传文件的确是非常容易被利用的漏洞类型。

现在很多都是直接使用文件内容中的前面几位字符判断类型的,可以看到文件内容的前几位是代表了文件类型的:

代表文件类型的字符

将内容进行修改:

修改请求中的内容

修改文件名是为了让后端系统认为这是个可执行文件,文件内容是一个前面使用的执行代码。释放请求后,上传成功:

上传成功

然后又可以愉快地访问上传后的文件了:

执行特定命令

总结

文件上传是比较容易被入侵的功能,上传文件的过滤方式有很多,绕过过滤的方式也很丰富,做渗透的时候对于文件上传可以多分析分析。但是 webshell 上传成功了,有时候也不代表就能够去执行特定命令了,因为后端安全防护做得好,会将用来绕过过滤的那些文件后缀名解析成不可执行文件,或者直接将上传文件的目录删除可执行权限。

文章来源:智云一二三科技

文章标题:比较常见类型漏洞讲解(二):文件上传

文章地址:https://www.zhihuclub.com/154137.shtml

关于作者: 智云科技

热门文章

网站地图