fmtstr這題在考的是 format string,可以從 gdb 看到 flag 在 stack 裡的位置如下:
$rsp 的位置是 6,推算可以得知 flag 在 12 ~ 18 的位置,最後印出來後再調整一下 little endian 的...
secret我們先來看一下有哪些變數:關鍵在他會比較 var_4h 是不是 0xab37:我們要從 var_20h overflow 到 var_4h,然後送一個大寫 Y,就可以拿到 flag 了。
exploit.py
1234567from pw...
ret2src先看一下保護機制:
這題什麼保護機制都沒有w,所以作法應該蠻多種的,這裡 return 到 gets 的 plt,把 shellcode 寫到某個 bss 段,然後再跳上開 shell。
exploit.py:
12345678910...
registration這題的關鍵是他會隨機生一個 id,然後存到一個全域變數,最後會去檢查這個值是否被更動:
只要弄清楚變數具體的位置,這題就輕鬆通關了:
exploit.py:
1234567891011121314151617181920f...
return經典 bof,跳上去這個邪惡的東東就搞定了,記得對齊 0x10:
exploit.py:
123456789from pwn import *r = process('./return')ret = 0x400539...
binary這題有三個階段,分別輸入特定的值就可以開 shell,首先 stage1:
注意前面兩個是 je,最後一個是 jne,所以這邊要送 0x100001,再來 stage2:
這次要送三個值分別是:0x64,0x100,0xfaceb00...
pwntools首先他會比較第一個參數是否為一個特定的值:
再來就是用 pwntools 來解決他的一千道數學題,exploit.py:
12345678910111213141516from pwn import *r = process(...
ret2sc這題就是先把 shellcode 寫到 name 上,再跳上去就行,不過比較新的作業系統 bss 段沒有 x 權限,這邊就直接上 exploit.py:
12345678910from pwn import *r = process(...
bofe4sy直接 bof return 到 win 就行:
exploit.py:
1234567891011└─$ cat exploit.pyfrom pwn import *r = process('./bofe4sy'...
pass這題直接 r2 看一下 main 的這兩個地方:
控好 var_4h 就結束了,exploit.py:
12345678from pwn import *r = process('./pass')p = b'...