文件上传的复习(upload-labs1-5关)

发布于:2024-04-24 ⋅ 阅读:(27) ⋅ 点赞:(0)

什么是文件上传漏洞?

文件上传本身是一个正常的业务需求,对于网站来说,很多时候也确实需要用户将文件上传到服务器,比如:上传图片,资料。

文件上传漏洞不仅涉及上传漏洞这个行为,还涉及文件上传后的进一步解析和处理,以及文件的下载,如果服务器的处理逻辑设计的不够全面,就会导致严重的后果

最简单的文件上传漏洞是指用户上传了一个可执行的脚本文件,并且根据此脚本获得了执行服务器命令的能力。

旧版本的PHP(< PHP 5.3.4以下)还存在"\0" 字符阶段的问题,C语言以"\0"作为字符串结束符,而PHP用专门的结构体来表示字符串,结构体中存储了字符串的长度,所以PHP中的字符串允许存在"\0"字符,如果攻击者上传了一个"1.php\0.jpg"文件,PHP校验时可以通过后缀名的白名单,到那时底层的C语言库在写入文件时,将 "\0" 作为字符串结束符,实际上写入的是名为 "1.php"的文件,如果该文件被放在了公开的目录中,就相当于攻击者上传了一个webshell

注:3,4,5关我是使用phpstudy2018版本完成的,因为最新版本的无法解析我上传的文件

Pass-01(JS前端验证)

源码中提示只能上传 jpg,png,gif文件

按照题目的要求,我们上传一个图片,然后访问它的url

但是发现上传失败

这里我们就无法直接上传php文件了,查看代码后发现,只是在前端页面对输入的文件进行检查,因此可以使用下面两种方式来进行绕过上传php文件

接下来就禁用js,在上传页面 按F12,然后找到调试器,在设置中禁用js

禁用js以后再上传我们要上传的文件,就会发现上传成功

查看:右键我们上传成功的文件,复制链接,然后直接在网址栏中访问

这样就发现已经上传成功了

Pass-02(MIME验证)

查看源码,我们需要把文件类型修改为:image/jpeg

上传php文件,但是发现上传失败

上传一个png文件,发现上传成功了

接下来抓包,修改文件类型

修改之后放包,然后访问url

发现已经上传成功了

文件木马:<?php phpinfo(); ?>

Pass-03(黑名单验证,特殊后缀)

直接上传php文件,发现给出了黑名单

查看代码, 可以看到,这里对后缀为.asp .aspx .php .jsp都进行了拒绝,并且对文件中的特殊字符进行了很多的过滤,使用了很多名单的方式进行了校验,那么我们就可以上传一些没有限制的后缀,例如php3 php4 php5 phtml的文件进行上传就可以了

但是发现页面无法打开

这里去看了别人的wp,要用phpstudy2018版本的

下载好2018版本后按照下面的更改:

31. phpstudy无法解析php2、php3、phtml等文件_小皮不解析php3文件后缀-CSDN博客

记录BUG—在uploadlabs第三关中—关于phpstudy中修改httpd.conf依旧无法解析.php3d等问题_upload-labs无法解析php3-CSDN博客

如果上传的是phpinfo.php文件就会回显这个页面则为正常(如果一直解析不成功的话尝试换一下phpstudy的版本)

 

Pass-04(.htaccess绕过黑名单)

查看代码发现这一关的黑名单更多,那么就尝试用到.htaccess文件的方法了

具体的操作步骤:

先上传.htaccess文件,然后上传一个.png文件(因为我这里.htaccess里面解析的是.png文件)

.htaccess文件中的内容:

<FilesMatch "3.png">
    SetHandler application/x-httpd-php
</FilesMatch>

注释:“3.png”可以换成你自己想要上传的符合题目要求的文件名称,只要你下一步上传相应的文件就可以了

得到这个页面就说明上传成功了

原理为:利用上传到服务器上的.htaccess文件修改当前目录下的解析规则

.htaccess常见配法有以下几种:

AddHandler php5-script .jpg

AddType application/x-httpd-php .jpg

SetHandler application/x-httpd-php

Sethandler 将该目录及子目录的所有文件均映射为php文件类型。
Addhandler 使用 php5-script 处理器来解析所匹配到的文件。
AddType 将特定扩展名文件映射为php文件类型。

.htaccess文件内容如下:

<FilesMatch "1.jpg(你要上传的文件名称)">
SetHandler application/x-httpd-php
</FilesMatch>

Pass-05

查看代码,发现和第四关对比,这关没有转换大小写的代码

这样我们就可以上传大小写混合的后缀名来进行绕过。上传一个2005.Php文件

但是上传之后发现并没有成功

又去查找了其他的方法:

upload-labs关卡5(点和空格绕过)通关思路_upload-labs第五关-CSDN博客

上传2005.php文件,然后抓包,将2005.php改为2005.php. .(这里是点+空格+点)然后上传。

 原理:通过源代码可知,本关对上传文件做了检测,而且还对文件名大小写做了转换。在上传文件后先是删除文件末尾的点,然后首尾去空,去除字符串::$DATA,但是这些操作只执行一次。所以我们可以抓取数据包来修改绕过。我们在数据包中把后缀名改为.php. .,首先他发现有一个点,这时会把他去掉,又发现有一个空格,也会把它去掉,我们这时还有一个点,也就是.php. 由于他只是验证一次,所以不会在去掉我们的点。这样我们上传的文件就变成了.php文件,自然就成功上传了

然后去访问url发现就上传成功了