云计算百科
云计算领域专业知识百科平台

[破阵阁・网安淬锋公开赛 决赛] Secure File Viewer WP

这道题是一个类似文件包含的题目,

可以看到题目已经告诉你flag在根目录的地方了,从网站上可以知道有一个图片正在显示,根据图片的src可以看到图片的源,

理论上我们只要改写filename的内容就行了,但是题目给出了限制,当你访问的时候

很明显如果绝对路径显示不出来,那就是说明这个Src是被修改过的

这时候就需要我们尝试目录穿越,要利用../这一特性,但是题目哪会有这么简单,

通过Fuzz我们可以知道,很多符号都可以通过检测,但是唯独..不行,就算你传入的参数为filename=..   ,那么也不会通过

不难看出是有WAF检测,所以现在我们要去收集信息,看下有没有可以利用的地方,比如robots.txt这类经常出现的东西,但是很遗憾,这道题没有,不过我们可以通过目录扫描找到有用的文件,通过检索我们找到了file.php.bak,也就是之前file.php的备份,它的里面存在着源代码的备份,是很重要的信息

我们把文件下载

<?php
$filename = $_GET['filename'];
if (strpos($filename, '..') !== false) {
header('HTTP/1.1 403 Forbidden');
echo 'Access denied!';
die();
}

function mylowercase($string) {
$lowercase = '';
foreach (str_split($string) as $char) {
$ascii = ord($char);
if (!($ascii >= ord('a') && $ascii <= ord('z'))) {
$lowercase .= chr($ascii + (ord('a') – ord('A')));
} else {
$lowercase .= $char;
}
}
return $lowercase;
}
$filePath = mylowercase($filename);
if (!file_exists($filePath)) {
header('HTTP/1.1 404 Not Found');
echo 'File not found!';
die();
}
$mimeType = mime_content_type($filePath);
header("Content-Type: $mimeType");
header('Content-Length: ' . filesize($filePath));

readfile($filePath);
?>

这样就搞清楚检测了,可以看到访问限制确实是..,

然后就要考虑怎么绕过了,

分析了代码发现就两功能,一个是检测

另一个是把小写的字母转换成大写,

但是重点在转换的地方,这个转换是把ascii+32,但是转换的类型却是不在小写的范围内,也就是说我们可以把一些字符转换成我们可以利用的payload,只要它不是小写.

如果我们要找/flag.txt

就需要转义/和.

/的asc是47 .是46

那么我们要写的payload就是

filename=%0fflag%0etxt

那么解释出来就是/flag.txt了

总的来说这道题难点在目录扫描和对于小于32的ascII值的记忆和转换,难度不是很高

赞(0)
未经允许不得转载:网硕互联帮助中心 » [破阵阁・网安淬锋公开赛 决赛] Secure File Viewer WP
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!