免费A级毛片无码专区网站-成人国产精品视频一区二区-啊 日出水了 用力乖乖在线-国产黑色丝袜在线观看下-天天操美女夜夜操美女-日韩网站在线观看中文字幕-AV高清hd片XXX国产-亚洲av中文字字幕乱码综合-搬开女人下面使劲插视频

Pwn學(xué)習(xí)隨筆

Pwn題做題流程

  • 使用checksec檢查ELF文件保護開啟的狀態(tài)
  • IDApro逆向分析程序漏洞(邏輯復(fù)雜的可以使用動態(tài)調(diào)試)
  • 編寫python的exp腳本進行攻擊
    • (若攻擊不成功)進行GDB動態(tài)調(diào)試 , 查找原因
    • (若攻擊成功)獲取flag , 編寫Writeup
一般都會在C代碼開頭設(shè)置setbuf(stdout, 0)表示設(shè)置printf緩沖區(qū)為0 , 有就輸出而不是等到輸出\n時一塊輸出
ebp + 0x4 存放函數(shù)中第一個局部變量 , ebp - 0x4是返回地址ebp - 0x8 存放函數(shù)第一個參數(shù)
棧幀基本知識
Pwn學(xué)習(xí)隨筆

文章插圖
下面解釋一下下面的匯編代碼(AT&T格式) , 
首先push %ebp , 保存調(diào)用者的調(diào)用者的ebp寄存器 , move %esp, %ebp開始創(chuàng)建caller函數(shù)的棧幀 , 然后sub $0x10, %esp , 在32位程序下是4字節(jié)對齊的 , 將esp指針向下移動16字節(jié)(參數(shù)占12字節(jié) , 局部變量4字節(jié)) , 即四格 ,  此時esp指向3上面的地址 , 
然后將callee函數(shù)的參數(shù)入棧(cdecl從右往左入棧) , 然后調(diào)用call callee , call指令其實是兩條指令 , 先push esp + 0xc , 將返回地址壓棧 , 然后jmp 00000000跳到callee函數(shù)的位置開始執(zhí)行 , 然后同樣的操作 , 先將caller函數(shù)的ebp寄存器壓棧 , 然后mov esp. ebp開始創(chuàng)建callee函數(shù)的棧幀 , 之后開始callee函數(shù)的計算功能 , 取出之前入棧的參數(shù)進行加法操作 。執(zhí)行完后將棧中保存的caller函數(shù)ebp寄存器的內(nèi)容再popebp寄存器 , 此時ebp指向最上面的位置 。然后esp - 4 , 上移一格 。最后執(zhí)行ret指令 , 其實也是兩條指令 , pop eipcaller調(diào)用callee函數(shù)之前入棧的返回地址popeip , 下一步就執(zhí)行該地址 。然后esp + 4 , 回到caller函數(shù)的棧幀 , 可以看到首先是add $0xc, %esp , 將棧頂指針提升到3上面的位置 , 然后mov %eax, -0x4(%ebp) , 意思就是將eax寄存器的值 (callee的返回值) 賦給ebp-4的位置 , 即caller函數(shù)的局部變量ret , 然后addl $0x4,-0x4(%ebp)將局部變量ret的值 + 4 , 最后再把局部變量賦給eax寄存區(qū)準(zhǔn)備返回
Pwn學(xué)習(xí)隨筆

文章插圖
call指令執(zhí)行完后 , 會在esp中存儲返回地址0x401171 = 0x40116c + 4 , 
Pwn學(xué)習(xí)隨筆

文章插圖
進入函數(shù)內(nèi)部后 , 需要首先執(zhí)行push ebp , 保存調(diào)用它的函數(shù)的棧幀 。然后ebp = esp , 提升棧底 , 準(zhǔn)備創(chuàng)建本函數(shù)的棧幀 , 
sub esp, 50 , 會將esp的位置往上提升0x40 / 4 = 0x10即16格 , 然后push ebx | esi | edi保存現(xiàn)場到堆棧中 , 

經(jīng)驗總結(jié)擴展閱讀