韩冰 发表于 2005-3-20 13:49

SQL注入攻击零距离

SQL注入攻击零距离  
<P><FONT color=#f70909>来源:</FONT><a href="http://www.17nc.com/" target="_blank" ><FONT color=#f70909>http://www.17nc.com/</FONT></A></P>
<P>一次次的SQL注射<a href="http://hackbase.com/hacker" target="_blank" >入侵</A>,一次次的网站被黑,总是那句话,<a href="http://hackbase.com/News/World" target="_blank" >漏洞</A>在所难免,难道一点办法都没吗?这篇文章就是为大家解析下SQL注 射的原理,以及给出一些预防方法。
一:基础篇
分析下<a href="http://hackbase.com/News/World" target="_blank" >漏洞</A>产生的原因,主要还是参数没完全过滤。
cntid = Request("cntid")
这样的语句就存在一个注入<a href="http://hackbase.com/hacker" target="_blank" >攻击</A>,首先,没验证是否为整数
解决方法:
&lt;% dim cntid
cntid =replace(request("cntid "),"","")
if (not isnumeric(cntid)) then
call error
response.end
end if
sub Error()
response.write " &lt;table align=center width=300 border=0
cellpadding=4 cellspacing=0 &gt;"
response.write " &lt;tr &gt; "
response.write " &lt;td colspan=2 height=15&gt; "
response.write " &lt;div align=center&gt;
操作: 参数错误!&lt;/div&gt;"
response.write " &lt;/td&gt;"
response.write " &lt;/tr&gt;"
response.write " &lt;tr&gt; "
response.write " &lt;td colspan=2 height=23&gt; "
response.write " &lt;div align=center&gt;&lt;br&gt;&lt;br&gt;"
response.write " 参数错误!!!非法探测已经被记录 &lt;br&gt;&lt;br&gt;"
response.write " &lt;a href=javascript:onclick=history.go(-1)&gt;返回&lt;/a&gt;"
response.write " &lt;br&gt;&lt;br&gt;&lt;/div&gt;&lt;/td&gt;"
response.write " &lt;/tr&gt; &lt;/table&gt;&lt;/body&gt;&lt;/html&gt;"
end sub
%&gt;

这是一个最基础的过滤,如果提交非法参数效果如图1:


那么我们还需要注意什么?
用户名的注册,必须过滤掉一些特殊符号,继续刚才的话题,我们假设是username.
&lt;% dim username
username =replace(request("username "),"","")
if Instr(username,"=")&gt;0 or Instr(username,"%")&gt;0 or Instr(username,chr(32))&gt;0 or Instr(username,"?")&gt;0 or Instr(username,"&amp;")&gt;0 or Instr(username,";")&gt;0 or
Instr(username,",")&gt;0 or Instr(username,"")&gt;0 or Instr(username,",")&gt;0 or Instr
(username,chr(34))&gt;0 or Instr(username,chr(9))&gt;0 or Instr(username,"?")&gt;0 or
Instr(username,"&gt;")&gt;0 or Instr(username,"&lt;")&gt;0 or Instr(username,"$")&gt;0 or Instr
(username,"#")&gt;0 or Instr(username,"@")&gt;0 then

call error
response.end
end if
sub Error()
response.write " &lt;table align=center width=300 border=0
cellpadding=4 cellspacing=0 &gt;"
response.write " &lt;tr &gt; "
response.write " &lt;td colspan=2 height=15&gt; "
response.write " &lt;div align=center&gt;操作: 参数错
误!&lt;/div&gt;"
response.write " &lt;/td&gt;"
response.write " &lt;/tr&gt;"
response.write " &lt;tr&gt; "
response.write " &lt;td colspan=2 height=23&gt; "
response.write " &lt;div align=center&gt;&lt;br&gt;&lt;br&gt;"
response.write " 用户名中含有非法字符(“=”,“%”,
“?”,“&amp;”,“;”,“,”,“”,”?”,“&gt;”,“&lt;”,“$”,“#”,“@”) &lt;br&gt;&lt;br&gt;"
response.write " &lt;a
href=javascript:onclick=history.go(-1)&gt;返回&lt;/a&gt;"
response.write " &lt;br&gt;&lt;br&gt;&lt;/div&gt;&lt;/td&gt;"
response.write " &lt;/tr&gt; &lt;/table&gt;&lt;/body&gt;&lt;/html&gt;"
end sub
%&gt;
利用这个原理,我们还能过滤一些可能存在cookies跨站脚本的地方:
只要过滤cookie,java这样的字眼,方法同上。需要注意的事,类似与用户登陆的地方,用户名一定要username =replace(request("username "),"",""),意思就是把’过滤成”,这样做的目的就是预防’ or ‘’=’这样的<a href="http://hackbase.com/hacker" target="_blank" >入侵</A>。
可是如果类似www.xx.com/list.asp? action = search
我们可以这样过滤
&lt;% action=request("action")
select case action
case "search"
call search()
case else
call search()
end select
sub search ()
这里是search的内容
end sub
%&gt;
大家可以看到无论对错,都执行search。这样也可以预防SQL。
二:<a href="http://hackbase.com/hacker" target="_blank" >密码</A>安全
采用不可逆加密是必须的选择,防止别人探测到<a href="http://hackbase.com/hacker" target="_blank" >密码</A>后暴力破解,MD5用艿氖迪址浅<虻ィ?姹闳フ腋鯩D5函数体,很多源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>都 带。
&lt;!-- #include file=" md5.asp" --&gt; 这里是引入MD5函数
&lt;% dim username
username =md5(md5(replace(request("username "),"","")))
%&gt;
这里就实现了2次MD5加密,一般2-3次就足够了,暴力破解比较困难:)
COOKIES欺骗问题很严重,所以一般后台管理员一定要session验证。实现方法
我们在登入成功后写入
session("btadmin")=rsadmin("admin")
建立一个验证函数cookies.asp
内容如下
&lt;%
if session("btadmin")="" then
response.redirect "admin.asp"
end if
%&gt;

在每个管理员操作文件的开头加上
&lt;!--#include file="cookies.asp" --&gt;
这样就可以预防非法登陆了:)
我们经常看到验证码这样的东西,这样做是为了预防暴力破解。
实现方法,假设登入为login.asp
我们在开头加:
&lt;%
dim p
randomize ‘对随机数生成器做初始化的动作
p = Int((8999 * Rnd) + 1000)
session("cntcode")=p %&gt;

插入验证<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的表格
&lt;tr&gt;
&lt;td valign=middle&gt;请输入验证码&lt;/td&gt;
&lt;td valign=middle&gt;
&lt;INPUT name=yanzhen type=text&gt;
在左边框输入: &lt;%=session("cntcode")%&gt;&lt;/td&gt;&lt;/tr&gt;

最后验证程序:
&lt;%
if request("yanzhen")="" or trim(session("cntcode"))
&lt;&gt;trim(replace(request("yanzhen"),"","")) then
response.write " 请正确输入您的验证码。"
response.end
else
%&gt;
程序运行效果如图2:

三:<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>安全
爆库的方法越来越多,我们来看下:如图3

按X档案以前文章一位大侠说的,将/替换为 %5c,确实很多网站都存在这样的<a href="http://hackbase.com/News/World" target="_blank" >漏洞</A>。大家可以清楚的看到<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>地址。
偶什么方法可以预防呢?
。。。(<a href="http://hackbase.com/hacker" target="_blank" >代码</A>见杂志)。。。。。。。。。。。

这是一个<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>连接文件,大部分为conn.asp
关键在与on error resume next出错了也执行下一句
我们看下他的运行效果。


除了图片显示不正常外,没暴露<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>:)
其实浪心建议用WIN2003做<a href="http://vip.hackbase.com/" target="_blank" >服务</A>器,当你用%5c 来替换的时候
<a href="http://127.0.0.1/fourm.asp?cntid=4" target="_blank" >_</A>blank&gt;<FONT color=#0000ff>http://127.0.0.1/fourm.asp?cntid=4</FONT></A>
自动换成%5cfourm.asp/多个/
<a href="http://127.0.0.1%5cfourm.asp/?cntid=4" target="_blank" >_</A>blank&gt;<FONT color=#0000ff>http://127.0.0.1%5cfourm.asp/?cntid=4</FONT></A>
找不到<a href="http://vip.hackbase.com/" target="_blank" >服务</A>器,唯一的结果,更厉害:)
还有一种方法就是不让对方下载<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>
方法是
新建一个notdown表,字段为nodown, 数据类型为ole 如图4

保存为mdb.mdb
OK,我们写个nodown.asp
<a href="http://hackbase.com/hacker" target="_blank" >代码</A>如下
。。。(<a href="http://hackbase.com/hacker" target="_blank" >代码</A>见杂志)。。。。。。。。。。。
把他同<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>一同上传到你的空间,或者本地做个IIS,运行nodown.asp
提示添加记录成功。
OK,把<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>重新命名为mdb.asp
直接在浏览器里输入<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>地址:提示
Active Server Pages 错误 ASP 0116
丢失脚本关闭分隔符
/bbs/cntlovebbs.asp,行 44042
Script 块缺少脚本关闭标记(%&gt;)。
用快车下载提示HTTP 500错误
OK到这里<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>安全也过去了:)下面说下浪心新的思维:)没任何<a href="http://hackbase.com/network" target="_blank" >技术</A>难度,会VB的都会写:)
四:安全的后台登入
。。。(<a href="http://hackbase.com/hacker" target="_blank" >代码</A>见杂志)。。。。。。。。。。。

OK了:)程序简单的出奇,他的功能可不小哦:)你的网站可以比以前安全许多。

</P>
页: [1]
查看完整版本: SQL注入攻击零距离