onegadget不起作用

one_gadget的執行是需要一些條件的

0x45216 execve("/bin/sh", rsp+0x30, environ)
constraints:
  rax == NULL

0x4526a execve("/bin/sh", rsp+0x30, environ)
constraints:
  [rsp+0x30] == NULL

0xf02a4 execve("/bin/sh", rsp+0x50, environ)
constraints:
  [rsp+0x50] == NULL

0xf1147 execve("/bin/sh", rsp+0x70, environ)
constraints:
  [rsp+0x70] == NULL

例如0x4526a,我們需要滿足[rsp+0x30] == NULL這個條件。
當向__malloc_hook寫one_gadget時,如果不滿足one_gadget的條件時,而我們的環境不太好調整,所以無法getshell。
我們可以通過__malloc_hook和realloc_hook相配合的方法來使得one_gadget生效。
以0x4526a這個one_gadget爲例
當eip到達這個位置時,esp爲0x7fffffffdb88
在這裏插入圖片描述
在這裏插入圖片描述
[esp+0x30]=0x00007fffffffdd50
但是我們可以看到[esp+0x38]=NULL。我們可以通過調整esp指針的值來使得新的esp’滿足[esp’+0x30]=[esp+0x38]=NULL。
能夠調整esp的手段就是通過控制__malloc_hook裏面存的__libc_realloc地址來控制push的數量
在這裏插入圖片描述
,所在在這我們只需要向__malloc_hook存入0x7ffff7a916c2,少一個push,esp’=esp+8,所以[esp’+0x30]=[esp+0x38]
在這裏插入圖片描述
在這裏面我們分析的很粗糙,如果要仔細分析的話,要考慮實際的堆棧空間。
實際做題目時,我們可以嘗試幾次,來使得[esp+0x30]滿足條件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章