ctfshow-web入门-php特性(web104-web108)
由于这涉及到的题目是ctfshow的web入门题目,而且题目范围是从web104到web108,而且这些题目的解决方法都是基于PHP的特性,比如文件包含、PHP反序列化、PHP伪协议等。这里我将以web104为例,给出一个基于文件包含的解决方案。
题目描述:
源码:
<?php
highlight_file(__FILE__);
class emmm
{
public static function checkFile(&$page)
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (!isset($page) || !is_string($page)) {
echo "you can't see it";
return false;
}
if (array_key_exists($page, $whitelist))
{
return true;
}
$_GET['page'] = 'source.php';
return false;
}
}
if(isset($_GET['page']))
{
$page = $_GET['page'];
if (emmm::checkFile($page))
{
include $page;
exit;
}
else
{
echo "no source file!";
}
}
?>
解决方案:
这是一个文件包含的题目,我们需要绕过emmm::checkFile()
的检查。这个函数首先检查page
参数是否被设置,并且是否为字符串。然后,它检查page
是否在白名单数组中。如果不在,则重写page
参数,使其指向默认的source.php
文件。
因此,我们可以通过使用PHP的伪协议php://filter
来读取源代码。
http://challenge-web-104/?page=php://filter/read=convert.base64-encode/resource=source.php
这将会以base64编码的方式返回source.php
的内容。
注意:
- 这个解决方案只是一个示例,具体的解决方法还需要根据每个题目的具体代码实现来确定。
- 在实际的ctf比赛中,由于安全性和教育意义,我们应该遵循ctf的规则,不要进行未授权的攻击。解题时应遵循法律法规,不得利用解决方案进行非法行为。
评论已关闭