研究缓冲区溢出的原理,至少针对两种数据库进行差异化研究
MYSQL与DB2对比
-
账号管理方式
MySQL账号管理的方式与Oracle类似,由MySQL自己管理,账号存储在MySQL数据库的user表中,其账号的组成是有ip地址+用户名组成,而DB2没有自己的用户体系,其认证完全依赖于操作系统的账号。 -
权限管理方式
MySQL的权限管理方式与DB2权限管理方式上相同的地方就是都可以对单独的对象进行授权,都可以做到细粒度的授权。不同之处就是MySQL在账号安全上更胜一筹,其账号组成是由用户名加ip地址构成,也就是说其鉴权需要同时验证用户登录的ip和用户名的合法性,而db2只对连接的账号进行鉴权。MySQL的另一个优点就是对最小单元的对象可以批量进行授权,DB2则不能,相对比较繁琐,这也是DB2需要改进的地方之一。 -
日志管理方式
MySQL数据库使用日志双写的方式来保证数据的完整性与可恢复性,MySQL的事务日志与归档日志两个独立的对象,没有任何因果关系。DB2数据库的归档日志是有事务日志产生的。所以在UDI操作上MySQL数据库的性能要比DB2差一些。 -
锁的管理方式
MySQL使用MVCC模型实现锁的并发控制,DB2使用内存模型实现了锁的并发控制,在并发处理、处理资源冲突上讲MySQL的并发处理能力、锁冲突的方式上要优于DB2。 -
schema的管理方式
MySQL数据库严格意义上讲没有schema的概念,其每个schema相当于独立的一个数据库。db2数据库可以在一个数据库能创建多个schema。这也是MySQL在schema方面存在的不足及需要改进的地方。 -
表空间的管理方式
MySQL数据库在5.6之后才有了表空间的概念,但其在表空间的使用方式上还是与企业级数据库相差很大。MySQL数据库在表空间上支持相对较弱,存在很多的局限性,在条带化及空间的管理上存在软肋。DB2在这些方面做得都十分完善,而且非常健壮易于维护,这些都是MySQL需要加强向企业数据库学习的地方。 -
事物行为的处理方式
MySQL数据库默认在处理事务相关的操作时只是回退上一条语句的状态,而整个事务实际上没有完成(提交或者回滚),而是交由应用程序在检测到这个错误时,选择是提交或者回滚整个事务。DB2数据库对事务的处理方式是当DB2数据库在因锁超时或者其他问题导致异常后,对整个事务进行回滚,而不是回滚到上一个保存点,这是需要特别关注的地方。
针对不同数据类型,研究SQL注入点的发现与注入技术
搜索型注入点
这是一类特殊的注入类型。这类注入主要是指在进行数据搜索时没过滤搜索参数,一般在链接地址有"keyword=关键字",有的不显示的链接地址,而是直接通过搜索框表单提交。
此类注入点提交的 SQL 语句,其原形大致为:select * from 表名 where 字段 like '%关键字%'
当我们提交注入参数为keyword='and[查询条件] and '%'='
,则向数据库提交的完事SQL语句为:
select * from 表名 where 字段 like '%' and [查询条件] and '%'='%'
。
字符型注入点
形如http://****?Class=日期这类注入的参数是"字符",因此称为字符型注入点。
此类注入点提交的 SQL 语句,其原形大致为:select * from 表名 where 字段='日期'
当我们提交注入参数为http://****Class=日期 And[查询条件]时,向数据库提交的完整 SQL 语句为:select * from 表名 where 字段='日期' and [查询条件]
数字型注入点
形如http://****?ID=55,这类注入的参数是"数字",因此称为"数字型注入点"。
此类注入点提交的SQL语句,其原形大致为:select * from 表名 where 字段=55
当我们提交注入参数为http://****?ID=55 And[查询条件]时,向数据库提交的完整 SQL 语句为:select * from 表名 where 字段=55 And [查询条件]
使用两种数据库注入攻击工具
sqlmap
sqlmap简介
sqlmap支持五种不同的注入模式:
- 基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
- 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
- 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
- 联合查询注入,可以使用union的情况下的注入。
- 堆查询注入,可以同时执行多条语句的执行时的注入。
sqlmap部分命令
sqlmap -u “http://www.vuln.cn/post.php?id=1” –dbms mysql –level 3 –dbs
查询有哪些数据库
sqlmap -u “http://www.vuln.cn/post.php?id=1” –dbms mysql –level 3 -D test –tables
查询test数据库中有哪些表
sqlmap -u “http://www.vuln.cn/post.php?id=1” –dbms mysql –level 3 -D test -T admin –columns
查询test数据库中admin表有哪些字段
sqlmap -u “http://www.vuln.cn/post.php?id=1” –dbms mysql –level 3 -D test -T admin -C “username,password” –dump
dump出字段username与password中的数据
SQL Power Injector
简介
SQL Power Injector是一款在.Net 1.1中创建的应用程序,可帮助渗透测试人员在网页上查找和利用SQL注入。支持Windows,Unix和Linux操作系统。
SQL Server,Oracle,MySQL,Sybase / Adaptive Server和DB2兼容。SSL支持,自动从网页上的表单或IFrame加载参数(GET或POST)检测并浏览框架测网站语言的选项检测并添加加载页面进程期间使用的Cookie(Set-Cookie检测)自动查找提交页面,其方法(GET或POST)以不同的颜色显示可以直接在Datagrids中创建/修改/删除加载的字符串和Cookie参数单个SQL注入盲目的SQL注入比较页面的真实和错误响应或cookie中的结果时间延迟SQL注入在自定义浏览器中的响应可以使用HTML上下文颜色查看返回页面的HTML代码源并在其中搜索微调参数和cookie注入
可以参数化预期结果的长度和计数以优化应用程序执行SQL注入所用的时间创建/编辑预设的ASCII字符,以优化盲注SQL请求数/请求速度
多线程(最多可配置50个)选项可以通过空的评论/ ** /针对IDS或过滤器检测来替换空间在发送之前自动编码特殊字符自动检测响应页面中的预定义SQL错误响应页自动检测预定义的单词或句子实时结果将会话保存并加载到XML文件中自动查找正面答案和负面答案页面之间差异的功能
可以创建一个范围列表,它将替换隐藏的SQL注入字符串中的变量(>)并自动为您播放它们使用文本文件中的预定义列表自动重播变量范围
Firefox插件,它将启动SQL Power Injector以及当前网页的所有信息及其会话上下文(参数和cookie)
两个集成工具:Hex和Char编码器和MS SQL @options解释器,可以编辑Referer,可以选择一个用户代理(或者甚至在用户代理XML文件中创建一个),可以使用设置窗口配置应用程序,支持可配置的代理,软件截图。