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

格式化字符串漏洞学习笔记

简单介绍

格式化字符串漏洞和栈溢出有相似之处,但又有所不同,都是利用了程序员的疏忽大意来改变程序运行的正常流程。

1、格式化字符串的介绍

printf()、fprint()等print()系列的函数可以按照一定的格式将数据进行输出。

实例举例:

printf("I am a %s","student");

执行这条语句后将会返回字符串:I am a student。

这个语句中的printf函数的参数%s就是格式化字符串,它告诉程序将数据以什么格式输出。

2、printf函数一般形式的介绍

printf()函数的一般形式为:printf(“format”,输出表列)

format就表示格式化符号

其中format的结构为:%(标志)(输出最小宽度)(精度)(长度)类型

其中常见的类型有以下几种:

①%d整型输出,%ld长整型输出

②%o以八进制输出

③%x以十六进制形式输出

④%u以十六进制数输出无符号型数据

⑤%c用来输出一个字符

⑥%s用来输出一个字符串

⑦%f用来输出一个实数,以小数形式输出

当我们控制了format参数之后,结合printf()函数的特性就可以进行相应的攻击了。

3、C语言中的格式化函数

C语言中的格式化函数(printf族函数,包括:printf、fprintf、sprintf、snprintf等)允许可变参数,它根据传入的格式化字符串获知可变参数的个数和类型,并依据格式化符号进行参数的输出。

格式化字符串漏洞的利用原理:

如果调用这些函数时,给出了格式化符号串,但没有提供实际对应参数时,这些函数会将格式化字符串后面的多个栈中的内容弹出作为参数,并根据格式化符号将其输出。

4、字符串溢出漏洞利用,常用的格式化符号

在利用格式化字符串溢出的时候,常见的格式化符号有%x,%s,%n:

①当格式化符号为%x时,以16进制的形式输出堆栈的内容;

②当格式化符号为%s时,则输出对应的地址所指向的字符串。

漏洞代码举例:

void function(char *buf){int a=1;printf(buf);}

当向这个函数中传入的字符串为:“%x%x%x”,则输出的结果是将栈中内容按十六进制输出,从而达到窃取栈内容目的。

③当格式化符号为%n时, 他的作用是将格式化函数输出字符串的长度,写入函数参数指定的位置。

解释%n的利用实例:

当一个输出函数的格式化字符为%n。需要注意的是:%n不向printf传递格式化信息,而是令printf把自己到该点已打出的字符总数放到相应变元(未知量)指向的整型变量中。

如:printf(“yuanyexincun%n”,&num)

这条语句将会向整型变量num写入整数5。

5、sprintf()函数的介绍

sprintf()函数的作用是把格式化的数据写入某个字符串缓冲区,函数原型为:

int sprintf(char *buffer,const char *format,[argument]...)

接下来写一个关于sprintf函数的格式化溢出漏洞代码:

int function(int argc,chat *argv[]) //argc表示字符串的个数;argv表示一个字符串{char buffer[100];sprintf(buffer,argv[1]); //argv[1]是一个指向字符串的指针}

这个函数咋一看感觉没什么问题。接一下仔细分析:该函数定义了一个长度为100的数组buffer,用来存放函数接受的字符串argv(此时可能存在缓冲区溢出)。然后调用sprintf函数将格式化数据写入buffer数组中。自此函数分析完毕。

这段代码如果正常输入数据,其实不会影响程序的正常执行,但是当攻击者向这个函数function函数传入的字符串为“aaaabbbb%n”,则最后会将字符串的

长度8,写入到地址为0x61616161(aaaa)的内存单元。(a的ascall码为97,对应的十六进制数为61)

注意事项:当sprintf函数后面没有对应参数时,会从对堆栈中取出一个参数,将其作为整数指针使用。因为aaaabbbb传入栈中是小端存储,所以后入栈的参数是aaaa。

相关文章:

格式化字符串漏洞学习笔记

简单介绍 格式化字符串漏洞和栈溢出有相似之处,但又有所不同,都是利用了程序员的疏忽大意来改变程序运行的正常流程。 1、格式化字符串的介绍 printf()、fprint()等print()系列的函数可以按照一定的格式将数据进行输出。 实例…...

用友NC avatar接口文件上传漏洞

产品简介 用友NC是一款企业级ERP软件。作为一种信息化管理工具,用友NC提供了一系列业务管理模块,包括财务会计、采购管理销售管理、物料管理、生产计划和人力资源管理等,帮助企业实现数字化转型和高效管理。 漏洞介绍 用友 NC avatar接口处…...

【Go语言快速上手(二)】 分支与循环函数讲解

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:Go语言专栏⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习更多Go语言知识   🔝🔝 Go快速上手 1. 前言2. 分支与循环2.1…...

动手写sql 《牛客网80道sql》

第1章:SQL编写基础逻辑和常见问题 基础逻辑 SELECT语句: 选择数据表中的列。FROM语句: 指定查询将要从哪个表中检索数据。WHERE语句: 过滤条件,用于提取满足特定条件的记录。GROUP BY语句: 对结果进行分组。HAVING语句: 对分组后的结果进行条件过滤。O…...

Node.js、Java、Python、PHP在构建BS系统时的特点比较

在现代软件开发领域,构建一个稳定、高效的B/S(浏览器/服务器)系统对于企业的信息化发展至关重要。Node.js、Java、Python和PHP是当下流行的几种后端开发技术,它们各自具有独特的特点和优势。本文将对这几种技术在构建B/S系统时的特…...

快速入门深度学习9.1(用时20min)——GRU

速通《动手学深度学习》9.1 写在最前面九、现代循环神经网络9.1 门控循环单元(GRU)9.1.1. 门控隐状态9.1.1.1. 重置门和更新门9.1.1.2. 候选隐状态9.1.1.3. 隐状态 9.1.3 API简洁实现小结 🌈你好呀!我是 是Yu欸 🌌 20…...

基于51单片机的步进电机调速系统设计

基于51单片机的步进电机调速系统 (仿真+程序+原理图+设计报告) 功能介绍 具体功能: 1.按键可以控制电机正、反转,加、减速,停止; 2.一位7段数码管实时显示档位&#xf…...

postcss概述

PostCSS是一个用于转换CSS的工具,它使用插件来处理CSS,并提供了一种方式来编写可扩展的CSS代码。其主要特点如下: 插件驱动:PostCSS的核心非常轻量级,大部分功能都是通过插件来实现的。这意味着用户可以根据项目的需求…...

【Proteus】51单片机对直流电机的控制

直流电机:输出或输入为直流电能的旋转电机。能实现直流电能和机械能互相转换的电机。把它作电动机运行时是直流电动机,电能转换为机械能;作发电机运行时是直流发电机,机 械能转换为电能。 直流电机的控制: 1、方向控制…...

JET毛选学习笔记:如何利用《实践论》学习实验

一、个人背景介绍 本人本科读的是预防医学专业(因为没考上临床),硕博连读(报名人少,我报了就得了)的时候专业是流行病与卫生统计学,除了学习流行病学、统计学(忘得差不多了&#xf…...

FinalShell 远程连接 Linux(Ubuntu)系统

Linux 系列教程: VMware 安装配置 Ubuntu(最新版、超详细)FinalShell 远程连接 Linux(Ubuntu)系统Ubuntu 系统安装 VS Code 并配置 C 环境 ➡️➡️➡️提出一个问题:为什么使用 FinalShell 连接&#xff0…...

Python零基础从小白打怪升级中~~~~~~~多线程

线程安全和锁 一、全局解释器锁 首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念。 GIL全称global interpreter lock,全局解释器锁。 每个线程在执行的时候都需要先获取GIL,保证同一时刻只…...

【机器学习300问】67、均方误差与交叉熵误差,两种损失函数的区别?

一、均方误差(Mean Squared Error, MSE) 假设你是一个教练,在指导学生射箭。每次射箭后,你可以测量子弹的落点距离靶心的差距(误差)。MSE就像是计算所以射击误差的平方后的平均值。它强调了每一次偏离靶心的…...

SAP打印输出设置

SAP打印输入有很多方式,适合不同的应用场景。 一.打印输出总体概览图 二.前台打印 这个是比较常见的,前端打印的出现减轻了管理员的工作量,用户可以选择自己电脑上的打印机输出,不需要所有打印机都在SAP平台中进行配置&#xff0…...

qt对json文件下,qdatetime时间的正确读写方式

qt 对json文件下qdatetime时间的正确读写方式 被搞了很长时间,最后发现是需要控制格式。 正确方式 // read QByteArray localBytes mapJson["playTime"].toString().toLocal8Bit(); char* char_time localBytes.data(); std::string str_time char_…...

【系统分析师】计算机网络

文章目录 1、TCP/IP协议族1.1 DHCP协议1.2 DNS协议1.3网络故障诊断 2、网路规划与设计2.1逻辑网络设计2.2物理网络设计2.3 分层设计 3、网络接入3.1 接入方式3.2 IPv6地址 4、综合布线技术5、物联网5.1物联网概念与分层5.2 物联网关键技术 6、云计算7、网络存储技术&#xff08…...

DDoS攻击愈演愈烈,谈如何做好DDoS防御

DDoS攻击是目前最常见的网络攻击方式之一,各种规模的企业包括组织机构都在受其影响。对于未受保护的企业来讲,每次DDoS攻击的平均成本为20万美元。可见,我们显然需要开展更多的DDoS防御工作。除考虑如何规避已发生的攻击外,更重要…...

48.基于SpringBoot + Vue实现的前后端分离-雪具销售系统(项目 + 论文PPT)

项目介绍 本站是一个B/S模式系统,采用SpringBoot Vue框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得基于SpringBoot Vue技术的雪具销售系统设计与实现管理工作系统…...

P8715 [蓝桥杯 2020 省 AB2] 子串分值 (双边检测)

# [蓝桥杯 2020 省 AB2] 子串分值 ## 题目描述 对于一个字符串 $S$, 我们定义 $S$ 的分值 $f(S)$ 为 $S$ 中恰好出现一次的字符个数。例如 $f\left({ }^{\prime \prime} \mathrm{aba}{ }^{\prime \prime}\right)1$,$f\left({ }^{\prime \prime} \mathrm{abc}{ }^{…...

(十四)C++自制植物大战僵尸游戏windows平台视频播放实现

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/8UFMs VLC库 在Cocos2d-x游戏开发框架中,没有实现windows平台视频播放的功能,需要自定义实现。在本项目中使用vlc库实现windows平台的视频播放功能。 vlc官网:网址 下载完成后&#x…...

深入理解GCC/G++在CentOS上的应用

文章目录 深入理解GCC/G在CentOS上的应用编译C和C源文件C语言编译C语言编译 编译过程的详解预处理编译汇编链接 链接动态库和静态库静态库和动态库安装静态库 结论 深入理解GCC/G在CentOS上的应用 在前文的基础上,我们已经了解了CentOS的基本特性和如何在其上安装及…...

C语言【复合类型(自定义类型)】

一、结构体 结构体(struct)可以理解为用户自定义的特殊的复合的“数据类型”; 1. 结构体变量的定义和初始化 定义结构体变量的方式: 先声明结构体类型再定义变量名 在声明类型的同时定义变量 // 结构体类型的定义 struct stu {char name[50];int age;…...

【python】初识爬虫

Python爬虫介绍 目录 一、概述二、Python爬虫的基本构成爬虫引擎解析器数据存储三、Python爬虫的主要技术请求与响应URL管理页面解析数据存储四、Python爬虫的应用场景数据采集搜索引擎竞品分析价格监控五、Python爬虫的开发流程六、常用的库...

提高小红书底层逻辑认知+短视频思路打爆笔记+纯带货笔记起号(8节课)

课程内容: 小红书如何0押金开通店铺 .mp4 店铺基础搭建.mp4 小红营的流量从哪里来? 如何用养号发现优质的对标笔记?养号的真正意义是什么?.mp4 什么叫垂类标签? 账号如何打上正确的标签 .mp4 前期笔记是否挂车?不同类型的笔记审核标准是什么?.mp4 如何用…...

力扣:219. 存在重复元素 II

力扣&#xff1a;219. 存在重复元素 II 给你一个整数数组 nums 和一个整数 k &#xff0c;判断数组中是否存在两个 不同的索引 i 和 j &#xff0c;满足 nums[i] nums[j] 且 abs(i - j) < k 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 …...

程序安装 - 笔记

1 程序IOServer,依赖自己开发libs7.so.如何安装程序 要安装依赖于自己开发的 libs7.so 的程序 IOServer,你需要执行以下步骤: 编译 IOServer 程序:确保 IOServer 程序的源代码处于可用状态,并且已经编译成可执行文件。这可能需要执行诸如 make 或者其他编译命令,具体取决…...

文心一言 vs. GPT-4: 全面比较

1. 训练数据和预训练 文心一言 训练数据&#xff1a;文心一言是由中国研究人员开发的中文语言模型。它主要在大量古典中文文学作品上进行训练&#xff0c;包括诗歌、散文和历史文本。这些文学作品涵盖了丰富的中文语言和文化&#xff0c;使得文心一言在传统文化方面具有独特优…...

图书管理系统概述

自友图书馆管理系统解决方案适用于中小学、大中专院校以及企事业单位中小型图书馆的自动化管理需求&#xff0c;其功能覆盖了图书馆自动化集成管理业务流程所包括的所有环节。《图书馆管理系统》首先应该按照我国图书馆行业通用CNMARC格式及《中图法第四版》行业标准开发而成,支…...

中国老铁路增开对国际旅客列车开行

4月13日&#xff0c;中老铁路国际旅客列车开行一周年之际&#xff0c;中老两国铁路部门在中国西双版纳至老挝琅勃拉邦两大著名旅游城市间增开1对国际旅客列车&#xff0c;旅客乘火车可实现两地间当日往返。标题&#xff1a;古道新程——中国老铁路增开国际旅客列车 在这个日新月…...

搭建个人智能家居 4 -WS2812B-RGB灯

搭建个人智能家居 4 - WS2812B-RGB灯 前言说明ESPHomeHomeAssistant 前言 上一篇文章我们已经完成了第一个外设的添加&#xff08;一个LED灯&#xff09;&#xff0c;今天接着来“壮大”这个系统&#xff0c;添加第二个外设“RGB灯”。 环境搭建可以回顾前面的文章。前文回顾&…...

怎样做不用备案的网站/seo 推广怎么做

静态类 vs 普通类静态类与普通类的区别有以下几点&#xff1a;1&#xff09;静态类无法实例化而普通类可以&#xff1b;2&#xff09;静态类只能从System.Object基类继承&#xff1b;普通可以继承其它任何非static和非sealed类&#xff0c;但也只能继承一个类&#xff1b;3&…...

重庆推广网站排名公司/上海企业优化

遗忘MySQL用户密码怎么办&#xff1f;在信息化社会&#xff0c;充分有效地管理和利用各类信息资源&#xff0c;是进行科学研究和决策管理的前提条件。数据库技术是管理信息系统、办公自动化系统、决策支持系统等各类信息系统的核心部分&#xff0c;是进行科学研究和决策管理的重…...

可以做海报的网站/seo网站推广批发

由于众所周知的原因&#xff0c;当下华为手机出现供货短缺的问题&#xff0c;一些无良商家开始炒作华为手机&#xff0c;囤积华为手机然后加价销售&#xff0c;这种方式让第三方商家赚得盆满钵满&#xff0c;却也开始出现一些弊病。从华为官方商城可以看到8GB128GB版华为P40 Pr…...

做网站上面图片的软件/网络营销的八种方式

搜索 bioskey 转载于:https://www.cnblogs.com/yangyh/archive/2010/03/26/1696777.html...

朝阳做网站的公司/广告推送平台

原标题&#xff1a;U盘格式化了怎么恢复数据&#xff1f;恢复原理和方法你了解吗U盘格式化了怎么恢复数据&#xff1f;U盘的全称是USB闪存盘&#xff0c;集中了磁盘存储技术、闪存技术和通用串行总线技术。U盘以其物美价廉的特性受到广泛的喜爱和使用&#xff0c;但U盘有时候会…...

wordpress整站克隆/电脑学校培训

webp格式的图片非常屌&#xff0c;见文章&#xff1a;https://yq.aliyun.com/articles/63830 可是&#xff0c;它有兼容性问题&#xff0c;目前我发现只有基于webkit内核的浏览器才支持&#xff0c;如果ie内核的浏览器打开&#xff0c;根本不会显示webp格式的图片。 那么如何…...