文件上传漏洞之黑名单检测绕过

0x00 前言

文件上传是一个很常见的功能,文件上传漏洞也比较普遍,原理简单,造成的危害却很大,是一个入门级别的漏洞。这篇文章主要针对文件上传漏洞中的 黑名单检测绕过 这个点,结合upload-labs,做一个较为全面的总结。

upload-labs

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

黑名单思想

利用黑名单的思想来防御文件上传漏洞是一种很常见的做法,比如upload-labs的第三关

但是黑名单思想很难把所有可能引发漏洞的威胁给过滤掉,而且随着时代发展还有可能有新的攻击方式产生,所以黑名单思想是一种不够安全的思想。

Secure By Default 原则

在设计安全方案时,最基本也就是最重要的原则就是“Secure by Default” 。在做任何安全设计时,都要牢牢记住这个原则。一个方案设计得是否足够安全,与有没有应用这个原则有很大的关系。实际上,“Secure by Default” 原则,也可归纳为白名单、黑名单的思想。如果更多地使用白名单,那么系统会变得更安全。
                     ——《白帽子讲Web安全》

0x01 换用文件后缀(Pass-03)

能被Web容器解析的文件后缀(简单来说就是能被当做php文件来执行),除了我们最常见的 .php以外还有很多,比如php1、php2、php3、php4、php5、phtml。

upload-labs 第3关为例:

本pass禁止上传.asp|.aspx|.php|.jsp后缀文件!可以看到这关禁用了4种文件,但是这是远远不够的......

可以看看 upload-labs 第4关,体会一下这两关的区别:

所以思路就很明确了,我们先创建一个文件,取名为phpinfo.php3(php1、php2、php3、php4、php5、phtml),内容如下:

把这个文件上传,然后查看图像

可以看到我们上传的文件成功被当成php文件来解析,文件内容被成功执行

当然,如果文件内容是一句话木马,我们就可以成功地利用工具连接、控制目标网站。操作也比较简单,这里就不演示了。

0x02 .htaccess文件的利用(Pass-04)

.htaccess文件

htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。仅限于Apache服务器

简单来说,我们如果上传了 .htaccess 这样一个配置文件到了upload目录里,那么这个文件里的一些可以人为操作的指令就可以控制upload这个目录以及子目录的一些功能。

第4关和第3关的相比之下禁用了更多的后缀名,真是让人头疼,这时候我们灵光一闪,想到了.htaccess文件的利用,然后我们上传一个以下内容的.htaccess文件。它的作用是 让这个文件所在的目录里的所有文件都以php来解析

.htaccess

这时再上传一个内容为 的文件,文件名为 phpinfo.jpg,这时的文件名后缀就不用那么讲究了,就算是phpinfo.xxx 也是可行的,结果被成功执行。

0x03 大写绕过(Pass-05)

这关相比上一关增加了禁止 .htaccess 文件的上传

但是我们还有一个简单的小思路,那就是利用其过滤的不严谨性,没有顾及到后缀的大小写检测,以及windows对大小写不敏感,从而简单的绕过

上传一个文件名为 phpinfo.PHP的文件,内容为 ,结果被成功执行。

0x04 加空格绕过(Pass-06)

查看本关的源码可以看到没有对文件后缀进行去空操作

所以可以利用 BurpSuite 截断 给文件名 phpinfo.php 尾部加一个空格后,将绕过服务器端的检测

访问

0x05 加点绕过(Pass-07)

利用 BurpSuite 截断 给文件名 phpinfo.php 尾部加一个点后,可以绕过服务器端的检测

根据windows的特性,会自动去除文件尾部的点,从而让文件被web容器解析执行

0x06 ::$DATA绕过(Pass-08)

根据ntfs文件系统的特性,可以在后缀中加::$DATA绕过

查看图片发现禁止访问,原因我也说不上来。 ps:关于::$DATA绕过我还不是很懂,要是有dalao看到希望能教教我。

然后把URL框的::$DATA去掉就可以以php的形式解析执行了。

0x07 点空点绕过(Pass-09)

可以看一下这一关的源码,把之前讲的绕过方式都给禁用了

这时候我们给后缀加点加空再加点,去了一个点和去空之后就和前面加点绕过效果一样了

文件被成功解析执行:

0x08 双写绕过(Pass-10)

这关把所有和黑名单匹配的后缀名都替换为空,但是只替换一次,源码如下

遇到这种情况我们可以双写后缀来上传一个php文件,比如文件名为phpinfo.pphphp即可成功上传,最后访问的是info.php文件,文件内容成功被web容器解析

0x09 总结与心得

文件上传之黑名单检测绕过这个点就说完了,欢迎纠错、补充。当然,这只是文件上传漏洞非常小的一部分,文件上传漏洞还有很多姿势等着我去学习。一开始我用的是 buuupload-labs,但是可能是环境问题(那里的php版本是7点多的,官方建议的是5.2.17),导致一些关卡也存在问题。所以推荐大家自己动手搭一个环境,下载一个集成环境,只要7.7M,非常方便 https://github.com/c0ny1/upload-labs

你可能感兴趣的:(文件上传漏洞之黑名单检测绕过)