WHU文件上传

知识点

用伪协议读源代码、phar 反序列化

11.png

题目打开就是这样的,首先猜测是上传,然后我一开始上传了jpg png 图片,都说存在危险代码。有点懵逼,然后试了一下gif,但又说文件太大了,所以到这里,估计是对文件内容和大小都进行了过滤。于是自己用winhex伪造了一个.gif文件,发现上传成功。

然后来到view.php:

12.png

然后我访问了一下这个文件上传的目录:

13.png

尝试了一下,没有可以利用的地方。然后进行到这一步,就有点没头绪了。

后来因为前几天刚做了一个文件上传的题目,是利用到phar反序列化的。但是就算是考察phar反序列化,没有源代码怎么构造呢?所以我的思路转到了如何读取upload.php和 view.php的源代码。然后就是进行抓包,找可利用的参数,最后找到acti0n:

但是给ban了,所以我更加笃定这里肯定存在利用点。想办法绕过去,这里我试了很久,最后试出来把base改为Base就可以绕过:

然后读到了upload.php和view.php的代码:

14.png

15.png

upload这里基本上就是一些过滤,白名单、文件类型、文件大小等,我们通过看到没有过滤.phar文件,可以更加笃定可以利用phar反序列化。不过这里就算过滤了.phar后缀 我们也可以利用 phar反序列化。

我们再来看看view.php的代码:

16.png

17.png

18.png

大致浏览一下,可以看到destruct()那里 可以执行eval(),所以这里是我们的利用点。

到这里基本上就没有难度了,只有一个构造函数、析构函数来利用,没有很长的pop链,直接就是一层关系。

但是注意upload.php那里,过滤了很多函数:

19.png

可以发现 system exec都给过滤了。但是我们的目的是读flag.php,所以这里我们用到 show_source()函数来显示flag.php的源代码

所以最终的构造:

20.png

然后我们上传生成的.phar文件:

21.png

发现成功上传,这里就到了最后一步,利用phar:// 协议来读取.phar文件,从而触发反序列化。我们注意到view.php存在这个代码:

22.png

然后看一下 delete_img()函数:

23.png

利用phar伪协议和这里的file_exists() 、 unlink() 都可以触发反序列化。

所以最后在delete参数这里利用phar伪协议来读:

24.png

到这里就结束了。