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 脚本,上传大马,甚至控制服务器

防御方式

  • 尽量不要使用 eval assert 等危险函数

  • 如果使用危险函数的话,一定要对输入内容进行严格的过滤

  • preg_replace 尽量不使用 /e 修饰符

  • php.ini 文件中禁用危险函数 disable_functions

漏洞查找方法

  • 代码审计:最主要的方式,借助代码审计工具,非常方便的审计出此类漏洞

  • 已知的 CMS 漏洞:已知的 CMS,有很多每年都会爆出来很多此类的漏洞

  • 页面传参查找:针对页面有传参的地方,重点关注传入恶意代码尝试,概率相对较小

代码执行相关函数

远程命令执行

  • 应用程序中有时会调用一些系统命令函数,比如 php 中使用 system、exec、shell_exec 等函数可以执行系统命令,当攻击者可以控制这些函数中的参数时,就可以将恶意命令拼接到正常命令中,从而造成命令执行攻击

  • 命令执行漏洞,属于高危漏洞之一,也可以算是一种特殊的代码执行

产生原因

  1. 用户可以控制输入的内容

  2. 用户输入的内容被当作命令执行

例:日常的网络访问中,我们常常可以看到某些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