upload-labs_writup

Pass-01

本题是前端JS的验证,对于前端的验证,是不存在安全的,它只能避免用户的错误上传,但并不能保证安全。

由于本题只能上传图片,所以先将 php 文件的后缀改为 jpg ,然后抓包,更改文件后缀为 php ,这样就绕过了前端的检测,然后上传到服务器时,依然解析为 php

Pass-02

本题是后端的验证,由服务器端根据 MIME 类型来判断上传的文件是否合法。由于 content-type 的内容可以被轻易更改,所以安全性也不高。

MIME是描述消息内容的一项标准,其实就是用来描述文件的类型的,在 http 中用 content-type 字段来标识,在 php 中可以用 $_FILES[‘upload_file’][‘type’] 来获得上传文件的类型

常见 MIME 类型

序号 内容类型 文件扩展名 描述
1 application/msword doc Microsoft Word
2 application/octet-stream bin dms lha lzh exe class 可执行程序
3 application/pdf pdf Adobe Acrobat
4 application/postscript ai eps ps PostScript
5 appication/powerpoint ppt Microsoft Powerpoint
6 appication/rtf rtf rtf 格式
7 appication/x-compress z unix 压缩文件
8 application/x-gzip gz gzip
9 application/x-gtar gtar tar 文档 (gnu 格式 )
10 application/x-shockwave-flash swf MacroMedia Flash
11 application/x-tar tar tar(4.3BSD)
12 application/zip zip winzip
13 audio/basic au snd sun/next 声音文件
14 audio/mpeg mpeg mp2 Mpeg 声音文件
15 audio/x-aiff mid midi rmf Midi 格式
16 audio/x-pn-realaudio ram ra Real Audio 声音
17 audio/x-pn-realaudio-plugin rpm Real Audio 插件
18 audio/x-wav wav Microsoft Windows 声音
19 image/cgm cgm 计算机图形元文件
20 image/gif gif COMPUSERVE GIF 图像
21 image/jpeg jpeg jpg jpe JPEG 图像
22 image/png png PNG 图像

这关因为上传文件会在服务器端验证 content-type 字段,来确定是否为图像文件,所以只需要抓包更改 content-type 字段为图像类型即可

此题只需要将 content-type 字段内容更改为图像类型,即可上传任意类型的文件

Pass-03

后缀黑名单验证:列出一些后缀名,与上传的文件的后缀名进行对比,如果上传文件的后缀名与列表中的相同则禁止上传,此验证是服务器端的验证。后缀黑名单验证的安全性较前两者高一些,但是因为总会有些漏网之鱼不在黑名单中,所以依然存在安全问题

method 1

当上次的文件没有被重命名,依然保持上传的名字时,可用这种方法绕过。以 pass-2 为例子,演示下此种方法。因为 pass-3 上传的文件用时间和随机数进行了重命名并没有保持原来的名字。

用 burp 抓包,更改上次文件的名字为 phpinfo.php:jpg

上传完毕后,会得到一个内容为空的 phpinfo.php 文件

再次上次相同文件,抓包,更改上传文件的名字为 phpinfo.<<<

这样就上传了我们想要上传的内容

参考:https://www.waitalone.cn/php-windows-upload.html

method 2

现在来讲下这题的绕过方法,这里可以运用 Apache 的解析漏洞将上传文件的后缀名更改为 .php3 .php5 .phtml 之类的。

解析漏洞不是所有的情况都存在,以 module 方式使 apache 与 php 结合且设置Apache配置文件中的 AddType application/x-httpd-php [上述后缀] 才会存在此漏洞,以 fastcgi 方式将 apache 与 php 的结合不存在此漏洞。因为之前不知道这个原因,弄了很久也没能复现这个漏洞。

参考:http://www.91ri.org/7789.html

Pass-04

本题同为后缀黑名单过滤,绕过方法为上传 .htaccess 文件

由于本题没有过滤 .htaccess 文件,所以可以上传 .htaccess 文件来使该目录下的所有符合 php 语法规范的文件以 php 进行解析,若不符合 php 语法规范,则按 txt 文件输出

若要使 .htaccess 文件有效,需要设置 Apache 配置文件

将此处设置为 All

.htacess 文件内容为

然后将 php 内容的文件存储为图片格式上传,然后在访问上传文件既可以 php 方式解析

Pass-05

后缀黑名单:大小写绕过
在 window 下,window 对大小写不敏感,Linux 是对大小写敏感的

所以此题可以通过将后缀更改为 .PhP .phP 等来上传 webshell ,在黑盒测试中,不知道具体过滤了哪些后缀,可以通过 burp 抓包来爆破后缀名