libc中的函數(shù)相對于libc的基地址的偏移都是確定的,如果有一道題給你了libc的文件,就可以通過libc文件泄露出system函數(shù)和binsh的地址,然后再構(gòu)造payload。
一般通過write()函數(shù)泄露 ,通過ELF獲得write函數(shù)在got表和plt表中的地址
同時獲得程序start地址 構(gòu)造payload?
payload 一般是填充字符(棧的大?。? ‘a(chǎn)aaa’(覆蓋EBP)+? p32(write_plt) + p32(start)(返回地址) + p32(1)+ p32(write_got)+p32(4)
后面三個是write函數(shù)的參數(shù) write(1,'write_got',4) 4代表輸出4個字節(jié),write_got則為要泄露的地址
binsh在libc中的地址可以直接搜索得到 binsh_libc = libc.search('/bin/sh').next()
其中地址計算如:
libc_base = leak_add - leak_libc(函數(shù)在libc中的偏移)
system_add? = libc_base + system_libc
binsh_add = libc_base + binsh_libc