2023 水友赛 WP:独行侠独享 3 道 Web 题,过瘾!
2023-11-03 11:44:04
跨年夜 Web 题之乐:过滤绕过、意外惊喜、雪崩效应
迎接新的一年,我们举行了一场跨年 Web 题竞赛,只有短短三道题目,却带给我们别样的快乐和收获。让我们一起回顾一下这三道精彩的题目,探索其巧妙之处。
1. 过滤绕过:突破防御,触及真谛
乍一看题目,我们可能会被第一道题的正则表达式过滤吓到,因为它禁止了我们常见的绕过正则表达式的方法。但是,别慌,仔细分析题目,我们发现题目要求的是过滤绕过,而不是彻底绕过。
于是,我们把目光投向 PHP 的另一个函数——str_replace
。它可以用第一个参数替换掉第二个参数中的字符串。如果我们用一个空字符串替换,就相当于删除了字符串中指定的内容。
代码示例:
$key = str_replace(array('flag(', ')'), '', $_GET['key']);
通过这个技巧,我们就巧妙地绕过了正则表达式过滤,获取到了隐藏的 flag。
2. 意外惊喜:别具匠心的函数调用
第二道题乍看之下平平无奇,但是当你仔细琢磨题目的时候,就会发现它隐藏着一个意外的惊喜。题目中提到了一个 PHP 函数——phpinfo()
,它可以打印出 PHP 的配置信息,其中包括文件路径。
代码示例:
phpinfo();
这样,我们就可以通过打印配置信息来泄露出 flag,可谓是别具匠心,令人拍案叫绝。
3. 雪崩效应:图片伪装,暗度陈仓
第三道题是一道文件上传题,但它巧妙地限制了上传的文件必须是图片。这看似无懈可击,但我们却发现了一个突破口——md5_file
函数,它可以计算一个文件的 MD5 值。
然而,md5_file
函数是可以绕过的。我们可以通过修改文件头来绕过它。
具体步骤:
- 构造一个 JPG 文件,但文件头是 PNG 的。
- 上传此文件到服务器。
- 服务器会把文件当作 PNG 文件处理,而不会计算它的 MD5 值。
- 这样,我们就可以上传一个任意文件到服务器上了。
代码示例:
// 构造伪造的 PNG 头
$png_header = "\x89PNG\x0d\x0a\x1a\x0a";
// 将 PNG 头附加到 JPG 文件上
$jpg_file = fopen('test.jpg', 'rb');
$png_header = fwrite($jpg_file, $png_header);
fclose($jpg_file);
// 上传伪造的 PNG 文件
$_FILES['file']['name'] = 'test.png';
$_FILES['file']['type'] = 'image/png';
$_FILES['file']['tmp_name'] = 'test.jpg';
$_FILES['file']['error'] = 0;
$_FILES['file']['size'] = filesize('test.jpg');
通过这种雪崩效应,我们突破了文件类型限制,实现了任意文件上传。
总结:巧思迭出,收获满满
虽然这次的题目只有三道,但每一道都巧思迭出,带给我们意想不到的挑战和收获。通过破解这些题目,我们不仅提升了 Web 安全知识,还锻炼了灵活思考和绕过限制的能力。
常见问题解答
1. 这次比赛一共出了多少道题目?
答: 3 道
2. 比赛的难度如何?
答: 中等难度
3. 是否使用了任何编程语言?
答: 是的,PHP
4. 绕过正则表达式过滤最关键的突破口是什么?
答: str_replace
函数
5. 上传任意文件题的突破口是什么?
答: md5_file
函数的可绕过性