远程代码执行漏洞

代码执行

代码执行是指服务器上的解释器按照程序编写的指令和算法逐步执行代码的过程。

代码执行漏洞

远程代码执行(remote code execution)简称RCE,由于应用程序在调用一些能够将字符串转换为代码的函数(如PHP中的eval)时,没有考虑用户是否控制这个字符串,则会导致代码执行漏洞的发生。WebShell能够执行代码,本质上就是利用了代码执行的函数。

漏洞危害

1、执行PHP代码 获取服务器内容或相关信息
2、向服务器写WebShell 利用代码PHP代码功能,往服务器中写入shell脚本
3、控制服务器 利用shell脚本,上传大马,甚至控制服务器

RCE和Getshell

RCE指的是攻击者通过利用应用程序或系统中的漏洞,成功地在目标系统上执行任意代码的能力。攻击者通常会使用RCE来获取对目标系统的控制,以进行恶意活动,例如数据盗取、删除数据或在系统上安装恶意软件等。
“Getshell”是指攻击者成功地在受攻击系统上获得一个可操作的shell(命令行界面),使得攻击者可以在系统上执行任意命令。攻击者通常会使用getshell来进一步扩大其攻击范围或占领系统。
RCE是一种攻击技术,而getshell是攻击成功后的结果。攻击者可以通过各种方式实现RCE,而获得getshell是RCE的一种可能结果之一。

漏洞寻找

这类的漏洞不像SQL注入、文件上传那样容易发现,此类的漏洞一般可以通过以下方式进行发现:
1、代码审计
为最主要的方式,借助代码审计工具,非常方便的审计出此类的漏洞
2、已知的CMS漏洞
已知CMS有很多每年都会爆出来很多此类的漏洞
3、页面传参查找
针对页面有传入参数的地方,可以重点关注传入恶意代码尝试,概率相对较小

代码执行相关函数

PHP: eval、assert、preg_replace()、+/e模式(PHP版本<5.5.0)
Javascript: eval
Vbscript:Execute、Eval
Python: exec
Java: Java中没有php中eval函数这种直接可以将字符串转化为代码执行的函数,但是有反射机制,并 且有各种基于反射机制的表达式引擎,如:OGNL、SpEL、MVEL等,这些都能造成代码执行漏洞。

PHP相关函数介绍

eval

格式:eval ( string $code )
作用:字符串按照 PHP 代码来计算。该字符串必须是合法的 PHP 代码,且必须以分号结尾。

image-20230413220453947

用户在浏览器通过POST的方法向服务器提交请求数据, 其中的a是指 HTTP POST 请求中的参数名, 服务器通过$_POST接收用户提交的数据,然后将获取的数据提交给eval执行。

image-20230413221706005

实际上,以上等价于

1
<?php eval("phpinfo();");?>

assert

语法:assert ( mixed $assertion [, string $description ] )
作用:检查一个断言是否为 FALSE。如果 assertion 是字符串,它将会被assert当做 PHP 代码来执行。不需要以分号结尾。

image-20230413220826552

image-20230413221850014

preg_replace

语法:preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
作用:执行一个正则表达式的搜索和替换,搜索 subject 中匹配pattern的部分,以replacement进行替换。

image-20230413221137197

call_user_func

语法:call_user_func ( callable $callback [, mixed $parameter [, mixed $… ]] )
作用:把第一个参数作为回调函数调用,第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数。(我们调用php系统提供的函数叫直接调用,也叫: 直调,而php系统调用用户自定义的函数,必须要通过一个代理函数来调用,叫间接调用,也叫回调。在PHP中有两种常见的回调函数:call_user_func()和call_user_func_array(),它们可以代替系统来调用我们自己定义的函数)

image-20230413221316644

除了以上的函数能执行代码之外,在php中还存在很多可以造成代码执行漏洞的函数,比如: array_map、create_function、call_user_func_array、array_filter。

漏洞修复

1.尽量不要使用危险函数
2.对数据进行黑白名单处理
3.对传入的特殊字符转义
4.谨慎使用preg-replace的e修饰符

CMS中的远程代码执行漏洞

CMS

CMS是内容管理系统(Content Management System)的缩写,是一种软件系统,用于创建、编辑、发布、管理和维护网站内容。CMS通常由一个后端管理界面和一个前端展示界面组成。后端管理界面提供了一个可视化的方式来管理网站的各种内容,例如文章、图片、视频、用户等。而前端展示界面则是用户最终看到的网站内容。

CMS可以帮助网站管理员更轻松地管理网站,使其更容易更新和维护,同时也可以使多人合作管理网 站变得更加容易。常见的CMS包括WordPress、Joomla、Drupal等。这些CMS都是开源软件,可以在 网上免费下载和使用。

CMS漏洞

CMS与平常的WEB网站一样,都会存在各种各样的漏洞。CMS的后台一般不像前台那样有严格的过滤,所以如果能登录进后台,一般都会存在以下这些漏洞:

权限控制:检查是否存在未经授权的访问漏洞或功能
输入验证:检查是否存在未对用户输入进行验证或过滤的漏洞
XSS漏洞:检查是否存在反射型、存储型漏洞
SQL注入漏洞:检查是否存在SQL注入漏洞
文件上传漏洞:检查是否存在文件上传漏洞
CSRF漏洞:检查是否存在跨站请求伪造漏洞
逻辑漏洞:检查是否存在逻辑上的漏洞,如业务逻辑错误或不一致的授权逻辑。
信息泄漏:检查是否存在敏感信息泄漏的漏洞,如未加密的密码或敏感数据。

TAOCMS后台代码执行漏洞

数据库信息:root/root
后台信息:admin/tao
版本信息:3.0.1
文件名称:taocms.tar
镜像恢复:docker load < taocms.tar
启动镜像:docker run -d -p 10000:80 IMAGEID

漏洞复现

image-20230415104940676

image-20230415104929169

image-20230415105006769

编辑rss.php

image-20230415105139859

访问rss.php

image-20230415105213544