就是记录下这次的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 任意文件上传 任意文件上传漏洞》对你有帮助,请点赞、收藏,并留下你的观点哦!