1. 程式人生 > >【pwnable.kr】horcruxes

【pwnable.kr】horcruxes

image-20181123143621965

本關資訊

伏地魔吧自己分裂的靈魂藏在了7哥魂器中…這個描述666。本關要求我們找到所有的魂器然後ROP似乎就可以拿flag了。本關沒有給原始碼,上IDA分析吧。本地執行前安裝32位libseccomp庫,apt-get install libseccomp-dev:i386

image-20181123235615061

init初始化abcdefg7個int值,儲存在bss段,並計算sum。abcdefg的值生成時使用隨機數做為種子再呼叫rand函式生成,因此隨機不可預測。

image-20181123235704687

ropme函式輸入abcdefg的值,就可以呼叫相應的列印函式。gets函式輸入sum的值就可以進入輸出flag的流程。由於gets存在棧溢位,因此可以劫持返回地址。

image-20181124000016124

利用思路很簡單,劫持返回地址跳轉輸出abcdefg的值,就可以計算sum,之後把sum轉化成字串後輸入給atoi即可。

注意有幾個坑點:

  • gets函式遇到a newline character比如\x0a就會截斷(遇到\x00 \t不會截斷,gets可以讀入),ropme函式起始地址是0x080A0009,不能直接跳轉到ropme函式中執行程式碼。可以直接跳到ABCDEFG函式裡面獲取abcdefg的值。
  • atoi函式將int轉化為字串,如果數字超過int範圍轉化失敗返回-1。

此外,由於0xa不能輸入,find查看了stack中是有0x080a的值的,如果棧溢位溢位低位幾個位元組為列印flag的低位,再rop到該處應該也可以直接讀flag。

exp

image-20181124001844848

image-20181124001909081