我一直在閱讀關於IFS開發和LD_PRELOAD
通過覆蓋函數來提升權限。雖然這是兩個完全不同的問題,但我決定將它們張貼在一起,並希望這不是問題。雖然這兩個都很古老,但我被告知他們都可以用於特權升級,我很樂意考慮這一點。但是,我遇到了一些問題。利用LD_PRELOAD和IFS開發SUID文件
因此,讓我們開始製作SUID文件/ tmp/suid。
#include <unistd.h>
int main() {
system("/bin/date");
}
這叫/bin/date
。我們的想法是,我們可以更改內部字段分隔符並欺騙文件,以使用當前擁有的特權運行其他內容。這可以通過創建一個名爲bin的新文件包含攻擊者放入自定義位置的惡意代碼來完成(或可以這樣做?)。然後,我們更改$PATH
變量,並使其位置首先在我們的自定義路徑中搜索,這是我們的惡意僞造二進制文件所在的位置。然後通過將內部字段分隔符更改爲「/」,而不是運行/bin/date
程序將運行帶有參數日期的/tmp/fakepath/bin
,這可能會觸發特權升級。
當我嘗試描述dankalia.com的方法時,它失敗。改爲執行/bin/date
。如果我只是在控制檯中輸入bin date
,那麼惡意二進制文件就會啓動,但當它通過/tmp/suid
被調用時,它不會啓動。
我認爲該漏洞已修補,它只是忽略了IFS變量,但後來在stackoverflow上的帖子讓我感興趣。 (C: IFS System() Vulnerability)。任何人都可以向我證實這是否有效,我做錯了什麼?謝謝。
至於LD_PRELOAD
,我會保持它相當簡單。
define _GNU_SOURCE
#include <stdio.h>
int puts(const char *str) {
printf("lel");
}
使用以下命令行編譯:
gcc –Wall –fPIC –shared –o puts.so puts.c –ldl
然後,重寫功能puts
與預緊招數:
LD_PRELOAD=./puts.so ./vuln_program_that_uses_puts
這工作得很好。但是,在處理SUID文件時以及我們在討論特權升級時,這不會發生。 LD_PRELOAD
與SUID文件不能很好地工作,這是一個很好的理由。我被告知,「你可以得到它的工作,但它很難」。想法?
在此先感謝,並對長期問題抱歉。
可能重複的[LD \ _PRELOAD與setuid二進制](http://stackoverflow.com/questions/9232892/ld-preload-with-setuid-binary) – 2014-01-11 22:31:09
非常有趣,但OP只是希望使用LD_PRELOAD SUID二進制。這是特權升級,所以更改惡意程序庫的權限不是一種選擇,因爲有些答案已經提出。 IFS呢? – user3184354
'IFS'遠不如人們認爲的那樣強大。在某些情況下,非默認值可能會產生安全後果,但並不像您期望的那麼簡單。我將首先閱讀關於'IFS'的POSIX文檔。 –