2014-01-11 56 views
3

我一直在閱讀關於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文件不能很好地工作,這是一個很好的理由。我被告知,「你可以得到它的工作,但它很難」。想法?

在此先感謝,並對長期問題抱歉。

+0

可能重複的[LD \ _PRELOAD與setuid二進制](http://stackoverflow.com/questions/9232892/ld-preload-with-setuid-binary) – 2014-01-11 22:31:09

+0

非常有趣,但OP只是希望使用LD_PRELOAD SUID二進制。這是特權升級,所以更改惡意程序庫的權限不是一種選擇,因爲有些答案已經提出。 IFS呢? – user3184354

+0

'IFS'遠不如人們認爲的那樣強大。在某些情況下,非默認值可能會產生安全後果,但並不像您期望的那麼簡單。我將首先閱讀關於'IFS'的POSIX文檔。 –

回答

1

我被告知,「你可以得到它的工作,但它很難」。想法?

操作系統對於這些技巧是明智的,現在大多數都得到了補救。一般的想法是setuid,sudo和朋友不使用非特權用戶的環境。

下提供更多閱讀:

如果你想要的是一個setuid二進制闖入系統:

  • 關閉計算機
  • 掛載硬盤
  • 重命名ls(或其他程序等date
  • 拷貝sudols(或其他程序等date
  • 卸載和重新啓動的
+0

這兩個tho中的任何一個仍然可以被利用? – user3184354