8月9日pwn學習

2022-09-18 22:24:18 字數 1955 閱讀 4033

要看乙個乙個程式依賴的so檔案可以用ldd命令,ldd命令後面必須跟上這個程式的絕對命令,一般先用which找到這個程式的絕對路徑

然後再用ldd命令檢視。

ldd結果分為三列

第一列:程式依賴庫的名字

第二列:系統提供庫的名字

而在pwn中可以多次用ldd命令檢視,來判斷該程式是否提供了aslr保護

如圖所示

在安裝外掛程式之前是需要安裝gdb的,gdb的安裝教程,沒有找到國內的源映象位址,所以很慢

1.git clone ~/peda

2.echo "source ~/peda/peda.py">>~/.gdbinit

題目描述:菜雞感覺這題無法溢位,真的麼?

首先檢視程式各層級內容

在搜尋的時候我們發現了這個函式what is this(),發現其中包含flag

這裡寫兩個c語言庫函式

read():ssize_t read(int fd,void*buf,size_t count)fd為檔案描述符,通常為0,每次讀出count位元組數到緩衝區buf中

write():ssize_t write(int fd,void*buf,size_t count)fad為檔案描述符,通常為1,每次寫入count位元組,需要寫入的資料為buf。

strcpy():char *strcpy(char *dest, const char *src) 把src指向的字串複製到dest中。

可現在的問題是如何調出這個函式,整個函式看起來好像都沒有乙個合適的注入點。在檢視了函式的各層級函式後,發現只有login()裡的check_passwd()中的strcpy函式適合作為溢位點,這裡將輸入的密碼s複製到dest中,而s的長度為0x200,dest還有0x14到棧底,滿足溢位條件。也就是說為了滿足棧溢位(上個隨筆),輸入的密碼s的長度至少為0x14,加上要覆蓋棧底的要呼叫另乙個函式的ebp指標0x04,再加上我們需要的函式位址0x04作為返回位址。但這個時候長度是超出if條件距離要求的長度在0x3和0x8之間,但是我們再看在定義passwr_length的時候

用的是_int8型別的變數,而這個變數最多儲存256大小的數字,如果這個數字為257,那麼其大小就變為1,稱為整數溢位。也就是說我們輸入passwd的長度在區間256+4~256+8為好,那麼這個時候我們的passwd還需要260-(0x18+0x04)——264-(0x18+0x04)長度。

利用上面這些,就可以寫我們的payload了,我們取還需要260-(0x18+0x04)長度的passwd。payload=『a』*(0x14+0x04)+p32(hanshuadd)+'a'*(256+0x4-0x18-0x04)

8月14日pwn學習

題目描述 菜雞面對著printf發愁,他不知道printf除了輸出還有什麼作用。題目分析 照著題目描述來看,應該是格式化字串的漏洞。老規矩,照著步驟走 由上面的我們用32位的idapro開啟。可以看到結構也十分簡單,pwnme等於8的時候,就可以得到flag 這裡也一樣要搞清楚在資料棧中偏移了多少。...

8月7日pwn學習

題目描述 pwn!segment fault!菜雞陷入了沉思 解題思路 老規矩按步驟辦事 沒有stack保護,也沒有記憶體位址隨機機制 main偽 發現如果dword 60106c這個值為1853186401這個值,便可以得到flag 記憶體位址棧 發現unk 601068這個值可以溢位到dowor...

2023年9月8日學習筆記

echo語句可以用來列印字串,多行字串,轉義字元,變數,陣列。注意echo不是函式 print語句可以用來列印字串,多行字串,轉義字元,變數,陣列等。print是函式,成功返回true失敗返回false print r 主要用來列印陣列 var dump 判斷乙個變數的型別和長度,並輸出變數的數值。...