天天看點

經典的沒有libc類型題目

首先利用write函數來洩露目前libc版本

write函數write(int fd,const void*buf,size_t count);

即構造時

p32(0)+p32(write_addr)+p32(4)是在設定write函數的參數,對應函數原型看一下,32位程式是4位,是以這邊寫的4,對應的64位程式是8位

那麼就是

構造溢出函數+wirte的plt位址來引入wirte函數+main函數(我們要将程式程式重新執行一遍,再次利用輸入點來進構造rop)

知道libc版本後去計算程式裡的system函數和字元串“/bin/sh”的位址

即操作思路就是固定的

offset=write_addr-libc.dump('write') #計算偏移量

system_addr=offset+libc.dump('system') #偏移量=程式裡的函數位址-libc裡的函數位址

bin_sh=offset+libc.dump('str_bin_sh')

最後一步 就是rop鍊