BUUCTF-rip

https://www.cnblogs.com/refrain-again/p/15001283.html

看了这个文章 我起码能理解我们栈溢出的目的

在做题之前 我们需要先理解

栈的存储方法

 从上往下看 就能理解入栈

说回这道题目

为什么这道题目是栈溢出

1.查看基本信息

checksec

 file

是kali下的elf文件 相当于windows 的exe
可执行文件

有main()和fun()

我们把他放入ida

2.ida

主函数的代码

 但是我们发现还有一个fun()函数

 找到我们的进门钥匙

我们发现我们是输入 东西 并且作为 s

s 的类型是 char    占15个字节

我们看看我们需要多少才能达到被调用函数的返回地址

就是我们需要多少字节才能 让被调用函数返回

在ida中很明显告诉我们栈底和栈顶是多少了

因为是64 

rdp是栈底 就是高地址   函数结束地址


rsp是栈顶 就是低地址   函数开始地址 压入栈地址

FH = 15字节

从图里能看见 局部变量的压入 就是我们输入的s 占 15字节

但是前面还有一个被调用函数的基地址 就是rbp 我们也要给他构造

但是这个多大呢

因为这道题目是 64 所以 rbp是 8个字节
如果是 32 就是ebp 占 4个字节
所以我们只需要构造15字节的东西填充s 构造8个字节的东西填充基地址 并且把函数返回地址改为fun函数地址即可

我们也要明白 fun函数开始的地址是什么

 得到函数开始地址

0x401186

这样就能返回到fun函数开始地址

执行fun函数

所以我们开始写exp

from pwn import *
p=remote('node4.buuoj.cn',27408)
payload=b'A'*15+b'B'*8+p64(0x401186+1) 
p.sendline(payload)
p.interactive()

输入二进制15个A和8个B 打包小端序的地址 

其中+1是为了栈平衡 (不明白)

如果脚本结尾忘了加p.interactive(),并且交互完程序并未停止的话,程序会直接被杀掉……然后你就会看到调试时总是莫名其妙的sigkill……

p64()发送数据时,是发送的字节流,也就是比特流(二进制流)

 

成功

 cat flag

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

场景搭建、素材库、在线标绘等,四维轻云地理空间数据云管理平台新增了这些功能

四维轻云是一款地理空间数据云管理平台,具有地理空间数据在线管理、展示及分享等功能。在四维轻云平台中,用户可以不受时间地点的限制,随时随地管理、查看及分享各类地理空间数据。 为了更好地满足用户需求和进行地理空间数据在线管理&#…

Kafka源码分析之Producer数据发送流程(四)

概述 书接上回的producer发送流程,在准备工作完成后,kafka的producer借助Sender和KafkaClient两大组件完成了数据的发送。其底层封装了java的NIO的组件channle以及selector,对于NIO组件不太熟悉的同学可以自行查询相关文档。 下面我整理了k…

gnome换回纵向切换工作区

效果: 思路 最新的debian / ubuntu中用的gnome 4.x,工作区切换变成了左右切换,习惯了上下,真的很不舒服。 而且优化选项里也把设置开关取消掉了,解决方案是使用Vertical overview这个扩展: ## 安装扩展管…

「Bug」OpenCV读取图像为 None 分析

头一次遇到 OpenCV 无法读取图像,并且没有任何提示,首先怀疑的就是中文路径,因为大概率是这个地方出错的,但是修改完依旧是None,这就很苦恼了,分析了下出现None的原因,大概有以下三种情况&#…

docker安装redis

首先到dockerhub搜索redis docker pull redis docker pull redis准备redis的配置文件,因为需要redis的配置文件,这里最好去redis中文官方网站去下载一个redis,使用里面的配置文件即可. 我使用的是redis4.0.11中的配置文件 修改redis.conf配置文件 主要修改的位置如下 # bin…

如何在电脑本地下载镜像重装系统

现在网上随处可以下载操作系统,下载下来的是镜像系统,很多朋友都不知道电脑镜像重装系统是什么意思,怎么用镜像重装系统,今天小编就给大家带来了电脑镜像重装系统是什么意思的相关解答,一起往下看。 电脑镜像重装系统是…

react项目中自定义一个markdown编辑器

Markdown 是一种轻量级标记语言。 Markdown是一种简单的格式化文本的方法,在任何设备上看起来都很棒。它不会做任何花哨的事情,比如改变字体大小、颜色或类型——只是基本的,使用你已经知道的键盘符号。 它还允许人们使用易读易写的纯文本格…

UE5.1.1创建C++工程失败解决办法

闲来无事,更新了一下UE5.1.1,妈蛋创建C项目居然失败, 错误截图如下: 妈蛋,后面一堆乱码,鬼知道是啥错误! 咋解决?步步高打火机,直接复制第一段的Running后面的代码到cmd…

【Linux系统管理进程,运行,挂起,杀死进程和crontab计划任务表的使用以及实验的心得体会】

实验 (1)显示本用户的进程,重定向到file1 top命令如果不加限制,默认是查看所有用户的进程情况top -u [用户名] 可以查看该用户名的所有进程 (2)显示本用户所有进程,重定向到file2 top命令如果…

打造智慧医疗新生态:互联网医院系统源码分析

在数字化时代,医疗行业也在不断地探索新的模式和方法,以更好地服务于人民群众。互联网医院系统作为一种新型医疗服务模式,受到了广泛的关注和热议。下文,小编将为大家介绍互联网医院系统的概念、特点以及如何利用互联网医院系统源…

【JAVAEE】网络原理之网络发展史

目录 🎁1. 独立模式 🎃2. 网络互连 🎈2.1 局域网 LAN ✨2.1.1 基于网线直连 👑2.2.2 基于集线器组建 💋2.2.3 基于交换机组建 👗2.2.4 基于交换机与路由器组建 🎈2.2 广域网 21世纪是一…

香橙派4LTS和树莓派4B构建K8S集群实践之一:K8S安装

目录 1. 说明 1.1 软硬件环境 1.2 设计目标 2 实现 2.1 准备工作 - 香橙派 (k8s-master-1) - 树莓派 (k8s-node-1) - 两派都要干的事 2.2 containerd 安装与设置 2.3 安装 3 遇到的问题 3.1 k8s-master-1 3.2 k8s-node-1 4 相关命令 5 Tips 6 参考 1. 说明 …

反向代理自建教程:你懂的

一、为什么需要自建反代 OpenAI提供了两种访问方式,一种是直接在ChatGPT网页端使用的Access Token方式,这种方式可以免费使用GPT-3.5模型,只需要登录即可使用。但缺点是不稳定,且无法扩展。另一种是使用API,注册用户可…

SpringBoot自动装配原理(附面试快速答法)

文章目录SpringBoot自动装配原理1. 从调用SpringApplication构造器方法开始2. 解析启动类4.按需装配4.1 分析dubbo自动装配5. 如果定义自己的starter6. 面试答法SpringBoot自动装配原理 之前面试被问到这个题目,只会答一些spi、AutoConfigration注解、Import之类的&…

询问ChatGPT的高质量答案艺术——提示工程指南(更新中……)

目录前言一、提示工程简介二、提示技巧2-1、生成法律文件2-2、添加提示技巧三、角色扮演3-1、智能手机产品描述3-2、添加角色扮演四、标准提示4-1、写一篇有关于新智能手机的评论4-2、添加标准提示、角色提示、种子词提示等等五、示例很少、或者没有示例5-1、生成一个手机配置六…

机器学习中的数学原理——过拟合、正则化与惩罚函数

通过这篇博客,你将清晰的明白什么是过拟合、正则化、惩罚函数。这个专栏名为白话机器学习中数学学习笔记,主要是用来分享一下我在 机器学习中的学习笔记及一些感悟,也希望对你的学习有帮助哦!感兴趣的小伙伴欢迎私信或者评论区留言…

Docker系列 基于OpenAI API自建ChatGPT

转自我的博客文章https://blognas.hwb0307.com/linux/docker/4201,内容更新仅在个人博客可见。欢迎关注! 前言 我用帐号/密码使用chatGPT已经有一段时间。但是,我有几个私交较密的朋友,他们并不具备使用chatGPT的条件&#xff1b…

【无功优化】基于多目标差分进化算法的含DG配电网无功优化模型【IEEE33节点】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

java遍历字符串的方法

在 java中,我们需要遍历字符串,如何遍历呢?首先我们先了解一下遍历的概念: 在我们的计算机中,存储的都是二进制数据,为了方便存储和管理,我们把一段数据分成多个字符串。在 java中,遍…

网络IO(non-blocking io)基础

BIO(blocking io) 传统的网络io模式,面向流,一个线程对接一个会话,因此高并发时会因线程阻塞而性能低效 Java代码: public class BIO implements Connector {private Integer port 8080;Overridepublic v…