首页  :: 新随笔  :: 订阅 订阅  :: 管理

常用的“万能登陆密码”~

Posted on 2008-02-16 14:06  礼拜一  阅读(2362)  评论(0编辑  收藏  举报
常用的“万能登陆密码”:
 
' or '' = '
 
' or 1=1;--
 
1 or 1=1
 
" or ""="
 
漏洞描述: 

在login.asp中,接收用户输入的Userid和Password数据,并分别赋值给user和pwd,然后再用
 
sql="select * from admin where username="&user&and password="&pwd&"" 
 
这句来对用户名和密码加以验证。  

以常理来考虑的话,这是个很完整的程序了。而在实际的使用过程中,整套程序也的确可能正常使用。  
   
但是如果Userid的值和password的值被赋于:safer' or '1'='1 这时,
 

sql="select * from admin where username="&user&and password="&pwd&"" 

就成了:  
 
sql="select * from reg where user='safer' or '1'='1' and pass='safer' 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 
"Fuck you !"     
response.end     
end if     
next     
%
> 
  

同样是先取得用户输入数据,然后分析用户输入的每一个字符,如发现异常,则转到错误页面。  

if cl="" or us="%" or us="〈" or us="〉" then 这一句中可以加入任意的过滤字符,跟据具体情况而定。  

漏洞修补: 
username=replace(trim(request("username")),"&rsquo;","")    
password=replace(trim(Request("password")),"&rsquo;","")


把“’”给过滤了 
如果你想用“’”当做密码 就用下面的方法 

1、select * from user where user=’ " & User & "’ "  
2、如果返回不为假,则取密码  
pass=rs("passwd")  
3、判断:if pass=password  
4、得出结论。