sql注入相关考题
Posted 安全界 的彭于晏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql注入相关考题相关的知识,希望对你有一定的参考价值。
1.SQL注入的原理
用户 可控参数中注入SQL语法,破坏原有SQL结构,
达到编写程序时意料之外结果的攻击行为
某成因可以归结为以下两个原因叠加造成的:
1.程序编写者在处理应用程序和数据库交互时,
使用字符串拼接的方式构造SQL语句。
2.未对用户可控参数进行足够的过滤便将参数内容拼接进入到SQL查询语句中。
2.sql注入产生原因
sql注入攻击是利用是指利用设计上的漏洞,
在目标服务器上运行Sql语句以及进行其他方式的攻击,
动态生成Sql语句时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要原因。
对于java数据库连接JDBC而言,
SQL注入攻击只对Statement有效,对PreparedStatement是无效的,
这是因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构。
如验证用户是否存在的SQL语句为:
用户名'and pswd='密码
如果在用户名字段中输入: 'or 1=1或是在密码字段中输入:'or 1=1
将绕过验证,但这种手段只对只对Statement有效,
对PreparedStatement无效。相对Statement有以下优点:
1.防注入攻击
2.多次运行速度快
3.防止数据库缓冲区溢出
4.代码的可读性可维护性好
这四点使得PreparedStatement成为访问数据库的语句对象的首选,
缺点是灵活性不够好,有些场合还是必须使用Statement。
3.请简单说下sql注入的原理
通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,
最终达到欺骗服务器执行恶意的SQL命令。
通常未经检查或者未经充分检查的用户输入数据或代码编写问题,意外变成了代码被执行。
注入攻击属于服务端,他与操作系统 数据库类型 脚本类型 无关
4.注入漏洞的手工检测方法
1.“单引号”法
第一种检测SQL注入漏洞是否存在的方法是“单引号”法。
方法很简单,直接在浏览器地址栏中的网址链接后加上一个单引号,
如果页面不能正常显示,浏览器返回一些异常信息,则说明该链接可能存在注入漏洞。
2. 1=1和1=2法
很多时候检测提交包含引号的链接时,会提示非法字符,
或者直接不返回任何信息,但这并不等于不存在SQL注入漏洞。
此时可使用经典的“1=1和1=2”法进行检测。
方法很简单,就是直接在链接地址后分别加上and 1=1和and 1=2进行提交,
如果返回不同的页面,那么说明存在SQL注入漏洞。
3. 现在有很多防注入程序屏蔽了 and、1=1、1=2 类似这样的关键字
在URL地址参数后面加上-1
如果返回的页面和前面不同,是另一则新闻,则表示有注入漏洞 是数字型的注入漏洞
在 URL地址参数后面加上 -0
返回的页面和前面的页面相同,加上-1,返回错误页面,则也表示存在注入漏洞,是数字型的。
4.在URL的地址后面加上url编码'%2B',URL地址变为:http://192.168.109.139/news.asp?id=123'%2B',返回的页面和1同;
加上'%2B'asdf,,返回的页面和1不同,
或者说未发现该条记录,或者错误,则表示存在注入点,是文本型的。
以上是关于sql注入相关考题的主要内容,如果未能解决你的问题,请参考以下文章
安全测试 web安全测试 常规安全漏洞 可能存在SQL和JS注入漏洞场景分析。为什么自己没有找到漏洞,哪么可能存在漏洞场景是?SQL注入漏洞修复 JS注入漏洞修复 漏洞存在场景分析和修复示例(代码片段
spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段