远程代码/命令执行(RCE)
提要:RCE(remote command/code execute)远程命令/代码执行,开发人员在开发相关命令调用功能时,没有对用户输入的数据进行过滤和验证等操作,导致攻击者输入的恶意字符被代入后端服务器执行,从而产生危害应用服务器的后果。
漏洞简介:
RCE属于服务端漏洞,可以归于"命令执行漏洞"这一分类中
远程命令执行漏洞:适用于前端给用户提供了一个ping或其他操作的界面,如果后端未对输入的字符做限制,那么用户便可以通过拼接其他参数来构造用户输入,实现命令注入漏洞的发生。
举例:
windows下"&"字符含义:其含义连接多个命令,连接命令都会被执行,如果前面的语句为假则直接执行后面的语句,前面的语句可真可假
远程代码注入原理:因为Web应用功能需求的设计,后台有时候也需要把用户的输入作为代码的一部分执行,不管是使用了代码执行的函数,还是使用了不安全的反序列化等等,如果此时对用户的输入未作判断,那么将可能会造成代码执行漏洞。
举例:
命令执行常见PHP函数&防御:
PHP函数:
system():执行一个外部的应用程序的输入并显示输出的结果
exec():执行一个外部的应用程序,但是不显示输出的结果
shell_exec():执行shell命令并返回输出的结果的字符串
popen()
proc_open()
shell_exec()和exec()函数功能相同
命令执行漏洞防御:
1,用户输入进入后端命令执行的函数或方法之前,对参数进行过滤
2,禁止能执行系统命令的函数,可在php配置文件中设置disable_functions
3,参数使用单引号包裹,并在拼接前调用addslashes进行转义
代码执行PHP常用函数:
PHP函数:
eval():将字符串当作函数执行(需要传入一个完整的语句)
一句话木马就是利用的代码执行漏洞:
<?php @eval($_POST[x]);?> @eval表示执行错误后不进行报错
代码执行漏洞防御:
1,用户输入不轻易接触eval函数,使用正则严格判断用户的输入格式是否合适
2,字符串使用单引号包裹,并在插入前进行addslashes()进行转义