我正在学习 SQL 注入并想尝试一个。
我创建了一个 Web 应用程序并创建了一个存储过程来访问我的数据库中的一些信息。
这是我的存储过程和 asp .net 应用程序中的代码
Create Procedure spTest
(
@UserName varchar(20),
@UserPwd varchar(max)
)
AS
Begin
Declare @sql varchar(max)
set @sql = 'select UserName,UserPwd from Users where UserName='''+ @UserName+ '''
And UserPwd = '''+ @UserPwd + ''' '
Exec(@sql)
End
C#代码:
string connString = System.Configuration.ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
using (SqlConnection con = new SqlConnection(connString))
{
SqlCommand cmd = new SqlCommand("spTest",con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@UserName",txtUserName.Text);
cmd.Parameters.AddWithValue("@UserPwd", txtPassword.Text);
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
dr.Read();
if (dr.HasRows)
{
labelLogin.Text = "Logged in";
}
else
{
labelLogin.Text = "Not logged in";
}
在用户名的文本框中,我输入bobby' or 1=1--
“bobby”是一个无效的用户名。
现在,我认为应用程序会使用假用户名登录,因为 1=1 始终为真,并且 SQL 语句的其余部分被注释掉。
但是,它显示“未记录”我在这里缺少什么?
谢谢