2017-2018-2 20179305《网络攻防技术》 第十一周作业

研究缓冲区溢出的原理,至少针对两种数据库进行差异化研究

缓冲区溢出是指当计算机向缓冲区内填充数据位数时,超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上,理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐患。操作系统所使用的缓冲区 又被称为"堆栈"。在各个操作进程之间,指令会被临时储存在"堆栈"当中,"堆栈"也会出现缓冲区溢出。

原理

缓冲区溢出(Buffer Overflow)是计算机安全领域内既经典而又古老的话题。随着计算机系统安全性的加强,传统的缓冲区溢出攻击方式可能变得不再奏效,相应的介绍缓冲区溢出原理的资料也变得“大众化”起来。其中看雪的《0day安全:软件漏洞分析技术》一书将缓冲区溢出攻击的原理阐述得简洁明了。本文参考该书对缓冲区溢出原理的讲解,并结合实际的代码实例进行验证。不过即便如此,完成一个简单的溢出代码也需要解决很多书中无法涉及的问题,尤其是面对较新的具有安全特性的编译器——比如MS的Visual Studio2010。

在计算机内部,输入数据通常被存放在一个临时空间内,这个临时存放的空间就被称为缓冲区,缓冲区的长度事先已经被程序或者操作系统定义好了。向缓冲区内填充数据,如果数据的长度很长,超过了缓冲区本身的容量,那么数据就会溢出存储空间,而这些溢出的数据还会覆盖在合法的数据上,这就是缓冲区和缓冲区溢出的道理。

oracle数据库

Oracle数据库系统是目前世界上应用最广泛的数据库之一,在数据库市场上占有主要份额。鉴于Oracle数据库系统在实际应用中举足轻重的地位,其安全问题的研究就显得尤为重要。缓冲区溢出是一种在各种操作系统应用软件中广泛存在且十分危险的漏洞,利用缓冲区溢出漏洞攻击可以导致程序运行失败,甚至系统崩溃等严重后果,它代表了一类极其严重而且常见的安全威胁。Oracle数据库系统中出现的缓冲区溢出漏洞,给计算机网络带来了严重的危害。如何有效地消除基于缓冲区溢出漏洞的攻击,就成为大家关注的一个焦点。基于缓冲区溢出漏洞的攻击,一般采取如下步骤:首先编写相关程序使缓冲区发生溢出,然后寻找溢出点,最后在溢出点注入恶意代码。其中,寻找溢出点、编写恶意代码是完成攻击的基础,而跳转到溢出点注入恶意代码则是攻击的重难点。

Oracle数据库产品具有以下优良特性

兼容性:Oracle产品采用标准SQL,并经过美国国家标准技术所(NIST)测试。与IBM SQL/DS、DB2、INGRES、IDMS/R等兼容。

可移植性:Oracle的产品可运行于很宽范围的硬件与操作系统平台上。可以安装在70种以上不同的大、中、小型机上;可在VMS、DOS、UNIX、Windows等多种操作系统下工作。

可联结性:Oracle能与多种通讯网络相连,支持各种协议(TCP/IP、DECnet、LU6.2等)。

高生产率:Oracle产品提供了多种开发工具,能极大地方便用户进行进一步的开发。

开放性:Oracle良好的兼容性、可移植性、可连接性和高生产率使Oracle RDBMS具有良好的开放性。

mysql数据库

MySQL是一款开放源代码关系型数据库系统。

MySQL包含的mysql_real_connect()函数不充分检查用户提供的参数值,本地或远程攻击者可以利用这个漏洞进行缓冲区溢出攻击,可能用来破坏数据库或执行任意指令。

攻击者可以利用SQL注入攻击,或者可上传恶意脚本到服务器上,通过传递超长的字符串作为mysql_real_connect()函数参数,可触发溢出,精心构建提交数据可能以数据库进程权限在系统上执行任意指令。

针对不同数据类型,研究SQL注入点的发现与注入技术

SQL 注入原理

SQL 注入指黑客利用一些Web应用程序(如:网站、论坛、留言本、文章发布系统等)中某些存在不安全代码或SQL语句不缜密的页面,精心构造SQL语句,把非法的SQL语句指令转译到系统实际SQL语句中并执行它,以获取用户名、口令等敏感信息,从而达到控制主机服务器的攻击方法。 SQL 注入漏洞是发生于应用程序与数据库层的安全漏洞。简而言之,是在输入的字符串之中注入SQL指令,在设计不良的程序当中忽略了检查,那么这些注入进去的指令就会被数据库服务器误认为是正常的 SQL 指令而运行,因此遭到破坏或是入侵。

SQL 注入分类

按照注入点类型来分类

数字型注入点:在 Web 端大概是 http://xxx.com/news.php?id=1 这种形式,其注入点 id 类型为数字,所以叫数字型注入点。这一类的 SQL 语句原型大概为 select * from 表名 where id=1。

字符型注入点:在 Web 端大概是 http://xxx.com/news.php?name=admin 这种形式,其注入点 name 类型为字符类型,所以叫字符型注入点。这一类的 SQL 语句原型大概为 select * from 表名 where name=‘admin‘。注意多了引号。

搜索型注入点:这是一类特殊的注入类型。这类注入主要是指在进行数据搜索时没过滤搜索参数,一般在链接地址中有“keyword=关键字”,有的不显示在的链接地址里面,而是直接通过搜索框表单提交。 此类注入点提交的 SQL 语句,其原形大致为:select * from 表名 where 字段 like ‘%关键字%‘。

研究缓冲区溢出的防范方法,至少针对两种编程语言进行差异化研究

防范方法

目前有四种基本的方法保护缓冲区免受缓冲区溢出的攻击和影响:

  • 强制写正确的代码的方法

    编写正确的代码是一件非常有意义但耗时的工作,特别像编写C语言那种具有容易出错倾向的程序(如:字符串的零结尾),这种风格是由于追求性能而忽视正确性的传统引起的。尽管花了很长的时间使得人们知道了如何编写安全的程序,具有安全漏洞的程序依旧出现。因此人们开发了一些工具和技术来帮助经验不足的程序员编写安全正确的程序。虽然这些工具帮助程序员开发更安全的程序,但是由于C语言的特点,这些工具不可能找出所有的缓冲区溢出漏洞。所以,侦错技术只能用来减少缓冲区溢出的可能,并不能完全地消除它的存在。除非程序员能保证他的程序万无一失,否则还是要用到以下部分的内容来保证程序的可靠性能。

  • 通过操作系统使得缓冲区不可执行,从而阻止攻击者殖入攻击代码

    这种方法有效地阻止了很多缓冲区溢出的攻击,但是攻击者并不一定要殖入攻击代码来实现缓冲区溢出的攻击,所以这种方法还是存在很多弱点的。

  • 利用编译器的边界检查来实现缓冲区的保护

    这个方法使得缓冲区溢出不可能出现,从而完全消除了缓冲区溢出的威胁,但是相对而言代价比较大。

  • 在程序指针失效前进行完整性检查

    这样虽然这种方法不能使得所有的缓冲区溢出失效,但它的确确阻止了绝大多数的缓冲区溢出攻击,而能够逃脱这种方法保护的缓冲区溢出也很难实现。

最普通的缓冲区溢出形式是攻击活动纪录然后在堆栈中殖入代码。这种类型的攻击在1996年中有很多纪录。而非执行堆栈和堆栈保护的方法都可以有效防卫这种攻击。非执行堆栈可以防卫所有把代码殖入堆栈的攻击方法,堆栈保护可以防卫所有改变活动纪录的方法。这两种方法相互兼容,可以同时防卫多种可能的攻击。

剩下的攻击基本上可以用指针保护的方法来防卫,但是在某些特殊的场合需要用手工来实现指针保护。全自动的指针保护需要对每个变量加入附加字节,这样使得指针边界检查在某些情况下具有优势。

最为有趣的是,缓冲区溢出漏洞--Morris蠕虫使用了现今所有方法都无法有效防卫的方法,但是由于过于复杂的缘故却很少有人用到。

根据缓冲区溢出攻击的步骤, 可将常用的缓冲区溢出攻击检测技术分为以下 3 种类型

  • 基于输入字符串的检测方法
  • 基于保护堆栈中的返回地址的检测方法
  • 基于监视系统调用的检测方法。

    基于输入字符串的检测方法

    对输入的字符串进行检测,确定其为溢出攻击字符串时采取阻拦措施,使攻击者无法注入攻击代码。一般有以下3 种方法构建溢出攻击字符串

    第1种溢出攻击字符串适用于缓冲区大于ShellCode 长度的情况;第2种溢出攻击字符串一般用于缓冲区小于ShellCode 长度的情况;第3种方法是将ShellCode 放在环境变量里,是目前较为常用的方法。

    基于保护堆栈中返回地址的检测方法

    缓冲区溢出攻击最关键的步骤是要通过修改函数返回地址来改变程序的流程, 因此, 在函数调用返回前, 通过检查返回地址是否被修改可以判断是否有缓冲区溢出攻击发生。 该检测的实现可以通过在源码中插入一些约束和判断的模块, 然后在编译后的程序运行期间对有关变量和堆栈区域进行监控,检测是否有攻击发生。 StackGuard 和StackShield 就是这一类型的工具,它们都是 gcc 编译器的扩展工具,用于监控调用的函数返回地址是否正常。

    目前有三种基本的方法保护缓冲区免受缓冲区溢出的攻击和影响

  • 通过操作系统使得缓冲区不可执行,从而阻止攻击者植入攻击代码;
  • 强制写正确的代码的方法;
  • 利用编译器的边界检查来实现缓冲区的保护,使得缓冲区溢出不可能出现,从而完全消除了缓冲区溢出的威胁。

    基于监视系统调用的检测方法

    通过检测是否有 ShellCode 运行可以检测是否发生缓冲区溢出攻击。攻击者既希望 ShellCode 利用获得的权限启动一个交互式的 shell 进程来完成尽量多的事情,又希望 ShellCode 尽量短小从而更加隐蔽,所以绝大多数 ShellCode 都会调用系统函数。 由于监视所有系统调用会耗费大量系统资源, 因此只对 ShellCode 常用的系统调用进行监视, 根据某些特征判断受监视的系统调用是否为非法调用就可确定被保护系统是否遭到缓冲区溢出攻击。

至少使用两种数据库注入攻击工具

Sqlmap

Sqlmap是一种开源的渗透测试工具,可以自动检测和利用SQL注入漏洞以及接入该数据库的服务器。它拥有非常强大的检测引擎、具有多种特性的渗透测试器、通过数据库指纹提取访问底层文件系统并通过外带连接执行命令.

sqlmap支持的数据库有

MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB

检测注入

基本格式

sqlmap -u “http://www.vuln.cn/post.php?id=1

默认使用level1检测全部数据库类型

sqlmap -u “http://www.vuln.cn/post.php?id=1″ –dbms mysql –level 3

指定数据库类型为mysql,级别为3(共5级,级别越高,检测越全面)

跟随302跳转

当注入页面错误的时候,自动跳转到另一个页面的时候需要跟随302,

当注入错误的时候,先报错再跳转的时候,不需要跟随302。

目的就是:要追踪到错误信息。

cookie注入

当程序有防get注入的时候,可以使用cookie注入

sqlmap -u “http://www.baidu.com/shownews.asp” –cookie “id=11″ –level 2(只有level达到2才会检测cookie)

从post数据包中注入

可以使用burpsuite或者temperdata等工具来抓取post包

sqlmap -r “c:\tools\request.txt” -p “username” –dbms mysql 指定username参数

sqlmap详细命令

–is-dba 当前用户权限(是否为root权限)

–dbs 所有数据库

–current-db 网站当前数据库

–users 所有数据库用户

–current-user 当前数据库用户

–random-agent 构造随机user-agent

–passwords 数据库密码

–proxy http://local:8080 –threads 10 (可以自定义线程加速) 代理

–time-sec=TIMESEC DBMS响应的延迟时间(默认为5秒)

sqlsus

sqlsus是使用Perl语言编写的MySQL注入和接管工具。它可以获取数据库结构,实施注入查询,下载服务器的文件,爬取可写目录并写入后门,以及复制数据库文件等功能。它提供Inband和盲注两种注入模式,获取数据库权限。

使用时,用户首先使用该工具生成一个配置文件。在配置文件中,设置注入路径以及注入的各项参数,然后再加载该文件,实施渗透测试。

原文地址:https://www.cnblogs.com/edenfor/p/9065204.html

时间: 2024-10-27 15:36:04

2017-2018-2 20179305《网络攻防技术》 第十一周作业的相关文章

2017-2018-2 20179305《网络攻防技术》第二周作业

Q1 国内外著名黑客介绍 1.国内著名黑客黄鑫简介 黄鑫,网名木马冰河,毕业于西安电子科技大学,职业是网络安全网站"安全焦点"冰河木马软件的创作者. 99年,木马虽然已经在黑客中间遍布使用,但多数为国外的BO和BUS等木马,对于一些刚接触黑客的生手来说,理解这些软件的使用方法和熟练使用这些软件无疑成为了"通往黑客道路"上的最大的难题,此外这些木马多数能够被杀毒软件擒获,使得国内的黑客多数不愿意去用木马.正当国内大多数黑客们苦苦寻觅新的国外木马时,一款中国人自己的编写

2017-2018-2 20179202《网络攻防技术》第二周作业

一.黑客信息 袁仁广,中国国家信息安全漏洞库特聘专家,北京奥运会特聘信息安全专家,现任腾讯湛泸实验室负责人.其领衔的360漏洞研究实验室被誉为"东半球最强大的白帽子军团".他在windows系统方面的造诣,在国内应该是绝对一流.(详见 黑客袁哥:关于我的几个故事) 凯文·米特尼克(Kevin Mitnick)被称为世界上"头号电脑黑客".他是第一个在美国联邦调查局"悬赏捉拿"海报上露面的黑客.他闯入了"北美空中防务指挥系统"的

2017-2018-2 20179302《网络攻防》第十一周作业

研究缓冲区溢出的原理,至少针对两种数据库进行差异化研究 缓冲区溢出是指当计算机向缓冲区内填充数据位数时,超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上,理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐患.操作系统所使用的缓冲区 又被称为"堆栈".在各个操作进程之间,指令会被临时储存在"堆栈"当中,"堆栈"也会出现缓冲区溢出. 原理 缓冲区溢出(B

2017-2018-2 20179209《网络攻防》第十一周作业

研究缓冲区溢出的原理,至少针对两种数据库进行差异化研究 MYSQL与DB2对比 账号管理方式 MySQL账号管理的方式与Oracle类似,由MySQL自己管理,账号存储在MySQL数据库的user表中,其账号的组成是有ip地址+用户名组成,而DB2没有自己的用户体系,其认证完全依赖于操作系统的账号. 权限管理方式 MySQL的权限管理方式与DB2权限管理方式上相同的地方就是都可以对单独的对象进行授权,都可以做到细粒度的授权.不同之处就是MySQL在账号安全上更胜一筹,其账号组成是由用户名加ip地

2017-2018-2 20179317 《网络攻防技术》 第四周作业

网络嗅探技术定义:(1)利用计算机网络接口截获目的地为其他计算机的数据报文(2)监听网络流中所包含的用户账户密码或私密信息等.网络嗅探器(Sniffer):(1)实现嗅探的软件或硬件设备.(2)嗅探获得数据→二进制格式数据报文.(3)解析和理解二进制数据,获取各层协议字段和应用层传输数据→网络协议分析.载波侦听/冲突检测(CSMA/CD)技术:(1)载波侦听是指在网络中的每个站点都具有同等的权利,在传输自己的数据时,首先监听信道是否空闲.如果空闲,就传输自己的数据.如果信道被占用,就等待信道空闲

2017-2018-2 《网络攻防》第五周作业

一Kali视频学习 1.bbqsql 2.HexorBase 3.Jsql 4.Oscanner 5.SIDGusser 6.Sqlsus 7.burpsuits 8.owasp zap 9.webscarab 10.fuzzing工具集 二<网络攻防>学习总结 Web安全攻防技术与实现 web应用程序体系结构及其安全威胁 web应用体系结构 浏览器 web服务器 web应用程序 数据库 传输协议http/https web应用安全威胁 针对浏览器和终端用户的web浏览安全威胁 针对传输网络的

2017-2018-2 20179209《网络攻防》第五周作业

网络攻防之Web渗透 视频学习 数据库评估软件 bbqsql bbqsql是一个Python编写的盲注工具,当检测可疑的注入漏洞时会很有用,同时bbqsql是一个半自动工具,允许客户自定参数. DBPwAudit DBPwAudit是一个数据库用户名和密码枚举工具. HexorBase 图形化的密码破解与连接工具,开源. jsql jsql是一款轻量级安全测试工具,可以探测SQL注入漏洞,它跨平台,开源免费,将存在注入漏洞的URL贴进来即可进行漏洞利用,图形化界面亲民,但使用效果有待提高. MD

2017-2018-2 20179226 《网络攻防》第7周作业

课程学习 1.windows操作系统内核实现的核心机制有: 1)Windows进程和线程管理机制 2)Windows内存管理机制 3)Windows文件管理机制(NTFS) 4)Windows注册表管理机制(注册表中的系统自启动挂接点上注册的应用软件可以随系统引导而自动运行,因此也是很多恶意代码及流氓软件普遍的攻击目标) 5)Windows的网络机制(从OSI网络参考模型的物理层到应用层,各层上对应的Windows网络组件模块) 2.Windows授权与访问控制机制 Windows的授权与访问控

2017-2018-1 20179206《网络攻防实践》第一周作业

a.你对师生关系的理解,希望是哪种关系? 我认为师生关系是一种相互平等交流的关系. 为什么这样说,因为这是由网络攻防实践这门可得特殊性来决定的,网络攻防是门实践课,需要大量的联练习和摸索,同时大部分学生对这一领域不熟悉,需要学习Linux在内的很多新东西,在中间会产生大量的新问题,这些问题需要向老师请教,如果能够尽可能的成为一种相互平等的关系,同学会更乐于去发现问题和请教问题,从而能爱上实践,爱上这门课. b.如何提问? l 提问的内容要先自我独立解决: 作为一门计算机实践课,首先放在第一位的就

2017-2018-2 20179215《网络攻防实践》第一周作业

<网络攻防开发与实践> 第一周作业 一.对师生关系的理解 ?对于研究生和导师的关系就不像中学或大学,仅仅是以传授知识为主,研究生阶段,导师起到引路的作用,给学生指点以及方向,而不仅仅是教学,传授的更应该是方法,因为此时研究生阶段学生有了自己的思想,对事物能进行更深刻的思考,想法往往更加新颖,所以导师引领方向,学生开拓创新. 二.如何提问 顺应:从对方观点中延展出你的问题,不要另起炉灶: 提升:把对方所讲的内容,归纳.升华.拔高,成为更具有概括性,更深刻的大问题,再从这个大问题出发提出你自己具体