当前位置: 首页 > 图文教程 > 网络安全 > 黑客技术 > 攻击方式学习之SQL注入(SQL Injection)

黑客技术
黑客利用提供甲流疫苗接种骗术散播电脑病毒
中关村在线的服务器遭到黑客入侵
黑客常用4种攻击手段和应对措施
不用ARP欺骗进行嗅探和会话劫持进行MAC欺骗
重庆银行官网被黑客入侵挂马
网站被攻击的方式和防范黑客攻击的措施
黑客攻击:用DOS命令破解NT系统账号密码
Windows环境下木马程序如何隐藏系统中
最新的QQ空间密码和权限破解的方法
网上看科幻片阿凡达当心挂马站点和钓鱼网站
百度被黑引发中伊互联网红黑客大战
XSS攻击如何实现以及保护Web站点免受跨站点脚本攻击
互联网发展史上的几次影响较大的黑客事件
科技博客网站Techcrunch遭到黑客攻击
防止社交媒介遭受黑客攻击的10个方法
美国会议员网站被黑 贴上反奥巴马总统信息
游侠网Netshow论坛受到DDOS大流量攻击
火车票转让成网络热词 黑客借机挂马
网警摧毁国内最大黑客网 木马产业链规模达百亿
“谷姐”蹿红背后:拒百万广告 遭黑客攻击

黑客技术 中的 攻击方式学习之SQL注入(SQL Injection)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-13   浏览: 195 ::
收藏到网摘: n/a

有些网站将直接拿用户的输入 来拼接SQL语句,进行查询等操作,同时也将错误信息暴露给用户。 这就给不怀好意的同学可乘之机,利用输入一些奇特的查询字符串,拼接成特定的SQL语 句,即可达到注入的目的。不仅可以获取数据库重要信息,权限没有设置好的话甚至可以删除掉整个表。因此,SQL注入漏洞还是相当的严重的。发现以前偶刚学 写的网站的时候也是靠拼接SQL语句吃饭滴……
示例
为了更好了学习和了解SQL注入的方法,做了一个示例网页,界面如下:

点击登陆这块的代码如下,注意第5行,我们使用了拼接SQL语句:
复制代码 代码如下:
详细具体的注入方法就不一一介绍了,欢迎下载该示例程序进行实战演练,点击界面的“注入指南”有详细的注入说明:
复制代码 代码如下:
探测
非常简单,输入一个单引号('),看页面是否出错,要是页面出错了,而且又将错误信息暴露给你了那就太好了。
从错误信息中观察确定是哪种数据库,比如Access,SQL Server等。不同数据库的SQL语句有些差别
静态代码分析,从代码中检查SQL语句是否是由字符串拼接而成。
实施方式
详见示例网站
危害
变态性的,服务器被远程控制,想干嘛干嘛。
盗取性的,盗取了数据库中的机密信息,谋取私利或其他。
破坏性的,直接破坏数据库。
修改性的,篡改数据,比如通过大学成绩查询修改成绩。
我也没干过,想不出来了。
防范
在示例中也说明了如何防范,在这里再精炼一下所谓的防止SQL注入四大法宝:
最小权限原则
特别是不要用dbo或者sa账户,为不同的类型的动作或者组建使用不同的账户,最小权限原则适用于所有与安全有关的场合。
在服务器端对用户输入进行过滤
我 们要对一些特殊字符,比如单引号,双引号,分号,逗号,冒号,连接号等进行转换或者过滤;使用强数据类型,比如你需要用户输入一个整数,就要把用户输入的 数据转换成整数形式;限制用户输入的长度等等。这些检查要放在server运行,client提交的任何东西都是不可信的。
以安全的方式创建SQL语句
不要再用万恶的字符串拼接SQL语句了,使用Parameter对象吧,比如C#中的:
复制代码 代码如下:

string sqlText = "select * from [Users] where UserName = @Name";
SqlParameter nameParm = new SqlParameter("Name", uname);
sqlCmd.CommandText = sqlText;
sqlCmd.Parameters.Add(nameParm);

错误信息不要暴露给用户
当sql运行出错时,不要把数据库返回的错误信息全部显示给用户,错误信息经常会透露一些数据库设计的细节。
特别注意:也许有很多人告诉过你使用存储过程能免受SQL注入攻击。这是错的!这只能阻止某些种类的攻击。比如存在sp_GetName存储过程,我们的代码如下:
复制代码 代码如下:

string name = ...; //name from user
SqlConnection conn = new SqlConnection(...);
conn.Open();
string sqlString = @"exec sp_GetName '" + name + "'";
SqlCommand cmd = new SqlCommand(sqlString, conn);

我们试图输入"Black' or 1=1 --"将会失败,但下面的操作却是合法的:
exec sp_GetName 'Black' insert into Users values(2008, 'Green') -- '
参考资料
Michael Howard, David LeBlanc. "Writing Secure Code"
Mike Andrews, James A. Whittaker "How to Break Web Software"
http://www.secnumen.com/technology/anquanwenzhai.htm