CRE 漏洞
RCE
RCE(Remot Command/Code Execute),远程命令/代码执行
远程命令执行:用户可以控制系统命令执行函数的参数,也称命令注入
远程代码执行:用户输入的参数可以作为代码执行,也称代码注入
命令执行可以看作是一种特殊的代码执行,代码执行相对会更加灵活
应用有时候会考虑代码的简洁性、灵活性,会在代码中调用 eval 之类的函数
代码执行(注入)漏洞:在 web 方面是指应用程序过滤不严,用户可以通过请求将代码注入到应用中由服务器执行,导致一系列不可控的后果
PHP:eval assert
Python:exec
ASP:<%=CreateObject(“wscript.shell”).exec(“cmd.exe /c ipconfig”).StdOut.ReadAll()%>
Java:没有类似函数,但采用的反射机制和各种基于反射机制的表达式引擎(OGNL、SpEL、MVEL等)有类似功能远程代码执行
漏洞危害
获取当前文件的绝对路径
print __FILE__读取服务器文件
在服务器写入一句话木马
执行 PHP 代码,获取服务器内容或相关信息
控制服务器,利用 Shell 脚本,上传大马,甚至控制服务器
防御方式
尽量不要使用
evalassert等危险函数如果使用危险函数的话,一定要对输入内容进行严格的过滤
preg_replace尽量不使用/e修饰符在
php.ini文件中禁用危险函数disable_functions
漏洞查找方法
代码审计:最主要的方式,借助代码审计工具,非常方便的审计出此类漏洞已知的 CMS 漏洞:已知的 CMS,有很多每年都会爆出来很多此类的漏洞页面传参查找:针对页面有传参的地方,重点关注传入恶意代码尝试,概率相对较小
代码执行相关函数
远程命令执行
应用程序中有时会调用一些系统命令函数,比如 php 中使用 system、exec、shell_exec 等函数可以执行系统命令,当攻击者可以控制这些函数中的参数时,就可以将恶意命令拼接到正常命令中,从而造成命令执行攻击
命令执行漏洞,属于高危漏洞之一,也可以算是一种特殊的代码执行
产生原因
用户可以控制输入的内容
用户输入的内容被当作命令执行
例:日常的网络访问中,我们常常可以看到某些Web网站具有执行系统命令的功能,比如:有些网站提供 ping 功能,我们可以输入一个 IP 地址,它就会帮我们去尝试 ping 目标的 IP 地址,而我们则可以看到执行结果
防御方式
尽量不要使用命令执行函数
客户端提交的变量在进入执行命令函数方法之前,一定要做好过滤,对敏感字符进行转义
在使用动态函数之前,确保使用的函数是指定的函数之一
对 PHP 语言来说,不能完全控制的危险函数最好不要使用
执行多条语句(windows)
command1 & command2
前面和后面命令都要执行,无论前面真假
command1 && command2
如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令
command1 || command2
如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句
command1 | command2
|是管道符,将第一条命令的结果传递给第二条命令,仅显示第二条命令的结果
执行多条语句(linux)
command1 ; command2
前面和后面命令都要执行,无论前面真假
command1 & command2
前面和后面命令都要执行,无论前面真假
command1 && command2
如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令
command1 || command2
如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句
command1 | command2
是管道符,将第一条命令的结果传递给第二条命令,仅显示第二条命令的结果
命令执行相关函数
靶场练习
代码执行
基本方式
seacms-v9.92 漏洞
命令执行
基本绕过
基本方式
Last updated