失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 命令执行(RCE)漏洞

命令执行(RCE)漏洞

时间:2021-10-26 03:18:08

相关推荐

命令执行(RCE)漏洞

RCE简介

RCE(remote command/code execute):远程命令/代码执行。

命令执行漏洞: 直接调用操作系统命令。

代码执行漏洞: 靠执行脚本代码调用操作系统命令。

原因:在Web应用中有时候程序员为了考虑灵活性、简洁性,会在代码调用代码或命令执行函数去处理。比如当应用在调用一些能将字符串转化成代码的函数时,没有考虑用户是否能控制这个字符串,将造成代码执行漏洞。同样调用系统命令处理,将造成命令执行漏洞。

原理

攻击者在一些能够执行系统命令的位置,输入恶意的系统命令,服务器端没有针对执行函数做严格的过滤,导致服务器执行了该恶意的系统命令,从而对服务器产生了安全威胁。

命令执行和代码执行的区别:命令执行漏洞是直接调用操作系统命令,而代码执行漏洞则是靠执行脚本代码调用操作系统命令。

命令执行

系统命令执行函数

System():system函数可以用来执行一个外部的应用程序并将相应的执行结果输出,函数原型如下: system(command,return_var) 其中,command是要执行的命令,return_var存放执行命令的执行后的状态值。

Exec():exec函数可以用来执行一个外部的应用程序 exec (command, output, return_var) 其中,command是要执行的命令,output是获得执行命令输出的每一行字符串,return_var存放执行命令后的状态值。

Passthru():passthru函数可以用来执行一个UNIX系统命令并显示原始的输出,当UNIX系统命令的输出是二进制的数据,并且需要直接返回值给浏览器时,需要使用passthru函数来替代system与exec函数。Passthru函数原型如下:passthru (command, return_var)

其中,command是要执行的命令,return_var存放执行命令后的状态值。

Shell_exec():执行shell命令并返回输出的字符串,函数原型如下: shell_exec (command) 其中,command是要执行的命令。

popen() proc_open() pcntl_exec()

利用管道符

Window系列

" | ":直接执行后面的语句。例如:ping 127.0.0.1 | whoami。

“ || ”:如果前面执行的语句执行出错,则执行后面的语句,前面的语句只能为假。例如:ping 127.0.0.1 || whoami

" & " :如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。例如: ping 127.0.0.1 &whoami。

“ && ”: 如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句只能为真。例如:ping 127.0.0.1 && whoami。

Linux 系统

“;”执行完前面的语句再执行后面的。例如: ping 127.0.0.1;whoami

“ | ”:显示后面语句的执行结果。例如: ping 127.0.0.1 | whoami。

“ || ”: 当前面的语句执行出错时,执行后面的语句。例如: ping 1|| whoami。

“ & ”: 如果前面的语句执行为假则直接执行后面的语句。前面的语句可真可假。例如:ping 127.0.0.1 & whoami。

“ && ”:如果前面的语句为假则直接出错,也不执行后面的,前面的语句只能为真。例如: ping 127.0.0.1 && whoami。

代码执行

脚本代码执行函数

eval():把字符串按照 PHP 代码来执行。如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。

assert():普通调用

preg_replace() :对一个字符串进行正则处理

call_user_func()array_map()

绕过

绕过空格

{cat,flag.txt}cat${IFS}flag.txtcat$IFS$9flag.txt

cat<flag.txt cat<>flag.txtca\t fl\ag

通配符绕过

???在linux里面可以进行代替字母 /???/c?t flag.txt

*在linux里面可以进行模糊匹配cat flag.* *进行模糊匹配php

?代表一个字符*代表一串字符

同功能语句替换

编码绕过

base64、hex编码绕过、unicode编码

关键字符绕过

函数绕过

print_r(scandir(pos(localeconv()))) //当前目录print_r(scandir(’/’)) //查看根目录文件输出目录中倒数第二个文件内容:print_r(next(array_reverse(scandir(pos(localeconv())))))

绕过长度限制

>>>两个符号的使用

>命令会将原有文件内容覆盖,如果是存入不存在的文件名,那么就会新建文件再存入

>>符号的作用是将字符串添加到文件内容末尾,不会覆盖原内容

防御

1、参数值尽量使用引号包括

2、尽量少用执行命令的函数或者直接禁用

3、在使用动态函数之前,确保使用的函数是指定的函数之一

4、在进入执行命令的函数/方法之前,对参数进行过滤,对敏感字符进行转义

5、能使用脚本解决的工作,不要调用其他程序处理。尽量少用执行命令的函数,并在disable_functions中禁用。

如果觉得《命令执行(RCE)漏洞》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。