php 任意文件上传,任意文件上传漏洞

就是记录下这次的ctf过程,总的来说,亮点不在题目,而是两道题的结合。

题目分析

按照出题的思路,大致就是要我们上传一些可执行的代码,然后找出服务器上的flag文件。因此,我们这次的题目就很简单了,只需要我们绕过上传限制,并且能访问到

自己的上传的脚本就好了呀。

尝试上传

首先,我们访问ip地址是122的靶机,其界面如下:

我们先尝试将自己写好的php脚本上传,看下服务器的返回提示:

它提示我们只能上传jpg格式的文件,同时,我们也可以看出,该服务器为Nginx的,因此,我们可以利用Nginx的解析漏洞,来完成这次执行。我们直接将下图中,

1.php文件名称改为1.jpg,然后提交就可以了,看下服务器返回信息。

从图中可以看到,服务器返回了文件的存放位置,因此,我们这里就用到了Nginx的解析漏洞。

Nginx解析漏洞原理

大致原理就是,当服务器中设置了“cgi.fix_pathinfo=1”的时候,php就会以“/”作为分隔符,从最右边一个文件开始向左找去执行,因此,假设我们

上传了http://x.x.x.x/webshell.jpg

那么我们通过伪造一个不存在的文件去访问,例如http://x.x.x.x/webshell.jpg/a.php

如果服务器找不到a.php,那么就会去尝试执行a.php前面的webshell.jpg文件,因为该文件存在,所以其中的php代码会被服务器所执行。当然这里要注意漏洞的利用版本

为nginx 0.5.*

nginx 0.6.*

nginx 0.7<=0.7.65

nginx 0.8<=0.8.37

利用漏洞

因此,我们根据服务返回的文件存储路径信息,直接访问/upload/1529515750.jpg/a.php,然后得到服务器的路径信息如下:

到了这里,利用漏洞的过程已经出来了,我们只需要修改php文件代码就可以了,php的代码分别如下,通过这里的代码,我们可以找到服务器中的flag信息。

system("pwd");

?>

system("ls ../");

?>

system("cat ../flag.php");

?>

前端校验

接下来是访问123的靶机,我们其实可以很容易地看出,这是一个简单的前端校验,只需要上传的时候将后缀名改成jpg,然后通过burpsuite抓包,再将其改成php就可以

绕过限制啦。

两道题的结合

拿到了这两个flag后,就会发现,两个flag拼接在一起,就会是一段,base64加密的字符串,我们将其解密,得到如下:

因此我们发现了另一道题的ip地址,哈哈哈哈。

头文件欺骗

第三道题就用到了头文件的欺骗,利用过程都一样,这里就不重复叙述了,其实是写到这里我有点不想写了,…….

总结

emmmm,总结起来,这次的CTF让我学到了以下几个方面吧Nginx解析漏洞的条件,版本是有限制的

关于php代码的编写

文件的头文件欺骗emmmm,前天赌球,压了十块钱比利时2:0英格兰,结果赢了,翻了12倍,啊哈哈哈,简直美滋滋,第一次赌球。。。然后昨天的世界杯决赛,并没有押中,看着大家的

4:2,翻了18倍,简直羡慕,不过,权当娱乐,啊哈哈哈哈。

你可能感兴趣的:(php,任意文件上传)