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