• 2092阅读
  • 0回复

ASP漏洞分析 [复制链接]

上一主题 下一主题
 
发帖
1272
祝福宝石
0
威望
2160
玛雅之石
0
创造宝石
0
只看楼主 倒序阅读 使用道具 楼主  发表于: 2004-07-22

ASP漏洞分析
对一类ASP安全漏洞的分析及解决方案的探讨
近日,本人用ASP编写一套新闻管理系统。其间从网上查阅了很多相关资料,也下载了不少有关的成套系统。通读了源码后发现了很多问题。在此提出其中较为普遍一例,希望能给大家帮助。

相必大家都很明白,ASP编程中,身份验证是相当重要而常用的。而很多网上的免费ASP程序对这方面处理的却不竟人意。下面以XX工作室出品的一个小系统来看问题具体出在哪里。先来看如部分相关程序:

index.asp:
<HTML><HEAD><TITLE>XX工作室注册系统</TITLE>
<META http-equiv=Content-Type content="text/html;
charset=gb2312"><LINK
href="image/style.css" rel=stylesheet>
<SCRIPT language=JavaScript>
<!--
<!-- hide this script from non-javascript-enabled browsers
function checkform(){
//check the user input value
if( document.Login.UserID.value==""){
alert("请输入用户名!");
document.Login.UserID.focus();
return false;
}
if( document.Login.Password.value==""){
alert("请输入您的密码!");
document.Login.Password.focus();
return false;
}
return true;
}
// stop hiding -->
//-->
</SCRIPT>
<META content="MSHTML 5.50.4807.2300" name=GENERATOR></HEAD>
<BODY bgColor=#000000 leftMargin=0 topMargin=0 marginheight="0"
marginwidth="0">
<TABLE height=600 cellSpacing=0 cellPadding=0 width="100%" border=0>

<TBODY>
<TR>
<TD width="100%" height=14>
<DIV align=center><!--#include file="head.asp" --></DIV>
</TD></TR>
<TR>
<TD vAlign=center align=middle width="100%" bgColor=#7b0000
height=315>
<FORM name=Login onsubmit="return checkform();" action=login.asp
method=post>
<TABLE height=126 cellSpacing=0 borderColorDark=#ff9933
cellPadding=3
width=30% align=center borderColorLight=#000000 border=1>
<TBODY>
<TR>
<TD vAlign=middle align=center width="100%" height=88><FONT
color=#ffffff> 用户名:
<INPUT size=15
name=UserID>
<BR>
<BR>
口 令:
<INPUT
type=password size=15 name=Password>
</FONT> </TD>
</TR>
<TR>
<TD vAlign=center align=left width="100%" bgColor=#7b0000
height=17> <A
href="join.asp"><IMG
src="image/button-join.gif" border=0></A> &n
bsp;
<input type=image src="image/button-login.gif"
align=absMiddle border=0 name="image">
</TD>
</TR></TBODY></TABLE></FORM>
<P></P></TD></TR>
<TR>
<TD vAlign=center align=middle width="100%" bgColor=#7b0000
height=32></TD></TR>
<TR>
<TD width="100%" colSpan=2>
<TABLE height=101 cellSpacing=0 cellPadding=0 width="100%"
bgColor=#000000
border=0>
<TBODY>
<TR>
<TD vAlign=top align=left bgColor=#000000 colSpan=4 height=21>
<HR color=#983625>
</TD></TR>
<TR>
<TD vAlign=center align=middle bgColor=#983625 colSpan=4
height=80>
<!--#include file="copyright.asp" -->
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></BODY></HTML>
处理请求的login.asp程序如下:
<%
dim conn
dim connstr
on error resume next
connstr="DBQ="+server.mappath("db1.mdb")+";DefaultDir=;DRIVER={Microsoft
Acce
ss Driver (*.mdb)};"
set conn=server.createobject("ADODB.CONNECTION")
conn.open connstr
Set rs = Server.CreateObject("ADODB.RecordSet")
user=request.form("UserID")
pwd=request.form("Password")
sql="select * from reg where username="&user&" and password="&pwd&""

rs.open sql,conn,1,1
if not rs.eof then
response.redirect "main.asp"
elseif rs.eof and rs.bof then
response.write "密码错误或没有这个用户<a href=join.asp target=_blank>注册</a>"
end if
%>
大家看过是否发现有何不拖之处?我们分析一下,index.asp中,接收用户输入用户名及密码,并用checkform()函数检查用户名和密码理否为空,如果为空的话,提示出错信息。

在login.asp中,接收用户输入的Userid和Password数据,并分别赋值给user和pwd,然后再用sql="select * from reg w here username="&user&" and password="&pwd&"" 这句来对用户名和密码加以验证。 以常理来考虑的话,这是个很完整的程序了。而在实际的使用过程中,整套程序也的确可能正常使用。
但是如果Userid的值和password的值被赋于:x or1=1
这时,sql="select * from reg where username="&user&" and
password="&pwd&"" 就成了:
sql="select * from reg where user=x or 1=1 and pass=x or 1=1"
怎么样?!我不说大家也明白了吧!
既然有这样的问题,接下来我们就来看看如何解决它。从上面的程序中各位也可以看出,只要对用户输入的数据进行严格过滤就可以了。具体可以参下面的程序:

<%
user=request.from("UserID")
pass=request.from("password")
for i=1 to len(UserID)
cl=mid(UserID,i,1)
if cl="" or us="%" or us="<" or us=">" then
response.redirect "error.htm"
response.end
end if
next
%>
同样是先取得用户输入数据,然后分析用户输入的每一个字符,如发现异常,则转到错误页面。
if cl="" or us="%" or us="<" or us=">" then
这一句中可以加入任意的过滤字符,跟据具体情况而定。

----------------------------------------------
¥*^_^*¥
JAY,我爱你!永远支持你!!!!!!!
就是_(开不了口)已经到了(世界末日)

我想_(简单爱)_可是_(爱在西元前)

你没有看到 ∑═ 锋 ═→ love 静
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
快速回复
限100 字节
批量上传需要先选择文件,再选择上传
 
上一个 下一个

      管理员联系信箱 [email protected] 所有内容均来之互联网,如侵犯您的隐私和权益,请和我们及时联系!