《两个ASP文章系统变量未处理漏洞的防范》补充
本文作者:angel
文章性质:原创
发布日期:2004-04-02
  《黑客防线》第9期我写的《两个ASP文章系统变量未处理漏洞的防范》有一部分代码是行不通的,大家看到炎黄兵团提供的那段修补动网文章的代码:

<%
   rs.movenext
   loop
   end if
   rs.close
  dim key
  dim idid
  idid=replace(request("id")," ","")
  if isnumeric(idid)=0 or idid="" then
  response.write "禁止提交非法语句!"
  response.end
  end if
  sql="select * from article where articleid="&idid
  rs.open sql,conn,1,1
  if rs.eof and rs.bof then
  response.write "没有找到相关文章。"
  response.end
  end if
  if rs("Nkey")<>"" then
  key=rs("Nkey")
  else
  key="None News"
  end if
%>


  仅仅看这段代码是没有问题的。变量ID是放在SQL查询语句前就被处理了。如果检测到用户提交的变量是数字类型以外的字符。就提示“禁止提交非法语句!”。

  不知道大家注意看没有。看到原list.asp文件顶部的代码:

set rs=server.createobject("adodb.recordset")
sql="update article set hits=hits+1 where articleID="&request("id")
rs.open sql,conn,1,3
sql="select Aclass.class,ANclass.Nclass,article.title,article.classid,article.Nclassid from article,Aclass,ANclass where article.classid=Aclass.classid and article.Nclassid=ANclass.Nclassid and article.articleID="&request("id")
rs.open sql,conn,1,1
if not rs.eof then
title=rs("title")
classid=rs("classid")
Nclassid=rs("Nclassid")
classname=rs("class")
Nclassname=rs("Nclass")
end if


  看到了吧?如果配合炎黄兵团的代码。那么上面的代码在检测出用户提交的是非数字类型数据而停止时,title、class、Nclass这几个字段已经被读取出来了。也就是说炎黄兵团的代码是解决不了SQL Injection漏洞的。我们还是可以通过list.asp返回的标题、分类来判断ID后的字查询是否为真。当子查询为真比如1=1的时候。标题和分类都正常显示出来了。当子查询为假比如1=2时,标题就不显示了。

  这都怪我没有事先测试这段代码。误导大家,与《黑客防线》无关。下面告诉大家解决思路。

  把检查ID变量的代码移到lisp.asp的<!--#include file="code.asp"-->下面就可以了,这样就可以在程序执行的时候,最先检测提交的变量如果遇到非法数据。除了我们设置的信息以外。其他本来将会显示的信息连屁也不敢放一个。

  为了弥补我的过错,我提供一个经我绝对忠于原版修改的动网文章3.4安全版,大家可以到下面地址下载:

  中国站长站:http://www3.chinaz.com/download/s/7819.asp

  该系统除了修补所有SQL Injection漏洞外,用户密码还使用MD5加密。其他的地方都没有改。该系统还经过几个搞安全的兄弟测试。可以说宇宙超级霹雳无敌安全。好象动网也停止开发动网文章了。所以推荐大家使用。本来高三了。要停止一切电脑活动。但为了对杂志、读者、用户和朋友们负责。我不得不写一篇“补充”检讨一下。
 
打印这篇文章】【关闭该窗口
Copyright © 2004 Security Angel Team [S4T] All Rights Reserved.