一、代码执行原理
代码执行是指应用程序在调用⼀些能够将字符串转换为代码的函数时,没有考虑用户是否控制这个字符串,将造成代码执行漏洞,使得用户能利用任意脚本代码(PHP)。
- webshell含义
webshell 就是以网页文件形式存在的一种命令/代码执行环境,也可以将其称做为一种网页后门。由于 webshell 其大多是以动态脚本的形式出现,也有人称之为网站的后门工具。一句话木马、小马、大马都可以叫 webshell。 - 代码执行函数
eval():是一个语言结构,把字符串按照PHP代码执行,该字符串必须是合法的PHP代码,且必须以分号结尾
<?php eval($_POST['hudou']);?>
assert():是一个函数,把字符串按照PHP代码执行
create_function():根据传递的参数创造一个匿名函数
$a=create_function(",$_POST['para']);$a();
二、命令执行原理
代码执行漏洞应用有时需要调用⼀些执行系统命令的函数,当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。简单来说就是:”靠执行脚本代码调用操作系统命令“
命令执行函数:system()、exec()、shell_exec()、passthru()、popen()、porc_popen()
绕过disable_function():disable_function是写在php.ini配置文件中的禁用PHP中的危险函数
- 利用LD_PRELOAD环境变量:是Linux系统的一个环境变量,它允许你定义在程序运行前优先加载的动态链接库。
三、命令执行防御
- 不执行外部命令
- 使用自定义函数或者函数库来代替外部命令的功能
- 使用escapeshellarg()、escapeshellcmd()函数来处理命令参数
- 禁用一些敏感字符,比如; && cat等连接符与常用命令