第十一周总结

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

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

1.一、原理程序员

   经过往程序的缓冲区写超出其长度的内容,形成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。形成缓冲区溢出的缘由是程序中没有仔细检查用户输入的参数。例以下面程序:sql

void function(char *str) {shell

char buffer[16]; strcpy(buffer,str);数据库

}编程

上面的strcpy()将直接把str中的内容copy到buffer中。这样只要str的长度大于16,就会形成buffer的溢出,使程序运行出错。存在像strcpy这样的问题的标准函数还有strcat()、sprintf()、vsprintf()、gets()、scanf()等。安全

固然,随便往缓冲区中填东西形成它溢出通常只会出现分段错误(Segmentation fault),而不能达到攻击的目的。最多见的手段是经过制造缓冲区溢出使程序运行一个用户shell,再经过shell执行其它命令。若是该程序属于root且有suid权限的话,攻击者就得到了一个有root权限的shell,能够对系统进行任意操做了。服务器

缓冲区溢出攻击之因此成为一种常见安全攻击手段其缘由在于缓冲区溢出漏洞太广泛了,而且易于实现。并且,缓冲区溢出成为远程攻击的主要手段其缘由在于缓冲区溢出漏洞给予了攻击者他所想要的一切:植入而且执行攻击代码。被植入的攻击代码以必定的权限运行有缓冲区溢出漏洞的程序,从而获得被攻击主机的控制权。cookie

在1998年Lincoln实验室用来评估入侵检测的的5种远程攻击中,有2种是缓冲区溢出。而在1998年CERT的13份建议中,有9份是是与缓冲区溢出有关的,在1999年,至少有半数的建议是和缓冲区溢出有关的。在ugtraq的调查中,有2/3的被调查者认为缓冲区溢出漏洞是一个很严重的安全问题。

1.二、MySQL

     MySQL是最受欢迎的开源SQL数据库管理系统,它由 MySQL AB开发、发布和支持。MySQL AB是一家基于MySQL开发人员的商业公司,它是一家使用了一种成功的商业模式来结合开源价值和方法论的第二代开源公司。MySQL是MySQL AB的注册商标。

    MySQL是一个快速的、多线程、多用户和健壮的SQL数据库服务器。MySQL服务器支持关键任务、重负载生产系统的使用,也能够将它嵌入到一个大配置(mass- deployed)的软件中去.与其余数据库管理系统相比,MySQL具备如下优点:

 (1)MySQL是一个关系数据库管理系统。

 (2)MySQL是开源的。

 (3)MySQL服务器是一个快速的、可靠的和易于使用的数据库服务器。

 (4)MySQL服务器工做在客户/服务器或嵌入系统中。

 (5)有大量的MySQL软件可使用。

1.三、Oracle

       提起数据库,第一个想到的公司,通常都会是Oracle(甲骨文)。该公司成立于1977年,最初是一家专门开发数据库的公司。Oracle在数据库领域一直处于领先地位。 1984年,首先将关系数据库转到了桌面计算机上。而后,Oracle5率先推出了分布式数据库、客户/服务器结构等崭新的概念。Oracle 6独创行锁定模式以及对称多处理计算机的支持……最新的Oracle 8主要增长了对象技术,成为关系—对象数据库系统。目前,Oracle产品覆盖了大、中、小型机等几十种机型,Oracle数据库成为世界上使用最普遍的关系数据系统之一。

  Oracle数据库产品具备如下优良特性。

  (1)兼容性

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

  (2)可移植性

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

  (3)可联结性

  Oracle能与多种通信网络相连,支持各类协议(TCP/IP、DECnet、LU6.2等)。

  (4)高生产率

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

  (5)开放性

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

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

2.一、SQL 注入原理

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

2.二、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 '%关键字%'。

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

3.一、防范方法

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

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

二、经过操做系统使得缓冲区不可执行,从而阻止攻击者殖入攻击代码 
这种方法有效地阻止了不少缓冲区溢出的攻击,可是攻击者并不必定要殖入攻击代码来实现缓冲区溢出的攻击,因此这种方法仍是存在不少弱点的。 

三、利用编译器的边界检查来实现缓冲区的保护 
这个方法使得缓冲区溢出不可能出现,从而彻底消除了缓冲区溢出的威胁,可是相对而言代价比较大。 

四、在程序指针失效前进行完整性检查 
这样虽然这种方法不能使得全部的缓冲区溢出失效,但它的确确阻止了绝大多数的缓冲区溢出攻击,而可以逃脱这种方法保护的缓冲区溢出也很难实现。 

最普通的缓冲区溢出形式是攻击活动纪录而后在堆栈中殖入代码。这种类型的攻击在1996年中有不少纪录。而非执行堆栈和堆栈保护的方法均可以有效防卫这种攻击。非执行堆栈能够防卫全部把代码殖入堆栈的攻击方法,堆栈保护能够防卫全部改变活动纪录的方法。这两种方法相互兼容,能够同时防卫多种可能的攻击。 
剩下的攻击基本上能够用指针保护的方法来防卫,可是在某些特殊的场合须要用手工来实现指针保护。全自动的指针保护须要对每一个变量加入附加字节,这样使得指针边界检查在某些状况下具备优点。 

最为有趣的是,缓冲区溢出漏洞--Morris蠕虫使用了现今全部方法都没法有效防卫的方法,可是因为过于复杂的缘故却不多有人用到。 

在本文中,咱们详细描述和分析了缓冲区溢出的原理,并简单介绍了几种防卫方法。因为这种攻击是目前常见的攻击手段,因此进行这个方面的研究工做是有意义和成效的。 

3.二、根据缓冲区溢出攻击的步骤, 可将经常使用的缓冲区溢出攻击检测技术分为如下 3 种类型:

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

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

(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和盲注两种注入模式,获取数据库权限。
 使用时,用户首先使用该工具生成一个配置文件。在配置文件中,设置注入路径以及注入的各项参数,而后再加载该文件,实施渗透测试。
相关文章
相关标签/搜索