SQL注入攻击概述及

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

SQL注入攻击概述及防范主要内容•SQL注入攻击简介•SQL注入攻击原理•SQL注入攻击过程•SQL注入攻击防范SQL注入简介•程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。•用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQLInjection,即SQL注入。•SQL注入是从正常的端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。•这种攻击的要诀在于将SQL的查询/行为命令通过‘嵌入’的方式放入合法的HTTP提交请求中从而达到攻击者的某种意图。现在很多的动态网页都会从该网页使用者的请求中得到某些参数,然后动态的构成SQL请求发给数据库的。SQL注入攻击原理•SQL语言结构化查询语言。一种用来和数据库交互的语言文本。用于存取数据、查询、更新和管理关系数据库系统,主要功能是同各种数据库建立联系进行沟通。•典型查询语句:sql=“select*fromadminwherename='&name&'andpassword='&pass&'//将用户名和密码放入查询语句中查询数据库//这里大家要注意的是在SQL语句中的变量先是用一个单引号,再用一个双引号,最后用一对&包围上。•SQL注入攻击原理攻击者通过Web应用程序利用SQL语句将非法的数据或字符串插入到服务器端数据库中,获取数据库的管理用户权限,然后将数据库管理用户权限提升至操作系统管理用户权限,控制服务器操作系统,获取重要信息及机密文件。•攻击原理流程图:SQL注入攻击过程•注入攻击一般步骤:1.寻找SQL注入点2.判断数据库类型3.猜解表名、列名4.提升权限进一步攻击SQL注入攻击流程图•寻找注入点方法1.在带有参数的动态网页中添加单引号等字符到提交请求的末尾,根据服务器返回的信息进行判断是否存在注入漏洞。例如:=x’如果服务器返回下面的错误提示:MicrosoftJETDatabaseEngine错误‘80040e14'字符串的语法错误在查询表达式’id=x’中。则存在注入。2.经典1=1、1=2测试法将”and1=1”,”and1=2”分别添加到查询请求的末尾,=xand1=1=xand1=2如果前者显示的页面和原来一样而后者显示的和原来不一样,则说明存在注入漏洞。•判断数据库类型对不同的关系数据库注入攻击的方式不同用Asp搭建的网站常用的关系数据库有以下两种:Access,SQLServer。1.在查询请求末尾处添加”anduse0”,根据返回的错误信息判断。=xanduse0若存在关键字MicrosoftJETDatabaseEngine则数据库类型为Access。若存在关键字MicrosoftODBCSQLServerDriverSQLServer,则数据库类型为SQLServer。2.从Access和SQLServer的区别判断。数据库都有自己的系统表,比如存放数据库中所有对象的表,Access是在系统[msysobjects]中,但在Web环境下读该表会提示“没有权限”,SQLServer是在表[sysobjects]中,在Web环境下可以正常读取。则可以使用以下注入语句进行判断:=xand(selectcount(*)frommsysobjects)0=xand(selectcount(*)fromsysobjects)0•猜解数据库表名,列名1.猜解表名在注入点后加上:“andexists(selectcount(*)from表名)”若页面正常显示,则猜解的表名存在,若结果返回为错误,则表名不存在。如此循环,直至猜到表名为止。2.猜解列名在注入点后加上:“andexists(selectcount(列名)from表名)”若页面正常显示,则该列名存在,若返回错误信息,则该列名不存在。依次循环猜解,知道猜到列名为止。•猜解列的长度猜解语句为:“and(selecttop1len(列名)from表名)x”其中x是数字,需要变换的x就是列的长度值。=xand(selecttop1len(列名)from表名)1、2、3、4都返回正常,猜到5时就出现了错误提示,说明列的长度是5。变换top后的数字就可以猜解这个列的第N行长度。•猜解列的内容猜解用户名和密码需要用到asc和mid这两个函数。用mid(列名,N,1)函数截取第N位字符,再用asc(mid(列名,N,1))函数得到第N位字符的ASCII码。猜解语句为:and(selecttop1asc(mid(列名,列数N,1))from表名)x,x为ASCII码。例如猜解列的第一个数字的ASCII码值=xand(selecttop1asc(mid(列名,1,1))from表名)50,返回正常,继续提交100返回错误,提交80返回正常,一直提交到96正常,提交97返回错误,这样得到了列名的第一行纪录中的第一个字母的ASCII码为97,转换工具就可以得到第一个字母为a。•提升权限进一步攻击进入数据库后台,看能否上传木马得到管理员权限。这是对Access数据库的注入。对于SQLServer的注入有些不同,它的注入不仅可以直接暴出表名和库名,还能直接执行一些命令,比如修改数据库、直接获得管理员权限。SQL注入攻击防范•在服务器进行处理之前对提交的数据的合法性进行检查;•屏蔽出错信息;•替换或删除敏感字符或字符串;•不要用字符串连接建立SQL查询,而应使用SQL变量,因为变量不是可执行脚本;•数据敏感信息应进行加密;•目录最小化权限设置;•修改或者去掉Web服务器上默认的一些危险命令;

1 / 22
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功