文件传输漏洞服务器,任意文件上传漏洞

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

题目分析

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

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

尝试上传

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

5dde89abb4be2.png

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

5dde89acaadb6.png

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

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

5dde89ad55e33.png

5dde89ae580cc.png

从图中可以看到,服务器返回了文件的存放位置,因此,我们这里就用到了 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,然后得到服务器的路径信息如下:

5dde89b006264.png

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

system("pwd");

?>

system("ls ../");

?>

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

?>

5dde89b15eb3b.png

前端校验

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

绕过限制啦。

5dde89b1ed81e.png

两道题的结合

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

5dde89b2850ff.png

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

头文件欺骗

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

5dde89b320cd2.png

总结

emmmm,总结起来,这次的 CTF 让我学到了以下几个方面吧

Nginx 解析漏洞的条件,版本是有限制的

关于 php 代码的编写

文件的头文件欺骗

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值