远程代码执行漏洞
远程代码/命令执行(Remote Code/Command Execute),由于程序中预留了执行代码或命令的接口,并提供了给用户使用的界面,导致被利用控制服务器
- 漏洞危害
获取服务器权限
获取敏感数据文件
写入恶意文件getshell
植入木马病毒勒索软件等 - 漏洞防御
开源框架,升级到最新版本
尽量不使用命令执行的函数
使用白名单
正则表达式对用户输入处理
使用WAF
PHP注入相关函数
函数 | 作用 |
---|
system() | 执行外部程序,并显示输出 |
exec()、shell_exec() | 通过shell环境执行命令,并将完整的输出以字符串的方式返回 |
pcntl_exec() | 在当前进程空间执行指定程序 |
passthru() | 执行外部程序并显示原始输出 |
popen() | 打开进程文件指针 |
proc_open() | 执行一个命令,并打开用来输入/输出的文件指针 |
函数 | 作用 |
---|
eval() | 把字符串作为php代码执行 |
assert() | 检查一个断言是否为false |
preg_replace() | 执行一个正则表达式的搜索和替换 |
create_function() | 创建一个匿名函数并返回函数名称 |
call_user_func()/call_user_func_array() | 把第一个参数作为回调函数调用 |
usort()/uasort() | 用户自定义的比较函数对数组中的值排序并保持索引关联 |
命令拼接符号
符号 | 含义 |
---|
&& | 左边的命令执行成功,右边的才执行 |
& | 拼接执行命令 |
| | 左边命令的输出,作为右边命令的参数 |
|| | 左边的命令执行失败,右边的才执行 |
符号 | 含义 |
---|
; | 拼接执行命令 |
&& | 左边的命令执行成功,右边的才执行 |
| | 左边命令的输出,作为右边命令的参数 |
|| | 左边的命令执行失败,右边的才执行 |
& | 任务后台执行,与nohup命令差不多 |
绕过过滤
- 空格绕过:${IFS}
cat${IFS}flag.php,cat$IFS$1flag.php,cat${IFS}$1flag.php - 重定向绕过:
cat<>flag.php,cat<flag.php - 单引号双引号绕过:闭合的引号可以抵消
cat fl’’ag.php,cat fl””ag.php,c’’at fl’’ag.php,c””at fl””ag.php - 反斜杠绕过:
ca\t fl\ag - $1绕过:
ca$1t fl$1ag.p$1hp - 内敛执行绕过:将命令的输出作为输入执行
查看目录下所有文件cat `ls`,cat $(ls) - 通配符绕过、拼接、编码绕过、长度限制、读文件绕过、命令嵌套等