RCE漏洞
内容为笔记整理,如有侵权,联系删除
RCE之成因
RCE之危害
- 获取服务器权限
- 获取敏感数据文件
- 写入恶意文件getshell
- 植入木马病毒勒索软件等
RCE之相关函数
远程命令执行Remote Command Execute相关函数
函数 | 作用 |
---|---|
system() | 执行外部程序,并且显示输出 |
exec()/shell_exec() | 通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回 |
pcntl_exec() | 在当前进程空间执行指定程序 |
passthru() | 执行外部程序并且显示原始输出 |
popen() | 打开进程文件指针 |
proc_open() | 执行一个命令,并且打开用来输入/输出的文件指针 |
远程代码执行Remote Code Execute相关函数
函数 | 作用 |
---|---|
eval() | 把字符串 code 作为PHP代码执行 |
assert() | 检查一个断言是否为 false |
preg_replace() | 执行一个正则表达式的搜索和替换 |
create_function() | 创建一个匿名函数并且返回函数名称 |
call_user_func()/call_user_func_array() | 把第一个参数作为回调函数调用 |
usort()/uasort() | 使用用户自定义的比较函数对数组中的值 |
RCE之命令拼接符号
Windows命令拼接符号
符号 | 含义 | 示例 |
---|---|---|
&& | 左边的命令执行成功,右边的才执行 | ping 127.0.0.1 && echo ‘hello’ |
& | 简单拼接,两边都能执行 | ping 1111 & echo ‘hello’ |
| | 上一条命令输出作为下一条命令参数 | netstst -ano |findstr 3306 |
|| | 左边的执行失败右边的才执行 | ping baidu.com || ping baidu.net |
Linux命令拼接符号
符号 | 含义 | 示例 |
---|---|---|
; | 没有任何逻辑关系的连接符 | |
&& | 左边的命令执行成功,右边的才执行 | cp 1.txt 2.txt && cat 2.txt |
| | 上一条命令输出作为下一条命令参数 | netstat -an|grep 3306 |
|| | 左边的命令执行失败,右边的才执行 | cat 3.txt||cat 2.txt |
& | 任务后台执行,与nohup命令功能差不多 | java -jar test.jar > log.txt & |
RCE之绕过技巧
-
过滤cat
使用其他命令替换
cat:由第一行开始显示内容,并将所有内容输出
tac:从最后一行倒序显示内容,并将所有内容输出
more:根据窗口大小,一页一页的现实文件内容
less:和more类似,但其优点可以往前翻页,而且进行可以搜索字符
head:只显示头几行
tail:只显示最后几行
nl:类似于cat -n,显示时输出行号
tailf:类似于tail -f
-
过滤空格
使用IFS 9 、 9、%09、<、>、<>、{,}、%20、 9、{IFS}、${IFS}等来代替空格
-
cat 1.txt|base64是将文件进行base64的转码输出
-
过滤目录分隔符
使用;代替目录分隔符/(本质是使用多个命令组合)
或者%0a(回车符);%0d(换行符)
-
过滤运算符
直接用分号
-
通配符*
f***会匹配所有四个字母第一个字母是f的文件,比如
cat f***9687.php
RCE之防御
- 开源框架,升级到最新版本,如CMS
- 尽量不要使用命令执行的函数
- 如果必须使用,需要做白名单处理
- 用正则表达式对用户输入的内容进行处理
- 使用WAF