从一道ctf题(CSAW CTF 2016 mfw)深入理解assert+strops
从git源码泄露入手,查看源码可知page没有做任何过滤
<?php
if (isset($_GET['page'])) {
$page = $_GET['page'];
} else {
$page = "home";
}
$file = "templates/" . $page . ".php";
// I heard '..' is dangerous!
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");
// TODO: Make this look nice
assert("file_exists('$file')") or die("That file doesn't exist!");
?>
strops():
返回字符串在另一字符串中第一次出现的位置,如果没有找到字符串则返回 FALSE.
assert():
assert ( mixed $assertion [, Throwable $exception ] ) : bool
如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行。
assertion 是字符串的优势是当禁用断言时它的开销会更小,并且在断言失败时消息会包