本帖最后由 彭清贵 于 2013-2-22 23:04 编辑
//用户登录注入漏洞测试
//连接数据库
Console.WriteLine("请输入用户名");
string username = Console.ReadLine();
Console.WriteLine("请输入密码");
string password = Console.ReadLine();
using (SqlConnection coon = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=E:\C#程序\第二阶段\第二阶段\ADO.NET入门\AOD.net.mdf;Integrated Security=True"))
{
coon.Open();
using (SqlCommand cmd = coon.CreateCommand())
{
cmd.CommandText = "select count(*) from fuser where username='" + username + "' and passwors='" + password + "'";//这个是执行的语句
int i = Convert.ToInt32(cmd.ExecuteScalar());这儿是返回的第一列的第一行,这儿和上面的COUNT(*)有什么关联,当上面的代码如果用户名密码都相等就那i就是1,f否则为0,加上1’ or '1'='1 ,那就是username='" + username + "' and passwors='1' or '1'='1'";这样密码就成立了,那我想问一下,是不是如果密码我输错了那便是 cmd.CommandText = "select count(*) from fuser where username='" + username + "' and passwors='" + password + "'";这句话是没有执行还是执行了,话说我没明白"select count(*) from fuser where username='" + username + "' and passwors='" + password + "'";这句话是干啥的,这个查询语句不是返回的*也就是整个表的数量吗 求解
刚才测试下 select count(*) as 数量 from fuser where username='admin' and passwors='888'; 检索出来的数量是3,这3是3个列,和下面的I>0有神马关系啊
if (i > 0)
{
Console.WriteLine("登录成功");
}
else
{
Console.WriteLine("用户名或密码错误");
}
}
}
Console.WriteLine("测试成功");
Console.ReadKey();
|