兵者多诡(HCTF2016) 一道思路远大于操作的题

第一次看见这道题目是在null战队的《从0到1:CTFer成长之路》上,这次突然想找来做做,可能是因为年代久远,没有对应的dockerfile,环境只能用小皮搭建,索性题目考点很简单,没有php版本要求。

靶场首页

一个典型的文件上传页面,想随便传个东西试试,发现只能传png文件

挑了张png上传后,显示上传成功,url发生了变化,出现了两个参数,一个叫fp,一个叫imagekey,imagekey对应的值还是一大堆英文字母。

同时点击”点击查看“,可以看刚刚上传的文件 我因为上传的是木马,所以无法显示,从这个页面可以看到,图片保存在uploads目录下,图片名就是imagekey的值

总结一下当下的情况,可以上传文件,但后缀只能为png(比赛当时的php版本已经不支持00截断了),所以光光一个文件上传漏洞是不够用的。

为了收集更多的信息,再上传个文件,抓包。

可以看到参数?fp=upload,再迟钝也应该反应过来fp指向的应该是一个文件,upload就是upload.php,".php"大概率会在后端被强制拼接上。直接访问?fp=upload,没变化,尝试用伪协议读取

解码后发现function.php和show.php

在show.php中找到home.php,home.php中找到拼接".php"的代码

做到这里,显然,这是一道文件包含+文件上传,可惜的是文件包含被强制加上php后缀,无法直接包含刚才上传的有php代码的.png文件,但我们可以用伪协议解决这种情况,比如phar://或者zip://,这两个伪协议的语法可以看这个phar://、zip://伪协议进行shell上传_phar 写出shell-优快云博客

这两个伪协议都可以在线读取zip压缩包中的文件,最主要的是,不看后缀,也就是说,哪怕zip压缩包后缀不是zip是改成其他乱七八糟的,这两个伪协议还是会把他当成zip去执行。把有php代码的starest.png文件压缩为zip,改后缀为png,上传。

payload ?fp=zip://uploads/1a708ef32759519d70f8b2fbbc5511648ba3002b.png/%23starest(zip伪协议要注意把#url编码,不然浏览器会自动把#以及后面的内容删掉后再发包)

payload?fp=phar://uploads/1a708ef32759519d70f8b2fbbc5511648ba3002b.png/starest

其实这道题本身没什么难点,主要就是要反应过来fp是文件包含,算是一道放松题了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值