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

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

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

原理

缓冲区溢出(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/20179302yzl/p/9065267.html

时间: 2024-10-29 12:56:20

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

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

教材学习总结 本周主要学习了<网络攻防---技术与实践>第9.10章的内容,主要学习了 恶意代码攻防 与软件安全攻防 恶意代码安全攻防 1.基础知识 恶意代码是指使计算机按照攻击者的意图执行以达到恶意目标的指令集.类型包括:计算机病毒.蠕虫.恶意移动代码.后门.特洛伊木马.僵尸程序.内核套件.融合型恶意代码. 计算机病毒的基本特性:感染性.潜伏性.可触发性.破坏性.衍生性 僵尸网络命令与控制机制包括: (1)基于IRC协议的命令与控制机制 (2)基于HTTP协议的命令与控制机制 (3)基于P2

《网络攻防第八周作业》

网络攻防环境的搭建与测试 环境包括Windows靶机.Linux靶机.Windows攻击机.Linux攻击机下图为四台机器的IP地址截图下图为测试靶机与攻击机之间的连通性测试: kali视频学习: 第31节 kali漏洞利用之SET Social Engineering Toolkit(SET)是一个开源.Python驱动的社会工程学渗透测试工具,提供了非常丰富的攻击向量库.是开源的社会工程学利用套件,通常结合metasploit来使用.1.命令行输入setoolkit打开SET套件 2.如上图

网络攻防第五周作业

1.Web应用程序安全攻防 Web应用体系结构包括浏览器.web服务器.web应用程序数据库.传输协议. Web应用安全威胁和攻击类型:针对浏览器和终端用户的Web浏览安全威胁:系统层安全威胁:Web服务器软件安全威胁:Web应用程序安全威胁:Web数据安全威胁. Web应用安全攻防技术概述 Web应用的信息收集,针对Web应用程序的探测和漏洞发现的技术方法:手工审查Web应用程序结构与源代码.自动下载与镜像Web站点页面.使用Google Hacking技术审查与探测Web应用程序.Web应用

网络攻防第七周作业

教材第七章总结 01 知识要点总结 windows系统的基本架构 1.windows系统的发展与现状 2.windows系统的基本结构 windows系统的安全体系结构与机制 1.windows系统的安全体系结构概述 2.windows认证机制 3.windows系统访问与授权机制 4.windows系统安全审计机制 5.windows系统的其他安全机制 windows系统安全攻防技术 1.windows系统的安全漏洞 2.windows远程口令猜解 3.windows服务远程 4.手动实践:M

《网络攻防》第九周作业

kali视频学习 第36节 压力测试工具1.VoIP压力测试工具web压力测试:2.thc-ssl-dos的验证.3.dhcpig 尝试耗尽所有IP地址4.ipv6工具包5.inundator IDS/IPS/WAF压力测试工具耗尽对方说的日志资源.6.macof可做泛红攻击8.t50压力测试9.无线压力测试mdk3和reaver 第37节 数字取证工具 数字取证技术是将计算机调查和分析技术应用于对潜在的.有法律效力的电子证据的确定与获取,同样他们都是针对黑客和入侵目的的.目的都是保证网络的安全

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

你对师生关系的理解,希望是哪种关系? 处于研究生的我们,自学体系应该相比本科生更加完备.如果到现在获取知识的方式仍是以老师讲为主渠道,那基本上就已经废了.那么老师在我们自学过程中应该扮演什么角色?--引导者.督促者.人都是有惰性的,学习过程中难免会松懈,如果要不断上进,那就需要这么一位"铁面无私"的监督者:尽管我们要以自学为主,但就像自己走完一段陌生的路一样,需要有人导引方向.这是我对这一阶段师生关系的理解,也希望它能出现在我和我的老师之间. 如何提问? 正如老师所说,我们现在遇到的所

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

Q1:你对师生关系的理解,希望是哪种关系? 在我看来,师生关系是一种互相促进,良心发展的关系.师生在互动中所得到的不仅仅是知识的交融,更是心灵的碰撞.学生在获得知识的同时,更多的是收获到了学习的方法以及学习的积极性,与此同时,学生的主动性使得课堂氛围更加活跃,学习氛围更加融洽. Q2:如何提问? 1.找到自己的问题所在,尝试用所学知识或者书本网络资源解决问题. 2.若找不到问题的解决方法,则选择合适的提问方式,向老师提问大致的解决方向,而不是单纯的询问问题答案. 3.在获得解决方法之后,尝试与自

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

Q:你对师生关系的理解,希望是哪种关系? A: 我认为老师(仅仅是名义上的老师除外)分两种,一种是学术型老师,这种老师更为注重教授学生学业.另一种是导向型老师,这种老师也许不会着重学生的学术造诣,但会均衡学生的学术和品格的培养.客观的讲两种导师各有特点,不分高下. 我以前看过浙江大学教授郑强的讲座视频,有一句话记了很多年--"老师不要糊里糊涂的教,学生也不要糊里糊涂的学". 我认同teacher lou对于师生关系的描述,老师愿意教愿意学的学生(有点绕). Q:如何提问? A:没有自己

解题报告——-2018级2016第二学期第三周作业

解题报告——2018级2016第二学期第三周作业 A:[NOIP2002P]过河卒 题目: 描述 如图,A 点有一个过河卒,需要走到目标 B   点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点.例 如上图 C  点上的马可以控制 9 个点(图中的P1,P2 … P8 和 C).卒不能通过对方马的控制点. 棋盘用坐标表示,A 点(0,0).B 点(n,m)(n,m 为不超过 20  的整数,并由键盘输入)

解题报告——2018级2016第二学期第五周作业排座椅

解题报告--2018级2016第二学期第五周作业 F:排座椅 描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来 之后,只有有限的D对同学上课时会交头接耳.同学们在教室中坐成了M行N列,坐在第i行第j列的同学的位置是(i,j),为了方便同学们进出,在教室中设 置了K条横向的通道,L条纵向的通道.于是,聪明的小雪想到了一个办法,或许可以减少上课时学生交头接耳的问题:她打算重新摆放桌椅,改变同学们桌椅