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注入漏洞修复 漏洞存在场景分析和修复示例(代码片段

基于约束的SQL攻击

基于约束的SQL攻击

spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段

MyBatis如何防止SQL注入

MyBatis怎么防止SQL注入