专栏名称: 衡阳信安
船山院士网络安全团队唯一公众号,为国之安全而奋斗,为信息安全而发声!
目录
相关文章推荐
51好读  ›  专栏  ›  衡阳信安

原创 | PHP代码执行漏洞函数详解

衡阳信安  · 公众号  ·  · 2024-07-17 00:00

主要观点总结

文章讨论了PHP中一些能够执行代码的函数如eval()、assert()、preg_replace()、create_function()等,在不合理使用时可能产生的安全风险,并给出了示例代码。文章还提到了其他可能导致安全问题的函数,并强调了合理使用这些函数的重要性。

关键观点总结

关键观点1: 危险的PHP代码执行函数

文章讨论了eval()、assert()、preg_replace()和create_function()等PHP函数在执行代码时的安全风险。这些函数如果不对用户输入的参数进行过滤,就可能导致代码执行漏洞,让攻击者在服务器端执行代码,控制整个服务器。

关键观点2: 具体的安全漏洞示例

文章给出了具体的示例代码,包括使用eval()、assert()、preg_replace()等函数的代码,并演示了如何利用这些代码进行攻击,通过传入恶意代码来执行phpinfo()等函数。

关键观点3: 其他可能导致安全问题的函数

除了上述函数外,文章还提到了其他可能导致安全问题的函数,如array_filter()、pcntl_exec()等,并强调了合理使用这些函数的重要性。

关键观点4: 教育宣传与招生信息

文章的最后部分涉及教育宣传与招生信息,提到了招收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一句话木马。

 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_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()






请到「今天看啥」查看全文