PHP提供代码执行漏洞是方便开发人员处理各类数据和各种业务场景,但是在开发人员不能合理使用的时候,就会产生安全风险,则很容易被攻击者利用执行远程的PHP恶意代码,威胁到系统安全。
PHP代码里包含eval()、assert()、preg_repace()、create_function()等能够执行代码的函数,如果没有对用户输入的参数进行过滤,就会造册会给你代码执行漏洞,导致攻击者在服务器端执行代码,进而控制整个服务器。
代码执行的函数
浪师父通过列举eval()、assert()、preg_repace()、create_function()等常用函数来说明其中存在的安全隐患。
1 危险的eval()函数
eval()函数可以吧字符串代码作为PHP代码执行。eval()函数语言结构非常危险,因为它允许执行任意PHP代码。如果想使用,必须多加注意,不要允许传入任何由用户提供的未经完整验证的数据。
eval()函数可以将参数的变量值执行,可以用于处理模板和动态加载PHP代码,所以容易被利用攻击。下面代码就是PHP一句话木马。
eval
($_GET[cmd])
代码成功执行phpinfo()函数,执行结果如图。
https://www.xxx.com/cmd.php?cmd=phpinfo();
2 危险的assert()函数
assert()函数在PHP中用来判断一个表达式是否成立,返回真或假。可以直接将PHP代码传入执行。
assert($_GET[cmd])
服务器存在上诉代码,当请求https://www.xxx.com/assert.php?cmd=phpinfo();后执行phpinfo()函数被执行。如图:
3 危险的preg_replace()函数
当preg_reploace()函数中,当第一个参数的正则表达式有e修正符时,第二个参数的字符串当作PHP代码执行。
preg_replace(
"/pregStr/e"
,$_GET[
'cmd'
],
"cmd_pregStr"
);
当请求https://www.xxx.com/preg_replace.php?cmd=phpinfo();后phpinf()函数被执行。如图:
4 危险的create_function()函数
create_function()函数的作用是从传递的参数创建匿名函数,并返回唯一的名称。当PHP不正确过滤传递给create_function()的输入时,攻击者可以利用漏洞以特权应用程序权限执行任意代码。
如下代码是该函数引起的代码执行漏洞。
$newfunc=create_function(
'$a,$b'
, $_GET[
'cmd'
]);
请求https://www.xxx.com/create_function.php?cmd=;}phpinfo();/*后phpinfo()会在没有调用函数的情况下执行。
5 容易导致安全问题的其他函数
assert() | array_filter() | pcntl_exec() |
preg_reploace() | array_map() | require() |
array_reduce() | array_diff_uassoc() | array_diff_ukey() |
array_udiff() | array_udiff_assoc() | require_once() |
register_shutdown_function() | register_tick_function() | set_error_handler() |
shell_exec() | array_udiff_uassoc() | array_intersect_assoc() |
array_intersect_uassoc() | array_uintersect() | array_uintersect_assoc() |
array_uintersect_uassoc() | array_walk() | array_walk_recursive() |
create_function() | escapeshellcmd() | exec() |
include | include_once() | ob_start() |
passthru() | stream_filter_register() | system() |
usort() | uasort() | uksort() |
xml_set_character_data_handler() | xml_set_character_data_handler() | xml_set_default_handler() |
xml_set_element_handler() | xml_set_end_namespace_decl_handler | xml_set_external_entity_ref_handler() |
xml_set_notation_decl_handler() | xml_set_processing_instruction_handler() | xml_set_start_namespace_decl_handler() |
xml_set_unparsed_entity_decl_handler |
原文始发于微信公众号(船山信安):原创 | PHP代码执行漏洞函数详解
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论