




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
浅析Sql注入 (Sql Injection),什么是Sql注入,随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。 用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。,SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS(Web服务器)日志的习惯,可能被入侵很长时间都不会发觉。 但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据,是高手与“菜鸟”的根本区别。,为什么会用Sql注入,1. 没有使用PreparedStatement对象的setString()等方法进行传参,而是使用的“拼串”方式。 例如:,Sql注入是怎样产生的(Java Web),public foodBean getFoodById(String id) con=this.getCon(); String sql=“select * from foodinfo where foodId =“+id+“; System.out.println(sql); stmt=con.prepareStatement(sql); rs=stmt.executeQuery(); ,导致非法参数传入,构造成非法的sql语句! 例如在此处给id传入值为“ 20 ; (任意sql语句) ; - ”, 构造成 select * from foodinfo where foodId =20 ; (任意sql语句) ; -,怎样进行Sql注入(Java Web),如何测试是否存在Sql注入(一) 示例: 如 http:/localhost:8080/restrantNew/details.jsp?foodID=02 1.在此URL尾处加上单引符号“ ” 2.最终执行的sql语句则是 select * from foodinfo where foodId =20 3.页面出现错误,因为语句中出现未闭合的单引号。 结论:加单引号和不加此单引号返回显示的页面不相同,可判断为此处存在Sql注入漏洞!,怎样进行Sql注入(Java Web),如何测试是否存在Sql注入(二) 有些程序中简单的过滤掉了单引号,如果你用单引号测试,是测不到注入点的 那么,什么样的测试方法才是比较准确呢?答案如下: http:/localhost:8080/restrantNew/details.jsp?foodID=02 and 1=1 http:/localhost:8080/restrantNew/details.jsp?foodID=02 and 1=2 这就是经典的1=1、1=2测试法了,怎么判断呢? 返回正常页面,出现错误,则此处存在Sql注入漏洞!,怎样进行Sql注入(Java Web),SQL注入的一般步骤 (一) 判断环境,寻找注入点,判断数据库类型 根据注入参数类型,在脑海中重构SQL语句的原貌,按参数类型主要分为下面三种 ID=20 这类注入的参数是数字型,SQL语句原貌大致如下: Select * from 表名 where 字段=49 注入的参数为ID=49 And 查询条件,即是生成语句: Select * from 表名 where 字段=49 And 查询条件 type=Student 这类注入的参数是字符型,SQL语句原貌大致概如下: Select * from 表名 where 字段=Student 注入的参数为type=Student and 查询条件 - ,即是生成语句: Select * from 表名 where 字段Student and 查询条件 搜索时没过滤参数的,如keyword=关键字,SQL语句原貌大致如下: Select * from 表名 where 字段 like %关键字% 注入参数省略,怎样进行Sql注入(Java Web),SQL注入的一般步骤 (二) 将查询条件替换成SQL语句,猜解表名、字段名 猜测是否存在此表、和字段 1. And (Select Count(*) from 表名 )=0 2. 表名猜出来后,将Count(*)替换成Count(字段名),用同样的原理猜解字段名。 如果存在,返回正常页面。 如果不存在,返回错误页面。 有人会说:这里有一些偶然的成分,如果表名起得很复杂没规律的,那根本就没得玩下去了。说得很对,这世界根本就不存在100%成功的。 黑客技术,苍蝇不叮无缝的蛋,无论多技术多高深的黑客,都是因为别人的程序写得不严密或使用者保密意识不够,才有得下手。,怎样进行Sql注入(Java Web),SQL注入的一般步骤 (三) 猜测字段内内容 得到字符内容长度 举个例子: 已知表Admin中存在username字段,首先,我们取第一条记录,测试长度 ?id=49 ;and (select top 1 len(username) from Admin)0 - 原理:如果top 1的username长度大于0,则条件成立,返回正常页面; 接着就是1、2、3这样测试下去,一直到条件不成立为止。 比如7成立,8不成立,就是len(username)=8,怎样进行Sql注入(Java Web),SQL注入的一般步骤 (四) 猜测字段内内容 得到字符内容 在得到username的长度后,用unicode(substring(username,N,1)截取第N位字符 再unicode(substring(username,N,1)得到ASCII码, 比如: and (select top 1 unicode(substring(username,1,1) from Admin)0 同样也是用逐步缩小范围的方法得到第1位字符的ASCII码,注意的是英文和数字的ASCII码在1-128之间,可以用折半法加速猜解,如果写成程序测试,效率会有极大的提高。 常用函数补充 Access:asc(字符) SQLServer:unicode(字符) 作用:返回某字符的ASCII码 Access:chr(数字) SQLServer:nchar(数字) 作用:与asc相反,根据ASCII码返回字符,怎样进行Sql注入(Java Web),利用存储过程、内置变量 更方便 SA用户权限,调用系统存储过程 执行命令 exec masterxp_cmdshell “net user name password /add“ 数据库名 db_name() 表名 Select Top 1 name from sysobjects where xtype=U and status0 字段名 Select Top 1 col_name(object_id(foodInfo),1) from sysobjects,经验小结,1.有些人会过滤Select、Update、Delete这些关键字,但偏偏忘记区分大小写,所以大家可以用selecT这样尝试一下。 2.在猜不到字段名时,不妨看看网站上的登录表单,一般为了方便起见,字段名都与表单的输入框取相同的名字。 3.特别注意:地址栏的+号传入程序后解释为空格,%2B解释为+号,%25解释为%号,具体可以参考URLEncode的相关介绍。,附录,附件一:URLUnicode表(节选,主要是非字母的字符,RFC17
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学校电视家管理制度
- 学校课程与管理制度
- 安全与环保管理制度
- 安吉县物业管理制度
- 完美代理商管理制度
- 定量给料机管理制度
- 实训室用品管理制度
- 客户签收单管理制度
- 家具厂员工管理制度
- 家族工厂不管理制度
- 【MOOC】线性代数-华北理工大学 中国大学慕课MOOC答案
- 糖尿病足鞋垫研究报告
- 媒介经营与管理完整课件
- 康复治疗生理学呼吸系统
- 上海市市辖区(2024年-2025年小学五年级语文)人教版期末考试((上下)学期)试卷及答案
- 预应力混凝土方桩施工方案
- 临建集装箱项目施工部署方案
- 11ZJ311地下室防水图集
- 客源国概况课程设计
- 土地整治实施操作手册
- 保定事业单位考试公共基础知识-法律真题试题题库详解
评论
0/150
提交评论