eval 劫持

琐碎记事 · 2023-06-11

eval 劫持
参考 php 官网上的 Hook 函数的过程:http://php.net/manual/de/function.override-function.php#50821

我们知道这类加解密肯定要经过 eval 这一步的,我们 Hook 掉原始的 eval 函数,然后把参数提取出来就可以了。

此方法并不安全,因为并不清楚 eval 的内容

想到 eval 劫持之后,我才知道这句话是为了防止 eval 劫持的。

复制代码 隐藏代码
$t = microtime(true) * 1000;
eval("");
if (microtime(true) * 1000 - $t > 100) {

die();

}
新建一个文件,写入以下内容。(这个需要安装 APD 插件,不过并没有现成的 Windows 版的,我只是在纸上谈兵罢了。)

复制代码 隐藏代码
<?php
/* @link http://php.net/manual/de/function.override-function.php#50821 /
rename_function('eval', 'original_eval');
function override_eval($code_str){

if ($code_str) {
    /** @link http://www.php.net/manual/en/features.commandline.php#94924 */
    echo 'Hook eval', PHP_EOL;
    echo '函数调用栈:', PHP_EOL;
    debug_print_backtrace();
    echo '执行代码', PHP_EOL;
    echo $code_str, PHP_EOL;
    // 调用系统函数暂停
    passthru('pause');
}
return original_eval($code_str);  

}
override_function('eval', '$code_str', 'return override_eval($code_str);');

// 同理我们 Hook 掉 php_sapi_name();
rename_function('php_sapi_name', 'original_php_sapi_name');
override_function('php_sapi_name', '', 'return "cgi-fcgi";');

include '1.php';
有个类似的 runkit 插件,最高支持 php 5.6。懒得装了,也就没试。

Theme Jasmine by Kent Liao
辽ICP备2021009421号-2