主题:  我想只道这篇文章中的万能密码是什么?

水木

职务:普通成员
等级:1
金币:0.0
发贴:145
#12004/4/12 15:49:47
因为我想测试一下我的程序是否安全.

以下的实例,可能网络上有些网站刚好存在这些问题,希望存在问题的网站能够及时修改程序改正,读者也不要利用这些漏洞做不符合国家法律法规的事情。

1、万能密码
这个漏洞,一些读者可能已经知道,但是,由于网络上依然很多网站存在这些漏洞,我们还是有必要详细、全面的了解这个漏洞的形成原因和严重后果。首先,我们来看看漏洞的产生。这个漏洞是因为在程序验证账号密码的时候程序不严谨造成的。我们在程序设计的时候,常常将账号、密码放在一个叫“User”的数据表中,设置“username”和“password”两个字段,当验证的时候,检查用户的输入是否存在于这个数据表,如果存在,证明这个用户合法;不存在,证明用户不合法。漏洞的出现,就是这个验证代码的编写不严谨造成的,我们来看原代码。
‘连接数据库
Set Conn=Server.CreateObject("ADODB.Connection")
Connstr="DBQ="+server.mappath("db\news.mdb")+";DefaultDir=;DRIVER={Microsoft Access
Driver (*.mdb)};DriverId=25;FIL=MS Access;ImplicitCommitSync=Yes;MaxBufferSize=512;
MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UserCommitSync=Yes;"
‘打开数据库连接
Conn.Open connstr
‘数据库选择语句
mysql="select * from user where userid=’”&txtuserid&”’ and pwd=‘”&txtpwd&” "
set rs=server.createobject("adodb.recordset")
rs.open mysql,conn,1,1

if not (rs.eof) then
rs.close
conn.close
response.redirect"ok_login.asp"
end if

在以上的代码中,我们看mysql的定义,这里的txtuserid和txtpwd都是直接来自用户的输入,如果用户构造特殊的用户名或者密码,就可以直接让这里的Select条件为“真”,完全不必理会是否有合法账号密码。我们这里不直接给出万能密码,希望有经验的读者仔细分析select语句,找出可能的漏洞。



rainbowqqz

职务:普通成员
等级:1
金币:0.0
发贴:30
#22004/4/12 17:02:23
利用SQL注入漏洞来进行跨库查询,先猜WEB路径,再进行跨库查询。代码你自己想。



{ 在指尖上绽放的花朵 }

职务:普通成员
等级:5
金币:14.0
发贴:3209
#32004/4/12 20:10:18
mysql="select * from user where userid=’”&txtuserid&”’ and pwd=‘”&txtpwd&” "


仔细看这句。



绿茶

职务:普通成员
等级:8
金币:10.0
发贴:19267
#42004/4/15 14:44:50
行者在上个帖子中说
引用:
mysql="select * from user where userid=’”&txtuserid&”’ and pwd=‘”&txtpwd&” "


仔细看这句。

如果使用这样的查询,那这个验证形同虚设



缺缺

职务:管理员
等级:8
金币:41.0
发贴:9620
#52004/4/15 15:08:20
germchen在上个帖子中说
引用:
行者在上个帖子中说
引用:
mysql="select * from user where userid=’”&txtuserid&”’ and pwd=‘”&txtpwd&” "


仔细看这句。

如果使用这样的查询,那这个验证形同虚设


那倒也未必
过滤一下字符就可以了



janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#62004/4/15 16:05:21
似乎有全角引号 -_-!