缓冲区溢出漏洞分析共34页文档
WebDAV远程缓冲区溢出漏洞

WebDAV远程缓冲区溢出漏洞WebDAV远程缓冲区溢出漏洞2010年05月06日星期四下午06:56Microsoft Windows 2000 WebDAV远程缓冲区溢出漏洞同样是微软的又一重大漏洞,据说前些年就有牛人发现了这个漏洞,只是最近才公布出来罢了。
虽然WebDav是通过IIS才产生这个漏洞的,但是漏洞本身并不是IIS造成的,而是ntdll.dll里面的一个API函数造成的,也就是说很多调用这个API的应用程序都存在这个漏洞。
好了,不多说了,往下看吧。
二漏洞描述及受影响系统Microsoft IIS 5.0(Internet Infomation Server 5)是Microsoft Windows 2000自带的一个网络信息服务器,其中包含HTTP服务功能。
IIS5默认提供了对WebDAV的支持,WebDAV可以通过HTTP向用户提供远程文件存储的服务。
但是作为普通的HTTP服务器,这个功能不是必需的。
IIS 5.0包含的WebDAV组件不充分检查传递给部分系统组件的数据,远程攻击者利用这个漏洞对WebDAV进行缓冲区溢出攻击,可能以WEB进程权限在系统上执行任意指令。
IIS 5.0的WebDAV使用了ntdll.dll中的一些函数,而这些函数存在一个缓冲区溢出漏洞。
通过对WebDAV的畸形请求可以触发这个溢出。
成功利用这个漏洞可以获得LocalSystem权限。
这意味着,入侵者可以获得主机的完全控制能力。
受影响系统:Microsoft IIS 5.0-Microsoft Windows 2000 Server SP3-Microsoft Windows 2000 Server SP2-Microsoft Windows 2000 Server SP1-Microsoft Windows 2000 Server-Microsoft Windows 2000 Professional SP3-Microsoft Windows 2000 Professional SP2-Microsoft Windows 2000 Professional SP1-Microsoft Windows 2000 Professional-Microsoft Windows 2000 Datacenter Server SP3-Microsoft Windows 2000 Datacenter Server SP2-Microsoft Windows 2000 Datacenter Server SP1-MicrosoftWindows 2000 Datacenter Server-Microsoft Windows 2000 Advanced Server SP3-Microsoft Windows 2000 Advanced Server SP2-Microsoft Windows 2000 Advanced Server SP1-Microsoft Windows 2000 Advanced Server三涉及工具及其使用方法1 Webdavscan.exe(webdav扫描器)2 Ptwebdav.exe(漏洞检测工具)3wd0.3-e.exe 4webdavx3.exe 5webdav.exe 6big5.exe 1Webdavscan.exe:webdav漏洞专用扫描器,红客联盟出品。
(完整word版)缓冲区溢出攻击实验报告

缓冲区溢出攻击实验报告班级: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 回车。
COM组件栈缓冲区溢出漏洞检测技术研究-硕士学位论文.doc

硕士学位论文COM组件栈缓冲区溢出漏洞检测技术研究学位申请人:学科专业:计算机软件与理论指导教师:答辩日期:A Dissertation Submitted to Huazhong University of Science andTechnology for the Degree of Master of EngineeringThe Research on stack buffer overflow detection of COM component Candidate : Zhang ChaoMajor : Computer Software and TheorySupervisor : Prof. Lu YanshengHuazhong University of Science and TechnologyWuhan 430074, P.R.C.January, 2007独创性声明本人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得的研究成果。
尽我所知,除文中已经标明引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写过的研究成果。
对本文的研究做出贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到,本声明的法律结果由本人承担。
学位论文作者签名:日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,即:学校有权保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权华中科技大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
保密□ ,在_____年解密后适用本授权书。
本论文属于学位论文作者签名:指导教师签名:日期:年月日日期:年月日华中科技大学硕士学位论文摘要为了解决软件复用,缩短软件开发时间,降低维护成本和实现程序动态升级,软件设计领域产生了组件化程序设计结构,并且日益成为发展趋势。
缓冲区溢出攻击的分析及防范策略

缓冲区溢出攻击的分析及防范策略系别:计算机科学系班级:网络工程姓名:姚康平学号:3111101157指导教师:乐丁惕时间:2014-11-29目录1、缓冲区溢出攻击简介……………………………….2、缓冲区溢出攻击原理……………………………….3、缓冲区溢出攻击问题……………………………….4、缓冲区溢出攻击危害………………………………..5、缓冲区溢出攻击防范方法……………………………6、缓冲区溢出攻击相关对策…………………………..7、参考文献……………………………………………...一、缓冲区溢出攻击简介缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上。
理想的情况是:程序会检查数据长度,而且并不允许输入超过缓冲区长度的字符。
但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐患。
操作系统所使用的缓冲区,又被称为“堆栈”,在各个操作进程之间,指令会被临时储存在“堆栈”当中,“堆栈”也会出现缓冲区溢出。
二、缓冲区溢出攻击原理通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。
造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。
例如下面程序:void function(char *str) {char buffer[16]; strcpy(buffer,str);}上面的strcpy()将直接把str中的内容copy到buffer中。
这样只要str的长度大于16,就会造成buffer的溢出,使程序运行出错。
存在像strcpy这样的问题的标准函数还有strcat()、sprintf()、vsprintf()、gets()、scanf()等。
当然,随便往缓冲区中填东西造成它溢出一般只会出现分段错误(Segmentation fault),而不能达到攻击的目的。
缓冲区溢出漏洞

缓冲区溢出漏洞IBM软件研究院缓冲区溢出漏洞,是一种在软件中最容易发生的漏洞。
它发生的原理是,由于软件在处理用户数据时使用了不限边界的拷贝,导致程序内部一些关键的数据被覆盖,引发了严重的安全问题。
缓冲区指的是操作系统中用来保存临时数据的空间,一般分为栈和堆两种缓冲区类型。
缓冲区溢出漏洞是一种非常普通、非常危险的漏洞,在各种操作系统、应用软件,甚至是Web应用程序中广泛存在。
利用缓冲区溢出攻击,可以导致程序运行失败、系统当机、重新启动等后果。
更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。
在当前网络与操作系统安全中,50%以上的攻击都是来自于缓冲区溢出漏洞。
而缓冲区溢出中,最为危险的是栈溢出,因为入侵者可以利用栈溢出,在函数返回时改变返回程序的地址,让其跳转到任意地址,带来的一种是程序崩溃导致拒绝服务,另外一种就是跳转并且执行一段恶意代码,然后为所欲为。
这里要澄清一个概念,很多人把缓冲区溢出称之为堆栈溢出漏洞,其实是错误的,堆溢出和栈溢出是两个不同的概念,都属于缓冲区溢出。
平时听说的缓冲区溢出大部分都是属于栈溢出。
由于程序在实现的过程中,往往会自定义一些内存空间来负责接受或者存储数据,这些被直接定义的空间大小是有限的,因此当程序将过多的数据不经检查而直接放入这些空间中时,就会发生栈溢出。
栈溢出最为直接的危害是,这些被过量放进内存空间的数据会将函数的返回地址覆盖。
“返回地址”的概念来自于CPU处理指令的结构设计。
如果程序现在准备调用一个函数,CPU首先会将执行完这个函数后将要执行的指令地址存储到栈空间中,然后CPU开始执行函数,执行完毕,CPUCPU取出前面保存的指令地址,然后接着执行。
这个“返回地址”是保存在栈空间中的,而程序一般定义的空间也是在栈中进行分配的,这就给了我们覆盖这个“返回地址”的机会。
栈是一个先进后出的空间,而堆则恰恰相反,是一个先进先出的空间。
C4-1-2 缓冲区溢出漏洞--堆溢出

4.1.3.1 堆的结构
堆块与堆表 堆表:位于堆区的起始位置,用于索引堆区中 所有堆块的重要信息(包括位置、大小、空闲 与否等)。 堆表的数据结构决定了整个堆区的组织方式, 是快速检索空闲块、保证堆分配效率的关键。 堆表可能会采用平衡二叉树等高级数据结构用 于优化查找效率(往往不止一种数据结构)。
软件安全
C4 典型软件漏洞机理分析
1
提纲
4.1 缓冲区溢出漏洞 缓冲区与内存分布 栈溢出 堆溢出 格式化串漏洞 4.2 Web应用程序漏洞 Web应用安全概述 SQL注入漏洞
2
4.1.3 堆溢出
上一节介绍了栈溢出的原理及利用方法。但 近年来,另一种基于缓冲区溢出的攻击逐渐成为 主流。这种新兴的攻击手法的目标从栈转移到了 Windows的堆管理器。尽管基于堆的攻击要比栈 攻击困难很多,但是相对于栈上的攻击更加难以 防范,所以基于堆的攻击仍然持续增长。
22
4.1.4 格式化串漏洞
适当利用%p、%s、%n等格式符,一个精心构造 的格式化串即可实现对程序内存数据的任意读、任意 写,从而造成信息泄露、数据篡改和程序流程的非法 控制这类威胁。 该系列函数可能产生格式化串漏洞: printf,fprintf,sprintf,snprintf, vprintf, vfprintf, vsprintf,wprintf。。。
堆与栈的区别 栈变量包含函数内部的普通变量、数组等。使 用时不需额外的申请操作,由系统维护。 堆是在程序运行时动态分配的内存。 堆需要使用专有的函数进行申请。(如C语言 中的malloc函数和C++中的new函数等) 一般用一个堆指针来使用申请得到的内存。 使用完毕后需要将堆指针传给堆释放函数回收 5 这片内存,否则会造成内存泄露。
缓冲区溢出漏洞实验

缓冲区溢出漏洞实验⼀、实验简介缓冲区溢出是指程序试图向缓冲区写⼊超出预分配固定长度数据的情况。
这⼀漏洞可以被恶意⽤户利⽤来改变程序的流控制,甚⾄执⾏代码的任意⽚段。
这⼀漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写。
原理详解:缓冲区是内存中存放数据的地⽅。
在程序试图将数据放到机器内存中的某⼀个位置的时候,因为没有⾜够的空间就会发⽣缓冲区溢出。
⽽⼈为的溢出则是有⼀定企图的,攻击者写⼀个超过缓冲区长度的字符串,植⼊到缓冲区,然后再向⼀个有限空间的缓冲区中植⼊超长的字符串,这时可能会出现两个结果:⼀是过长的字符串覆盖了相邻的存储单元,引起程序运⾏失败,严重的可导致系统崩溃;另⼀个结果就是利⽤这种漏洞可以执⾏任意指令,甚⾄可以取得系统root特级权限。
缓冲区是程序运⾏的时候机器内存中的⼀个连续块,它保存了给定类型的数据,随着动态分配变量会出现问题。
⼤多时为了不占⽤太多的内存,⼀个有动态分配变量的程序在程序运⾏时才决定给它们分配多少内存。
如果程序在动态分配缓冲区放⼊超长的数据,它就会溢出了。
⼀个缓冲区溢出程序使⽤这个溢出的数据将汇编语⾔代码放到机器的内存⾥,通常是产⽣root权限的地⽅。
仅仅单个的缓冲区溢出并不是问题的根本所在。
但如果溢出送到能够以root权限运⾏命令的区域,⼀旦运⾏这些命令,那可就等于把机器拱⼿相让了。
通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从⽽破坏程序的堆栈,进⽽运⾏精⼼准备的指令,以达到攻击的⽬的。
⼆、缓冲区溢出实例1、利⽤数组越界进⾏缓冲区溢出#include<stdio.h>void HelloWord(){printf("Hello World");getchar();}void Fun(){int arr[5] = {1,2,3,4,5};arr[6] = (int) HelloWord;}int main(){Fun();return 0;}2、利⽤strcpy()函数进⾏缓冲区溢出攻击#include "stdafx.h"#include <stdio.h>#include <string.h>char shellcode3[] = "\x68\x72\x6F\x63\x41\x68\x47\x65""\x74\x50\xE8\x41\x00\x00\x00\x50\x68\x4C\x69\x62\x72\x68\x4C\x6F""\x61\x64\xE8\x31\x00\x00\x00\x50\x68\x72\x74\x00\x00\x68\x6D\x73""\x76\x63\x54\xFF\xD0\x83\xC4\x08\x68\x65\x6D\x00\x00\x68\x73\x79""\x73\x74\x54\x50\xFF\x54\x24\x14\x83\xC4\x08\x68\x63\x6D\x64\x00""\x54\xFF\xD0\x83\xC4\x14\xEB\x67\x55\x8B\xEC\x64\xA1\x30\x00\x00""\x00\x8B\x40\x0C\x8B\x40\x14\x8B\x00\x8B\x70\x28\x80\x7E\x0C\x33""\x75\xF5\x8B\x40\x10\x8B\xF8\x03\x7F\x3C\x8B\x7F\x78\x03\xF8\x8B""\xDF\x8B\x7B\x20\x03\xF8\x33\xC9\x8B\x34\x8F\x03\xF0\x41\x8B\x54""\x24\x08\x39\x16\x75\xF2\x8B\x54\x24\x0C\x39\x56\x04\x75\xE9\x8B""\x7B\x24\x03\xF8\x8B\x0C\x4F\x81\xE1\xFF\xFF\x00\x00\x8B\x7B\x1C""\x03\xF8\x49\xC1\xE1\x02\x8B\x3C\x0F\x03\xC7\x5D\xC2\x08\x00";#pragma comment(linker, "/section:.data,RWE")void Sub_3(){__asm{mov eax, offset shellcode3jmp eax}}void overflow(const char* input){char buf[8];printf("Virtual address of 'buf' = Ox%p\n", buf);strcpy(buf, input);}void fun(){printf("Function 'fun' has been called without an explicitly invocation.\n");printf("Buffer Overflow attack succeeded!\n");}int main(){printf("Address of 'overflow' = Ox%p\n", overflow);printf("Sddress of 'fun' = Ox%p\n", fun);printf("Sddress of 'Sub3' = Ox%p\n", Sub_3);char input[] = "AAAbbbbbbaaa\xA5\x10\x41\x00";//char input[] = "AAAAAAA";overflow(input);return 0;}3、本次实验⽤的测试代码为:#include <stdio.h>int main(){char *name[2];name[0] = "/bin/sh";name[1] = NULL;execve(name[0], name, NULL);}⼀般情况下,缓冲区溢出会造成程序崩溃,在程序中,溢出的数据覆盖了返回地址。
缓冲区溢出漏洞分析

软件安全概述
软件安全漏洞对生命威胁源自1988两伊战争期间,美国防空导弹 击落伊朗客机,290人遇难,美国的 解释是雷达跟踪软件的含糊和令人 误解的输出显示 鱼鹰V-22倾斜旋翼直升机试飞时, 一条水压线爆裂,软件错误认为备 份系统没有工作,导致飞机坠毁, 4人遇难 2010年英国科学家以身试法,全球 首个被计算机病毒感染的人类,证 明体内的医疗器材(心脏起搏器) 有感染病毒的风险
软件安全概述
软件自诞生,就和BUG形影不离 能被攻击者利用并导致危害的BUG就是软件安全漏洞 (安全漏洞范围更广) 安全漏洞的三个基本元素:
系统的脆弱性或缺陷 攻击者对缺陷的可访问性 攻击者对缺陷的可利用性
软件安全漏洞:在软件需求、开发和配置过程中引入 的缺陷,执行会违反安全策略,具有三个基本元素 CERT公布2006-08年,每年公开漏洞7K-8K个 实际每年新公开漏洞上万个,大量漏洞把持在国家情 报部门、软件厂商、安全公司和黑客团体手中
软件安全概述
软件安全“困境三要素”
可扩展性 为了支持更好的用户感受,软件提供扩展渠道,软件的 可扩展性机制促进现代软件的蓬勃发展; 操作系统通过动态装载设备驱动和模块,浏览器通过脚 本语言、控件和动态装载库支持更好的扩展性; 很难组织攻击者和恶意代码以不可预测的扩展方式入侵 软件和系统,厂商不重视 分析可扩展软件的安全性要比分析不能更改软件的安全 性困难得多
软件安全概述
软件安全“困境三要素”
连通性 接入互联网的计算机数量快速增加,高连通性使小小软 件缺陷造成巨大的影响(蠕虫) 高度连通性也使得网络攻击能够引发现实世界的故障, 电话网、电力网事故(电影:鹰眼) 连通性使得不需人为干预的自动化攻击成为可能,大大 改变了威胁环境,威胁传播范围更大更迅速 在一个普遍依赖软件的高连通性网络中,一旦软件中的 安全漏洞被恶意利用,后果将不仅是计算机短期无法工作, 对正常生活也会造成重要影响