iT邦幫忙

2021 iThome 鐵人賽

DAY 21
0
Security

讓Web開發者森77的Hacking Trick系列 第 21

[Day21] Remote Code Execution

前言

你知道Remote Code Execution很嚴重,但你知道有哪些可以觸發RCE嗎?

正文

概念

只要能夠Remote Code Execution,通常會被評斷為高危漏洞,這是因為攻擊者可以藉此在Server上遠程執行,當然RCE並非只能透過Web才能夠觸發,但本篇只專注在Web Application上。

其中一個造成RCE的類型就是動態的程式碼執行,這也是大多數觸發RCE的方法。動態程式碼執行的意思是 - 程式碼會從某些地方(例如使用者輸入)獲取參數並執行它。從攻擊者的角度來說,只要你的Web Application存在與使用者互動的地方,就都有可能是一個進入點,這包含一般常見的網站提供的欄位、GET/POST Request中的各種欄位,如Headers,request body等等。

透過撰寫能夠與Web Application/Web Server溝通的程式碼,使應用程式執行這些惡意程式碼,獲得Initial access。

這種方式可能是直接間接甚至是組合的。


直接

這種方式最好理解,例如Command Injection:

ping.php

<?php

$cmd = "ping ".$GET['ip'];
$result = exec($cmd);

這邊的command是由兩個部分組成,ping和url參數ip
這就代表將會被執行的命令其實完全取決於用戶input。
可以想像假設攻擊者發出一個請求:

http://example.com/?ip=127.0.0.1;cat%20%2Fetc%2Fpasswd

就會將Linux Server上的/etc/passwd print出來,也就理所當然可以將它替換成Reverse Shell取得Server的權限。

我也曾經看過一個案例是,利用touch指令,建立一個特殊檔案名稱的file name,使網站應用程式在讀取filename時,也執行了後面的程式碼,將當下目錄檔案資訊的result,在網站頁面中呈現

或像是透過之前[Day16]的Arbitrary File Upload上傳Web Shell,再進行RCE。

間接/組合

一個簡單的例子是從SQL Injection升級到RCE,例如下面這個payload:
SELECT "<?php system($REQUEST['cmd']);?>" INTO OUTFILE "/var/www/html/xxx.php"

就是利用SQL中的一些特殊功能,寫入一個Web Shell到Web Server上,造成RCE,或是使用LOAD_FILE去讀取特定系統的文件等等,達成部分的程式碼執行。

另一個例子就是insecure Deserialization,不安全的反序列化也有可能做到RCE。

Case Study


上一篇
[Day20] Open Redirect - 開放重定向
下一篇
[Day22] Websocket Injection
系列文
讓Web開發者森77的Hacking Trick30

尚未有邦友留言

立即登入留言