5.上传绕过



题目名字和提示都说的很明确,这题是一道上传绕过的题目,点开题目链接,可以看到一个文件上传的界面:

这里可以尝试随便上传一些文件,看看效果:

先尝试上传一个jpg文件:

上传jpg文件的提示为必须上传后缀名为php的文件才行,那么我们再上传一个php文件:

上传的结果是告诉我们仅支持jpg,gif,png后缀的文件。

仅支持上传jpg,gif,png后缀的文件,但是上传后又会提示必须上传后缀名为php的文件才行。

那么现在这个问题该怎么去解决呢,目前有一个思路就是我们上传一个jpg,gif,png后缀的文件但是我们的服务器认为这个文件是后缀名为php的文件。

怎么起实现这个思路呢,这里我们可以用到0x00截断上传的方法。那么什么是0x00截断上传呢?首先说一下这个截断上传的思路:在我们进行文件上传的时候,当文件系统读到【0x00】时,会认为文件已经结束。利用00截断就是利用程序员在写程序时对文件的上传路径过滤不严格,产生0x00上传截断漏洞。具体怎么实现呢?

首先,我们就要使用Burpsuite工具,

然后,我们上传a.jpg文件,里面啥也没有,其实有没有内容都无所谓的,我们的目的是上传上去而已。这里进行上传的同时,用Burp Suite拦截上传请求:

仔细观察这个上传的Post请求,这里我们可以看到Content-Disposition这个信息,上传路径是"/uploads/",文件名是"1.jpg",我们先发送到Repeater,现在我们可以对这个请求进行修改,那么我们需要修改哪些地方呢?因为实际上上传的最终地址就是dir + filename,所以我们可以先对这个路径进行修改,我们在dir上加上一个a.php,这样上传的路径就变为了/uploads/a.php,但是这样我们最终的上传地址就变成了/uploads/a.phpa.jpg,如果就这样上传的话,实际上服务器还是将我们上传的文件作为jpg文件处理,我们需要做的就是再次对这个路径进行修改,使得最终的路径让我们的服务器认为我们上传的是php文件

(注:这道题的做法是对路径的修改再00截断,让服务器误判为我们上传的文件是php文件,这样就躲过了后台脚本的检测,特别注意的是我们并没有上传真正的php文件,也没让一句话木马与jpg图片结合,从而让菜刀连接,这里只是提供了一个欺骗服务器的方法而已,要想00截断然后菜刀连接服务器请在本文最底下点击链接,看另外一篇博客)

(注:查看网页源代码我们也能看到题目暗示的上传路径:

这里我们就可以开始进行0x00截断的方法,首先我们再次对dir进行修改,在后面随便加一个字符,比如加个+,这里随便加什么都好,我们只是为了让这个字符占一个字符的位置:

点击Hex,将+修改为00,将这个字符修改为00(0x00的意思就是16进制下的00),这样就形成了%00截断:

(注:将+修改为%00之前,保存路径是/uploads/a.php+a.jpg)

修改后文件保存路径变成了/uploads/a.php%00a.jpg,也就是/uploads/a.php

在服务器中检测后缀名时,%00后面的字符并不会被检测,成功绕过了服务器端的后缀检测。
点击go,即可得到flag:



当然我们也可以直接提交xx.php.jpg文件,让filename=xx.php.jpg 这样我们依然可以利用00截断来做,不明白的可以参考 利用00截断上传webshell