前言
有鑒於過去一年打ju實在燒太多錢了,但要戒掉也沒那麼容易
於是就有買controller的念頭,這樣就可以在家打ju,不用一直燒錢了!
所以一開始我就先買了一台27吋的螢幕
一方面可以當控制器的螢幕,另一方面可以雙螢幕coding或看影片,整個爽度十足
然後存了一段時間的錢後,就上淘寶買了看起來價格便宜內容又實在的DJ DAO控制器FB9
LD_PRELOAD是Linux/Unix下的環境變數,他可以決定預先要載入的共享函式庫
它比LD_LIBRARY_PATH指定的共用函式庫還要優先,因此LD_PRELOAD裡的全域符號會蓋掉後面載入的同名全域符號
所以我們可以利用LD_PRELOAD來達成Linux/Unix下的hook,要達到rootkit的效果也就輕而易舉
但這只對動態連結的程式有效,因為靜態連結函式庫的代碼都已經包進程式中
因為ls用到readdir這個函數來實作
所以我們覆蓋掉libc裡面的readdir來實作rootkit
做法很簡單,載入libc中原本的readdir(我們叫它old_readdir)
然後把結果中有”HIDDEN”的都濾掉
code如下:
編譯一下
設置LD_PRELOAD並執行ls
即可發現當前目錄下名字為HIDDEN的都消失了,就算下參數-al也一樣
|
|
l33t()中有system(“/bin/sh”),所以目標就是執行l33t()
由code可知buf長度20,但read()讀100個bytes,代表這裡可以buffer overflow
並且這題沒有ASLR,所以用objdump可以找出l33t()的address為0x80484fd
接著,只需要將main()的return address蓋成0x80484fd即可
payload: