RCE 命令执行+代码执行 漏洞

0x00 RCE漏洞 概述

  • RCE = 命令执行+代码执行

漏洞的产生原因

  • 代码层过滤不严。应用程序直接或间接使用了动态执行命令的危险函数 ,并且这个函数的运行参数是可控的

  • 系统的漏洞造成命令注入

漏洞的本质

  • 应用有时需要调用一些执行系统命令的函数,当服务器没有严格过滤用户提供的参数 时,就有可能导致用户提交恶意代码被服务器执行 ,从而造成命令执行漏洞。

涉及到的函数

  • PHP中常见的代码执行函数

  • eval()、 assert()、 preg_replace()、create_function()

  • array_map()、call_user_func()、 call_user_func_array()、array_filter()

  • 命令执行函数

  • system()、exec()、 popen()、 passthru()、 shell_exec()、反引号(``)

0x01 RCE漏洞 原理

  • web应用对用户的输入没有经过严格过滤就直接带入危险函数中执行

0x02 RCE漏洞 危害

  1. 继承 Web 服务器程序权限(Web 用户权限),去执行系统命令

  2. 继承 Web 服务器权限,读写文件

  3. 反弹 Shell

  4. 控制整个网站

  5. 控制整个服务器

0x03 RCE漏洞 防御

  1. 尽量 少使用执行命令函数 或者 禁用 disable_functions

  2. 在进入执行命令的函数之前,对参数进行过滤 ,对敏感字符进行转义

  3. 参数值尽量使用引号包括 ,并在拼接前调用 addslashes 进行转义

0x04 RCE漏洞 利用

相关函数使用

system()

  • 说明:能够将字符串作为 OS 命令执行,自带输出功能

  • 测试参考代码:

<meta charset='gb2312'>
<?php
if(isset($_GET['cmd']))
{
  echo "<pre>";
  system($_GET['cmd']);
}
?>
// 提交的URL:[?cmd= ipconfig]

passthru()

  • 说明:执行外部命令,与 system()类似,但是该函数会直接将结果输出 ,无需输出执行

  • 测试参考代码:

<meta charset="gb2312">
<?php
if(isset($_GET['cmd']))
{
  echo "<pre>";
  passthru($_GET['cmd']);
}
// 提交的URL:[?cmd= ipconfig]

exec()

  • 说明:能将字符串作为 OS 命令执行,但无输出 ,需要输出执行结果

  • 注意:exec() 只输出最后一行的数据

  • 测试参考代码:

<meta charset = "gb2312">
<?php
if(isset($_GET['cmd']))
{
  echo "<pre>";
  print exec($_GET['cmd']);
}
?>
//  提交的URL:[?cmd=ipconfig]

shell_exec()

  • 说明 L 执行命令并以字符串的形式,返回完整的信息,但是函数无回显 ,需要输出执行结果

  • 测试参考代码:

<meta charset = "gb2312">
<?php
if(isset($_GET['cmd']))
{
  echo "<pre>";
  print shell_exec($_GET['cmd']);
}
?>
//  提交的URL:[?cmd=ipconfig]

popen()

  • 说明:能够执行 OS 命令,但是该函数并不是返回命令结果,而是返回一个文件指针

  • 测试参考代码:

<meta charset = "gb2312">
<?php
if(isset($_GET['cmd']))
{
  $cmd=$_GET['cmd'].">> 1.txt";
  popen($cmd,'r');
}
?>
//  提交的URL:[?cmd=whoami]

``(反引号)

  • 说明:反引号[``]内的字符串,也会被解析成 OS 命令,背后调用的是 shell_exec() 函数

  • 测试参考代码:

<meta charset = "gb2312">
<?php
if(isset($_GET['cmd']))
{
  $cmd=$_GET['cmd'];
  print `$cmd`;
}
?>
//  提交的URL:[?cmd=whoami]

漏洞利用过程

  • 权限问题

OS 命令注入漏洞,攻击者直接继承 WEB 用户权限,在服务器上执行任意命令 ,危害特别大。以下命令均在 windows 系统下测试成功

  • 提权过程
  1. 查看系统文件

payload:[?cmd=type c:\windows\system32\drivers\etc\hosts],查看系统 hosts 文件

  1. 显示当前路径

payload:[?cmd=cd ]

  1. 显示当前权限

payload:[?cmd=whoami ]

  1. 写文件

payload:[?cmd=echo "" > C:\phpStudy\WWW\Command\shell.php]

页面没有报错,说明文件写入成功。访问 shell.php 文件,同理我们可以写入一个一句话木马。

多命令执行语法

windows 系统

Linux 系统

posted @ 2021-11-20 23:35  FreeK0x00  阅读(603)  评论(0编辑  收藏  举报