stylehack总结.缓冲区溢出原理浅析以及防护.

C语言常见漏洞-缓冲区溢出 缓冲区溢出1.原理2.攻击方式2.1 利用shellcode2.2 跳到其它函数2.3 其它情况3.防护3.1 canary(栈保护)3.2 NX3.3 RELRO3.4 PIE 缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量溢出的数据覆盖在合法数据上。 理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐患。 缓冲区溢出有堆缓冲区和栈缓冲区溢出,二者有些不同,大部分情况下都是讨论栈溢出。 1 阅读详情
缓冲溢出; 程序跳转; 长跳转缓冲区;
 
近些年来,黑客攻击事件频繁发生,尤其是缓冲区溢出漏洞攻击占据了网络远程攻击的绝大多数. 因为这类攻击可以使任何人获得系统主机的完全控制权,所以它代表了一类十分严重的攻击.
缓冲区溢出攻击之所以常见,是因为它太常见了,且易于实现, 这完全是软件发展史上不可避免的问题. 缓冲区漏洞是程序员在编写程序时未检查内存空间,导致内存泄漏而引起,以下我们先来简单了解一下它:
 
一、认识缓冲区溢出
缓冲溢出是一种系统攻击的手段,借着在程序缓冲区编写超出其长度的代码,造成溢出,从而破坏其堆栈,使程序执行攻击者在程序地址空间中早已安排好的代码,以达到其目的. 一般黑客攻击root程序,然后执行类似exec(sh)的代码获得root的shell. 它造成了两种严重的后果:
1.     覆盖堆栈的相邻单元. 使程序执行失败, 严重可导致系统崩溃.
2.     可执行认识指令代码,最后获得系统root特级权限.
现在很多人使用C或C++编写程序,但同时太多的人忽略了对其的数组边界检查和类型安全检查,所以现今的大多数溢出都和C语言有关, C语言中中有可能产生溢出的函数有:char s[n],strlen(s),strcpy(dst, src),p=malloc(n),strcat(s,suffix)等等,所以我们要尽可能地避免使用这些危险函数,即使使用,也一定要做严格的检查.为容易理解,我们来看一个简单的程序:
 
/*
 * example.c
 * written by Devil_Angel <Devil___Angel@126.com>
 * gcc –o example example.c
                */
void func(char * str)
{
char buf[8];
strcpy(buf, str);
printf(“%sn”,buf);
}
int main(int argc, char * argv[])
{
If(argc >1)
                            Func(argv[1]);
}//end of main
 
该程序在输入时,并没有对str的大小进行检查便直接送入数组buf,一旦输入超出buf长度,就产生了最简单的溢出,当然象这样的溢出一般只会出现Segmentation fault错误,而不能达到攻击的目的. 这里并没有进一步深入分析,只是让大家对溢出有一个大概的概念,在以后将会对其做进一步的分析.
 
二、缓冲区溢出漏洞攻击方式
最常见的攻击手段是通过制造缓冲区溢出使程序运行一个用户shell,在通过shell执行其他命令. 若该程序输入root且有suid权限的话,攻击者就获得了一个有root权限的shell,此时就可以对系统进行随意操作了.下面我来介绍一下如何控制程序跳转到攻击代码:
l         打开记录(Activation Records)
在程序中,每一个函数调用发生,在堆栈中会留下一个Activation Records,它包括函数结束时返回的地址,攻击者通过溢出这些自动变量,使地址指向攻击程序代码. 通过改变程序的返回地址,当调用结束时,程序就跳到攻击者设定的地址,而不是原地址.这类溢出被称为 stacks mashing attack.
 
l         函数指针(Function Pointers)
void(*foo)(1)定义一个返回函数指针的变量foo, Function Pointers可用来定位任何地址空间. 所以只需在任何空间内的Function Pointers附近找到一个能溢出的缓冲区,然后溢出它来改变Function Pointers. 在某时刻,当程序通过Function Pointers调用函数时,程序的流程就按黑客的意图实现了(典型的溢出程序有:Linux下的Superprobe程序).
 
l         长跳转缓冲区(Longjmpbuffers)
在C语言中,包含了一个简单的检验/恢复系统,称为setjmp/longjmp.即在检验点设定setjmp(buffer),用longjmp(buffer)恢复. 但若攻击者能够进入缓冲区空间,则longjmp(buffer)实际上跳转到攻击者的程序代码. 像Function Pointers, longjmp缓冲区能指向任何地方,所以攻击者要做的就是找到一个可供溢出的buffer即可.
 
最常见的是在一个字符串中综合了代码植入和打开记录. 攻击者定位或提供溢出的自动变量,然后向程序传一个超大字符串,在引发buffer溢出改变打开记录时植入程序代码,由此达到入侵系统的目的.
 
三、应对远程缓冲区溢出攻击
对付缓冲区溢出攻击的方法不少,但常见的也是最重要有一下四种方式:
1.     编写严格的代码
编写正确严格的代码是一件有意义但非常耗时的工作, 有C程序设计或汇编语言经验的人会深有体会,尽管软件的发展经历了不短的时间了,但漏洞程序依旧存在,因此人们开发了一些工具和技术来帮助经验不足的程序员编写安全的程序.例如高级查错工具,如faultinjection等. 这些工具的目的在于通过人为随机地产生一些缓冲区溢出来寻找代码的安全漏洞.但由于C语言的特点,这些工具不可能找出所有的缓冲区溢出漏洞. 所以,侦错技术只能用来减少缓冲区溢出漏洞,并不能完全地消除其存在. 错误的消除还是要靠程序员来编写.
 
2.     不可执行堆栈数据段
通过操作系统时数据断地址空间不可执行,从而使得攻击者不能执行被植入的攻击代码,但攻击者不一定是非要植入攻击代码来实现缓冲区溢出的攻击,所以这种方法还是存在很多弱点的.
 
3.     利用程序编译器的边界检查
植入代码是引起缓冲区溢出的一个方面,改变程序执行流程是另一方面. 而利用编译器边界检查则使得缓冲区溢出不可能实现,从而完全消除了缓冲区溢出的威胁,但相对而言代价较大.
 
4.     指针完整性检查
程序指针完整性检查和边界检查略微不同. 程序指针完整性检查在程序指针被改变之前检测.因此,即便攻击者成功改变了程序的指针,也会因先前检测到指针的改变而失效,这样虽然不能解决所有问题,但它的确阻止了大多数的缓冲区攻击,而且这种方法在性能上有很大的优势,兼容性也很好.
 
从长远来看,要想从根本上消除缓冲区溢出攻击,需要对编程模式或CPU体系的基础性修改才能解决问题. 不过,随着信息技术的飞速发展和人们对网络安全的重视程度不断加深, 缓冲区溢出攻击总会有解决的一天.
 
网络攻防之缓冲区溢出攻击 缓冲区溢出是一种异常现象,当软件向缓冲区中写入数据使缓冲区容量溢出时,会导致相邻存储器位置被覆盖。换句话说,过量的信息被传递到没有足够空间的容器中,而这些信息最终会替换相邻容器中的数据。攻击者可以利用缓冲区溢出修改计算机的内存,以破坏或控制程序的执行。缓冲区或数据缓冲区是一个物理内存存储区,用于在将数据从一个位置移到另一位置时临时存储数据。这些缓冲区通常位于 RAM 内存中。计算机经常使用缓冲区来帮助提高性能。大多数现代硬盘驱动器都利用缓冲的优势来有效地访问数据,并且许多在线服务也使用缓冲区。例如,在线视频 阅读详情

相关推荐

基于单片机的室内空气质量监控系统设计

摘 要 I Abstract II 引 言 1 1 控制系统设计 3 1.1 方案选择 3 1.2 系统控制原理 4 2系统硬件设计 5 2.1 单片机的选择与设计 5 2.2 温湿度模块设计 6 2.3 甲醛采集模块设计 8 2.4 显示器模块设计 9 2.5 按键模块设计 10 2.6 报警模块设计 11 2.7 加湿及风扇模块设计 11 3系统软件设计 13 3.1 总流程方案设计 13 3.2 温湿度获取的软件设计 14 3.3 液晶屏LCD1602的软件设计 15 4系统调试 13 4

Q_1928499906的博客 2700

缓存区溢出的原理分析和防范

缓冲区溢出(buffer-overflow)是一种非常普遍、同时非常危险的漏洞,在各种操作系统、应用软件中广泛存在。

m0_57313444的博客 5824

python爬取《你好, 李焕英》豆瓣评论数据

# 导入工具包 import requests from bs4 import BeautifulSoup import time import pandas as pd import numpy as np # 请求头 headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36'} # =

python技巧分享 3456

缓冲区溢出原理浅析以及防护

【摘要】本文从程序语言本身的缺陷,不够健壮的角度出发,详细分析了缓冲溢出攻击的基本原理,描述了黑客利用缓冲区漏洞进行系统攻击的一般过程,最后又简单讨论了几种防范溢出攻击的策略. 【关键字】缓冲溢出; 程序跳转; 长跳转缓冲区; 近些年来,黑客攻击事件频繁发生,尤其是缓冲区溢出漏洞攻击占据了网络远程攻击的绝大多数. 因为这类攻击可以使任何人获得系统主机的完全控制权,所以它代表了一类十

841

鼎阳示波器SCPI指令与MD5算法解锁带宽升级实战

本文详细介绍了鼎阳示波器通过SCPI指令与MD5算法实现带宽升级的实战流程。从设备连接、信息获取到Python密钥生成脚本解析,逐步指导用户完成升级操作,并涵盖常见问题排查与功能选件激活指南,帮助用户充分释放设备潜能。

www00的博客 346

Modscan32连接上了却没数据?一文拆解所有报错(从“Device NOT CONNECTED”到“Checksum Error”)

本文深入解析Modscan32连接异常问题,从状态栏报错到数据异常,提供系统化的诊断思路和解决方案。涵盖物理层问题、配置参数错位、端口占用冲突等常见故障,帮助工程师快速定位和解决Modbus通信中的各类错误。

weixin_30384217的博客 397

Linux下缓冲区溢出攻击的原理及对策

前言从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用。当函数调用发生时,新的堆栈帧被压入堆栈;当函数返回时,相应的堆栈帧从堆栈中弹出。尽管堆栈帧结构的引入为在高级语言中实现函数或过程这样的概念提供了直接的硬件支持,但是由于将函数返回地址这样的重要数据保存在程序员可见的堆栈中,因此也给系统安全带来了极大的隐患。历史上最著名的缓冲区溢出攻击可能要算是1988年11月2

1万+

从 Classic ABAP 到 ABAP Cloud:一份面向开发者的 SAP 学习路线图与实战指南

ABAP技术演进路线:从语法到架构思维 本文系统梳理了现代ABAP开发者的能力成长路径。在S/4HANA与云时代,ABAP已从传统过程式语言转变为支持面向对象、测试驱动和云原生开发的现代技术栈。学习路线应围绕四大核心维度展开:1) 语言基础(ABAP OO/Modern ABAP);2) 工程化实践(ABAP Unit/ATC/Clean ABAP);3) 数据建模(CDS/AMDP);4) 服务化架构(Gateway/OData/Fiori)。文章强调以交付形态倒推技术栈,通过真实案例展示了如何将零散技术

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 361

缓冲区溢出攻击原理分析

本文从C/C++语言的函数帧结构出发,分析缓冲溢出攻击如果修改eip进而控制执执行shellcode。

海枫的专栏 1万+

OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)

ModbusTCP通信是采用直接方式进行通信,用OPC的方式如何去做呢?PLC作为ModbusTCP服务器,用KepServer作为ModbusTCP客户端,同时作为OPC服务器,PC作为OPC客户端新建项目,加载dll库(利用COM技术写的)添加引用,查看到其中包含了众多方法其中OPCGroups继承于IOPCGroups接口。

分享学习成长历程,Winter is coming! 1万+

【运动规划算法项目实战】Artificial Potential Field算法(附ROS C++代码)

在机器人行业中,路径规划是一个关键的任务,它涉及到如何让机器人在复杂的环境中安全而高效地移动。人工势场算法(Artificial Potential Field Algorithm)是一种常用的路径规划方法,它借鉴了物理学中的势能概念,通过模拟力的作用来引导机器人的移动。本文将详细介绍人工势场算法的原理、在路径规划中的应用、算法优缺点以及代码实现。人工势场算法基于两种势场:斥力场和引力场。斥力场使机器人远离障碍物,而引力场将机器人吸引到目标位置。

xiewf的博客 1万+

“缓冲区溢出攻击”原理分析及实例演示

一.原理分析 缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行失败、系统宕机、重新启动等后果。更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。 要了解缓冲区溢出攻击,就得先了解程序函数调用的栈内存分布: 如上图所示:堆栈帧的顶部为函数的实参,下面是函数的返回地址以及前一个堆栈帧的指针,最

songyux6的专栏 7227

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

(原创)攻击方式学习之(3) - 缓冲区溢出(Buffer Overflow)

堆栈溢出 堆栈溢出通常是所有的缓冲区溢出中最容易进行利用的。了解堆栈溢出之前,先了解以下几个概念: 缓冲区 简单说来是一块连续的计算机内存区域,可以保存相同数据类型的多个实例。 堆栈 堆 栈是一个在计算机科学中经常使用的抽象数据类型。堆栈中的物体具有一个特性:最后一个放入堆栈中的物体总...

weixin_34212189的博客 1471

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

缓冲区溢出原理及防护(05年第六期)

中科院研究生院  蒋 涛 摘 要 本文详细分析了缓冲区溢出的原理,描述了网络攻击者利用缓冲区溢出漏洞进行系统攻击的一般过程,最后简单讨论了几种缓冲区溢出的保护方法。关键词 缓冲区溢出 缓冲区溢出漏洞 安全攻击 缓冲区溢出保护在过去的十年中,以缓冲区溢出为攻击类型的安全漏洞是最为常见的一种形式。更为严重的是,缓冲区溢出漏洞占了远程网络攻击的绝大多数,这种攻击可以使得一个匿名的Internet用户有机

2616

shellcode,缓冲区溢出漏洞及 远程调call

这个函数分配了8个字节的缓冲区,然后通过 strcpy 函数将传进来的字符串复制到缓冲区中,最后输出,如果传入的字符串大于 8的话就会发生溢出,并向后覆盖堆栈中的信息,如果只是一些乱码的话那个最多造成程序崩溃,如果传入的是一段精心设计的代码,那么计算机可能回去执行这段攻击代码。我们的shellcode 不能有00,否则 strcpy 会提前结束,所以 上面的代码中有字符串00结尾,需要我们修改成其他的代码形式。我们只要把返回地址覆盖成我们要执行的代码地址,就可以让该函数返回的时候去顺利执行我们的代码了.

任鸟飞2217777779的博客 1696

【计算机系统】缓冲区溢出攻击概念、演示及防御

是一种常见的安全漏洞,也被称为缓冲区溢出。它发生在程序尝试向缓冲区写入数据时,。这种溢出可能破坏程序的堆栈,使程序转而执行其它指令,从而达到攻击的目的。缓冲区溢出攻击的原理主要是利用程序中存在的缓冲区溢出漏洞。当程序没有仔细检查用户输入的参数时,攻击者可以通过输入超出缓冲区边界的恶意数据来破坏程序的正常执行流程。这些数据可以,导致程序。例如,在一个简单的C语言程序中,如果程序使用固定大小的缓冲区来接收用户输入,而攻击者输入的数据超过该缓冲区的容量,就会发生缓冲区溢出。

obstacle19的博客 1万+

划重点!关于缓冲区溢出攻击,这份防范策略一定要收好!

缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行失败、系统宕机、重新启动等后果。更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。

Hsuesh的博客 4746

缓冲区溢出攻击原理、方法及防范(一)

由于C/C++语言本身没有数组越界检查机制,当向缓冲区里写入的数据超过了为其分配的大小时,就会发生缓冲区溢出。 攻击者可以利用缓冲区溢出来窜改进程运行时栈,从而改变程序的正常流向。在分析缓冲区溢出攻击的原理之前,我们先来 复习一下进程在内存中的结构。 进程在内存中的组织形式 Text段主要包含程序代码(一系列可执行的指令),另外还有一些只读的数据。通常操作系统标记该段为只读段, 如果有进程试图修改该段,会引发段错误。 Data段包括已初始化和未初始化的全局变量,静态变量也放于...

weixin_46663238的博客 5854

内存缓冲区溢出原理和预防措施

长度限制strncpy和snprintf通过允许指定缓冲区大小或最大字符数来防止溢出,而strcpy和sprintf不提供这样的保护。安全性strncpy会在复制数据时考虑目标缓冲区的大小,从而避免超出边界的情况。snprintf会在格式化输出时考虑目标缓冲区的大小,防止格式化输出超过缓冲区限制。缓冲区溢出的风险使用strcpy和sprintf时,开发者必须非常小心输入数据的长度,确保其不会超出目标缓冲区的容量。使用strncpy和snprintf。

weixin_55862182的博客 1899

缓冲区溢出与防护

来实现缓冲区的保护,这个方法使得缓冲区溢出不可能出现,从而完全消除了缓冲区溢出的威胁。等数据均需要存放在一个临时空间内,这个。的存放空间就被称为缓冲区,也就是所说的。缓冲区溢出:计算机程序的一种。,向程序缓冲区写入超长内容,在程序运行过程中,程序的。根本原因是程序中很多。对于软件开发者,使用。

weixin_62707591的博客 1042

缓冲区溢出攻击的原理分析及防范

缓冲区攻击原理及示例

qq_57335073的博客 3287

Windows 远程栈溢出挖掘

title: Windows 远程栈溢出挖掘 date: 2019-04-20 11:22:50 tags: 渗透测试 categories: 渗透测试 copyright: true --- 缓冲区溢出攻击很容易被攻击者利用,因为C/C++语言并没有自动检测缓冲区溢出操作,同时程序编写人员在编写代码时也很难始终检查缓冲区是否可能溢出.利用溢出,攻击者可以将期望数据写入漏洞程序内存中的任意位...

weixin_30667649的博客 503

网络安全远程缓冲区溢出实验

网络安全远程缓冲区溢出实验目录编写CS架构(Server将Client的请求反转并发回)关闭地址随机化ASLR编译 Server 时关闭堆栈不可执行和数据溢出保护编译 Clientgdb 动态调试 Server 获取溢出点的信息PayLoad的构造ShellCode的构造GDB调试内存地址与实际运行地址不一致问题实验成果展示 目录 编写CS架构(Server将Client的请求反转并发回) //Server.c #include <sys/types.h> #include <sys/so

SmallBillows的博客 1846

从崩溃到免疫,C++缓冲区溢出防护的7种高阶策略你掌握了吗?

掌握C++缓冲区溢出防护核心策略,有效提升系统稳定性与安全性。结合2025全球C++及系统软件技术大会前沿成果,详解7种高阶防护技术在内存管理、网络服务与嵌入式场景的应用优势,从崩溃防御到主动免疫,实现代码级安全保障,值得收藏。

FastDebug的博客 621

缓冲区溢出

缓冲区溢出 相关安全文章 概览 描述 风险影响 例子 相关攻击 相关漏洞 相关控制 缓冲区溢出 今天又有点时间,花了大概4个小时不到翻译了这个大概3500字的文章,感觉自己阅读速度真的有待提高。虽说边翻译边看边理解吧,但还是不满意。得多练才行啊…… 原文链接:https://www.owasp.org/index.php/Buffer_Overflow 相关安全文章 ...

Breeze的博客 9910
上一篇: stylehack原创.windows下堆溢出的三种利用方式.
下一篇: Three Rules for Effective Exception Handling(中文)
stylehack
博客等级 码龄19年 0粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值