南京大學計算機基礎(四)踩坑筆記

muyiGin發表於2024-08-11

第六週 緩衝區溢位章節

bang問題:

  • 每次輸入的id將影響getbuf中的堆疊位置,用-u 12的ebp和-u 123的ebp位置就不一樣。
  • 注意彙編程式碼中不能出現a0(代表換行符),如果地址有a0就將它隨便改改就行了(a0改為a8-0x8)。
    a0改為a8-0x8
  • 注意gdb如果不能重定向,可能是因為你修改了gdbinit:https://stackoverflow.com/questions/78832654/why-my-gdb-cant-read-the-file-by-stdin-very-weird?noredirect=1#comment138988527_78832654

rumble問題:
仔細分析彙編和棧的呼叫,這道題挺難的!【搞了我3個小時,真的別隻用gdb,用ida靜態結合gdb動態才是正解。】

  • 用ida標一標,其中的write_here是為了隨機地址防止你直接push的。write_here儲存的字串是你大寫的cookie值,比如我-u 1234的cookie是0x6eecf91d,那麼這裡就是"6EECF91D"。
  • 然後注意的是memcmp比較的是地址,所以你getbuf中應該push一個地址。
  • 緩衝區的輸入應該長成這樣,注意到我的"6EECF91D"的十六進位制是0x43454536 0x44313946【注意要顛倒過來】。
  • 然後push %esp表示當前地址。
  • 注意到棧幀中第一個引數是$ebp+8,所以你要壓入一個“返回地址”,我這裡壓的是0x11111111佔位。

相關文章