php代码"劫持"--输出缓冲
# PHP-代码劫持
调用 ob_start() 来启用输出缓冲,这样,任何在 PHP 代码中产生的输出(例如 echo、print 等)都不会立即发送到浏览器,而是会被存储在缓冲区中
ob_start();
if(isset($_POST['c'])){
$c= $_POST['c'];
eval($c);
$s = ob_get_contents();
ob_end_clean();
echo preg_replace("/[0-9]|[a-z]/i","?",$s);
}else{
highlight_file(__FILE__);
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
审计代码,这段代码先执行传入的$C,用$S临时保存命令执行的结果,再清理缓存,打印正则表达式用?替换后$s的输出内容,简单说,他用?替换了所有数字和字母,然后再展现给你
# 使用函数结束程序
让eval($C)回显的内容提前送出输出缓存区
ob_flush();
1
提前结束程序,不执行后面命令,避免被劫持
die();
exit();
1
2
2
die("words"),exit("words"),可选参数words,结束时打印一句话
# 强制闭合
使用?>
来强制闭合整个<?php ?>
标签,提前结束程序
编辑 (opens new window)
最后一次更新于: 2024/10/24, 13:00:42