知识屋:更实用的电脑技术知识网站
所在位置:首页 > 网络安全 > 安全资讯

网站万能密码是什么 菜鸟必读

发布时间:2011-07-27 18:56:44作者:知识屋

 

在登陆后台时,接收用户输入的Userid和Password数据,并分别赋值给user和pwd,然后再用 sql=select * from admin where username=user and password=pwd 这句来对用户名和密码加以验证。 以常理来考虑的话,这是个很完整的程序了,而在实际的使用过程中,整

 

  
在登陆后台时,接收用户输入的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’ 
  
  
有这样的问题,我们就来试着解决它。从上面的程序中各位也可以看出,只要对用户输入的数据进行严格过滤就可以了。如下: 
Quote
〈% 
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 "WL ..jiajia" 
response.end 
end if 
next 
%〉 
同样是先取得用户输入数据,然后分析用户输入的每一个字符,如发现异常,则转到错误页面。 if cl="" or us="%" or us="〈" or us="〉" then 这一句中可以加入任意的过滤字符,跟据具体情况而定。

修补: 
username=replace(trim(request("username")),"’","")
password=replace(trim(Request("password")),"’","")
把“’”给过滤了

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

例如:[/code]Quote
sql="select * from ****_admin where admin_pass=’"&admin_pass&"’ and admin=’"&admin&"’"
rs.open sql,conn,1,3
if not(rs.bof and rs.eof) then
if admin_pass=rs("admin_pass") then
session("admin")=rs("admin")[/code]
当登陆提交用户登陆表单时,数据库会执行以下的代码 
sql=``sele ct * from user s where username=`` and password = ``
一般用`or`=`or`提交进去后,这段代码就会执行这样的程序 。 
sql=``sele ct * from user s where username=` `or`=`or` ` and password = ` `or`=`or` `
`or`的前面一个单引号,就会和数据执行中 username=` 中的这个单引号,形成一个双引号,是由于数据库中 单引号和双引号的区分不是很明确,所以 username=``or`=`or`` 中的两个单引号就会误认为是合法的语法,执行的用户名就是 or`=`or 这样的话,数据库会返回所有用户名,而uers数据库会认为登陆用户合法(密码同理),便而可以进入后台。

常用的后台万能登陆密码:
'or''='
"or=or"
'or''=''or''='
'or'='or'
'or'='1'
'or' '1'='1'
or 'a'='a'

修补方法:
在后台登录文件源代码中找到这些代码: 
<%

pwd = request.form("pwd")

name = request.form("name")

Set rs = Server.CreateObject("ADODB.Connection")

sql = "select * from Manage_User where UserName='" & name & "' And PassWord='"&encrypt(pwd)&"'"
由于接受变量pwd、name时没有做任何处理。才导致这个漏洞。我们要让它进行处理,过滤掉“'”符号。只要把文件改成以下代码即可: 
<%

pwd = replace(trim(request.form("pwd")),"'","")

name = replace(trim(request.form("name")),"'","")

Set rs = Server.CreateObject("ADODB.Connection")

sql = "select * from Manage_User where UserName='" & name & "' And PassWord='"&encrypt(pwd)&"'"

(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜