我想用 execlp 執行一個 shell 命令,我嘗試了以下指令:
execlp("sh", "sh", "-c", p_command, (char*)NULL);
p_command 是一個指向const char表示 shell 命令列的指標。
我的最小測驗告訴我程式按預期成功。我首先選擇使用"/bin/sh"而不是,"sh"但我了解到p ( ath ) inexeclp允許我們避免撰寫完整路徑,就好像 exec 會為我們完成路徑一樣;所以我洗掉了“/bin/”。我擔心的是,我從未見過僅使用“sh”的 execlp 代碼,因為它有效地作為 ls 的示例,我們可以直接使用"ls"而不是"/bin/ls".
作為一個初學者,我想知道什么"/bin/sh"代表,之間有什么區別"sh",并"/bin/sh"在這種情況下,為什么我們要撰寫的完整路徑execlp執行一個shell?
uj5u.com熱心網友回復:
當路徑傳遞到execlp是sh,execlp在列出的目錄搜索它PATH的環境變數。如果攻擊者能夠修改PATH運行您的程式的環境中的變數,他們可以將其設定為列出他們選擇的目錄,并且他們可以將自己的程式命名sh在該目錄中。然后你的程式將執行他們的程式而不是執行系統sh程式。在某些情況下(取決于檔案模式位中的一點),程式以其所有者的權限而不是執行程式的用戶的權限執行。必須仔細撰寫此類程式,以避免出現這樣的情況,攻擊者可以在這種情況下利用該程式。
當路徑傳遞到execlp是/bin/sh,execlp看起來它在其路徑/bin/sh從檔案系統的根,稱為啟動/。這將始終使用sh系統管理員放置在/bin目錄中的程式(通常作為系統安裝的一部分完成)。
uj5u.com熱心網友回復:
每個可執行檔案都通過bash. execlp是exec家庭的一部分,lp代表list of args和path。因此,無論何時傳遞命令或執行檔案,bin/sh或bash在子行程中派生并執行任務并回傳。什么時候ls運行 bash 分配給它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/352409.html
