一、概述

  • RCE的英文全称:remote command/code execute,分为远程命令执行ping远程代码执行eval

  • RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。

    出现漏洞原因:没有在输入口做输入处理

​ 一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。其实这就是一个接口,可以让攻击者直接向后台服务器远程注入操作系统命令或代码。

​ 具体后端代码如下:

1
$result.=shell_exec('ping'.$ip);

二、拓展知识

ping

基本概念:ping是一个基本且重要的TCP/IP网络工具,也是检测网络故障的基本工具

  • 主要作用:

    • 通常用于检测网络的连通情况和测试网络速度
    • 根据域名得到相应主机的IP地址
    • 根据ping返回的TTL值来判断对方所使用的操作系统及数据包经过路由器数量
  • 简单用法:

    在命令提示符下输入:

    ping 对方IP地址

    image-20231206192329362

​ 其他用法:

image-20231206193052748

命令执行漏洞常用的命令

Windows

1
2
3
4
5
6
dir  ----查看文件目录
ipconfig----查看windows的IP地址
arp -a ----查看ARP缓存表
calc ----在命令行打开计算器
regedit ----打开注册表
netstst -ano----查看开放的端口信息

Linux

1
2
3
4
5
6
7
8
9
10
cat /etc/passwd ----查看passwd文件
id ----查看该用户的ID号
groups ----查看用户所属的组
cat /etc/group ----查看组信息
whoami ----查看当前用户
pwd ----查看当前路径
uname -a ----查看主机信息
cat /etc/issue ----查看主机的配置信息
netstst -pantu ----查看开放的端口信息
netstat -nr ----查看路由信息

命令执行漏洞使用的特殊字符

Windows

符号 描述 示例
| 直接执行后面的语句 ping 127.0.0.1
|| 前面出错执行后面的,前面为假 ping 2
& 前面的语句为假则执行后面的 ,前面可真可假 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

三、实战

进入pikachu靶场:

exec”ping”

先查看后端源代码:image-20231206195009341

远程命令执行ping和远程代码执行eval的源代码都对输入没有做特殊的处理,说明可能存在RCE漏洞

先ping一下本机:

image-20231206201122126

再输入:

image-20231206202125375

image-20231206202228339

我们查看后端源代码:

1
2
3
4
5
6
if(stristr(php_uname('s'), 'windows')){
// var_dump(php_uname('s'));
$result.=shell_exec('ping '.$ip);//直接将变量拼接进来,没做处理
}else {
$result.=shell_exec('ping -c 4 '.$ip);
}

发现源码只是做简单的拼接,并没有做严格的漏洞处理。

exec”eval”

随便输入字符:

image-20231206202837439

输入phpinfo();

image-20231206203059961

查看后端源代码:

1
2
3
4
5
6
7
if(isset($_POST['submit']) && $_POST['txt'] != null){
if(@!eval($_POST['txt'])){
$html.="<p>你喜欢的字符还挺奇怪的!</p>";

}

}

可以看到不存在任何校验,直接将输入内容放进eval里。

。。。。。。