文章讨论了PHP中一些能够执行代码的函数如eval()、assert()、preg_replace()、create_function()等,在不合理使用时可能产生的安全风险,并给出了示例代码。文章还提到了其他可能导致安全问题的函数,并强调了合理使用这些函数的重要性。
文章讨论了eval()、assert()、preg_replace()和create_function()等PHP函数在执行代码时的安全风险。这些函数如果不对用户输入的参数进行过滤,就可能导致代码执行漏洞,让攻击者在服务器端执行代码,控制整个服务器。
文章给出了具体的示例代码,包括使用eval()、assert()、preg_replace()等函数的代码,并演示了如何利用这些代码进行攻击,通过传入恶意代码来执行phpinfo()等函数。
除了上述函数外,文章还提到了其他可能导致安全问题的函数,如array_filter()、pcntl_exec()等,并强调了合理使用这些函数的重要性。
文章的最后部分涉及教育宣传与招生信息,提到了招收Web漏洞挖掘、CTF、二进制等方面的学员,并承诺提供优质的价格和增值的服务。
PHP提供代码执行函数是方便开发人员处理各类数据和各种业务场景,但是在开发人员不能合理使用的时候,就会产生安全风险,则很容易被攻击者利用执行远程的PHP恶意代码,威胁到系统安全。
PHP代码里包含eval()、assert()、preg_repace()、create_function()等能够执行代码的函数,如果没有对用户输入的参数进行过滤,就会造成代码执行漏洞,导致攻击者在服务器端执行代码,进而控制整个服务器。
代码执行的函数
浪师父通过列举eval()、assert()、preg_repace()、create_function()等常用函数来说明其中存在的安全隐患。
1 危险的eval()函数
eval()函数可以把字符串代码作为PHP代码执行。eval()函数语言结构非常危险,因为它允许执行任意PHP代码。如果想使用,必须多加注意,不要允许传入任何由用户提供的未经完整验证的数据。
eval()函数可以将参数的变量值执行,可以用于处理模板和动态加载PHP代码,所以容易被利用攻击。下面代码就是PHP一句话木马。
代码成功执行phpinfo()函数,执行结果如图。
https://www.xxx.com/cmd.php?cmd=phpinfo()
;
2 危险的assert()函数
assert()函数在PHP中用来判断一个表达式是否成立,返回真或假。可以直接将PHP代码传入执行。
服务器存在以上代码,当请求
https://www.xxx.com/assert.php?cmd=phpinfo()
;后执行phpinfo()函数被执行。如图:
3 危险的preg_replace()函数
当preg_replace()函数中,当第一个参数的正则表达式有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_replace()
|
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()
|