SQL注射原理超浓缩简单篇

这是SQL注射原理的讲解 。

通过暴库,下载数据库,阿剑剑对数据库也有了些感性的认识 。可是,并不是所有时候我们都可以得到别人的数据库并打开来看的 。听说有门技术叫SQL注射,不用下载数据库,也可以得到数据库中的信息 。于是阿剑剑嚷嚷着要学它 。
欠钱:“SQL注射是一门比较有难度的技术,因为要了解它和熟练它需要有ASP和数据库的基础 。你认为自己有资格学习它吗?”
阿剑剑想了一下:“这些基础我是一点都没有啊,可是不是听说市面上有很多SQL注射的傻瓜工具吗?你教会我使用这些工具不就可以了?”
欠钱:“既然如此,那好吧,我首先把SQL最基本的语法告诉你,这样你才好理解那些SQL注射工具上的术语和使用步骤 。”
阿剑剑:“欠钱你真是太好了,感动ing!不过,不会很难吧?”
“当然不难了!”欠钱拍着胸脯 。
一个数据库一般都包含有若干张表,如同我们前面暴出的数据库中admin表包含有管理员信息,而user表则包含有所有的论坛用户信息一样 。以下面这张表为例:
Dv_User
UserID;UserName;UserPassword;UserEmail;UserPost
1;admin;469e80d32c0559f8;eway@aspsky.net;0
2;Test;965eb72c92a549dd;1@2.com;0


这是DVBBS;7.0的数据库中所有用户资料的表,Dv_User;是表名 。每一行代表一个用户,每一列是该用户的某种属性 。我们最感兴趣的自然是用户名与密码这样的属性了 。
SQL是一种用于操作数据库的规范化语言,不同的数据库(MSSQL、MYSQL、ORACLE……)大体上都是一样的 。比如我们要查询数据库中的信息:
select;UserName,UserPassword;from;Dv_User;where;UserID=1;
这就是一个最典型的SQL查询语句,它的意思是,在Dv_User这张表中,将UserID为1的用户名与密码查询出来 。
得到的结果是:admin;469e80d32c0559f8
SELECT语句语法:
SELECT;[列名],[列名2]……;FROM;[表名];WHERE;[限制条件]
例:
SELECT;*;FROM;Dv_User;where;UserID=1;
表示查询UserID为1的所有信息 。
更新:
UPDATE;[表名];SET;[列名]=新值;WHERE;[限制条件]
例:
UPDATE;Dv_User;set;[UserPassword]=’;965eb72c92a549dd’;WHERE;UserName=’admin’
此语句将把Dv_User表中的UserName为admin的那一行中UserPassword的值改为965eb72c92a549dd 。
删除:
DELETE;FROM;[表名];WHERE;[限制条件]
例:
DELETE;FROM;Dv_User;WHERE;UserName=’test’
将用户名为test的那一行从Dv_User表中删除

二、SQL注射漏洞简述
阿剑剑仔细把上面四个SQL语句读了几遍,发现非常的容易,于是虚心请教欠钱:“SQL语法看起来很容易上手嘛,那SQL漏洞是怎么来的呢?”
欠钱打开一个页面,指着里面的代码:
if;id<>"";then
sql="SELECT;*;FROM;[日记];WHERE;id="&id
rs.Open;sql,Conn,1
阿剑剑看了一眼:“哎呀,头晕了!”
欠钱敲了他一下:“关于漏洞的成因我只讲这一次,如果怕难就不知道漏洞的由来了,而且实际上一点也不难的,看好了,我们这段代码是提取自BBSXP论坛的,经过我改动以后,把它做成了一个有漏洞的页面给你讲述SQL漏洞的原理 。”
那张日记的表内容如下:
日记
id;username;title;content;adddate
1;职业欠钱;今天安装了BBSXP;这是5.16版,发现BBSXP体积虽小,可是功能一点也不少.完全够用,不知道安全性怎么样;2005-10-25
2;职业欠钱;再写一个日志吧;多写几个日志看看,玩玩,呵呵,反正这个论坛也只有我一个人在..;555555555好寂寞;2005-10-25
我们访问http://localhost/bbsxp/blog.asp?id=1

的时候结果如图1 。
阿剑剑:“我明白了,访问blog.asp的时候,我们提交的参数id为1,那么放到SQL语句里就变成了:
SELECT;*;FROM;[日记];WHERE;id=1

推荐阅读