PDA

View Full Version : ایجاد sql injection



vB.N3T
پنج شنبه 18 مهر 1392, 13:35 عصر
سلام
دوستان من میخوام به فرم لاگینم اینجکشن کنم و از اون رد بشم
اما وقتی دستورات رو میزنم لاگین نمیشه
این دستورات فرم لاگین برنامم هست

private void radButton2_Click(object sender, EventArgs e)
{
if (textBox1.Text == "" || textBox2.Text == "")
{
MessageBox.Show("نام کاربری و رمز عبور را وارد کنید");
}

else
try
{

string a1;
string a2;

SqlConnection Connection = new SqlConnection();
Connection.ConnectionString = "Server=localHost;Database=shop;integrated security=true";
Connection.Open();
SqlCommand Command1 = new SqlCommand();
Command1.Connection = Connection;
Command1.Parameters.AddWithValue("@username", textBox1.Text);
Command1.Parameters.AddWithValue("@password", textBox2.Text);



Command1.CommandText = " select username,password from tbl_admin where username=@username and password=@password";
SqlDataReader one = Command1.ExecuteReader();
one.Read();

a1 = one["username"].ToString();
a2 = one["password"].ToString();
one.Close();
main show = new main();
show.Show();
this.Hide();
}
catch (Exception)
{
MessageBox.Show("یوزنیم یا پسورد اشتباه است");
}

}


تو کادر یوزنیم مثلا میدم alalal
و پسورد هم میدم lkwkkdw
این اشتباه هست و در ادامه پسورد این کد رو مینویسم

lkwkkdw' or '1'='1

ولی لاگین نیشمه !
ممنون میشم کمک کنید

drsina
پنج شنبه 18 مهر 1392, 13:47 عصر
خب اگه اشتباه نکنم ، اگر ازش obj بگیری که دیگه اینجکشن نمیشه !!!
ببین بدون آبجکت سازی میشه یا نه ؟

vB.N3T
پنج شنبه 18 مهر 1392, 13:54 عصر
بی اطلاع هستم..فقط میخوام به به فرم لاگین انجکشن بزنم و ازش رد بشم..فقط حدس میزنم من از پارامتر استفاده کردم و این داره جلو اینجکشن رو میگیره !! ایا صحیحه !؟

fa_afshar
پنج شنبه 18 مهر 1392, 14:39 عصر
سلام دوست عزیز...
اولا که در دستور شما injection ایجاد نمیشه به دلیل این که شما از Parameters.AddWithValue استفاده کردید.... برای ایجاد injection شما باید پارامتر را به صورت مستقیم به کوئری پاس کنید .
نکته دوم این که همیشه ایتدا متن کوئری را بنویسید سپس پارامترها را پاس کنید...!

vB.N3T
پنج شنبه 18 مهر 1392, 15:12 عصر
مشیه کد رو اصلاح کنید ؟ ممنون میشم

fa_afshar
سه شنبه 23 مهر 1392, 11:06 صبح
private void radButton2_Click(object sender, EventArgs e)
{
if (textBox1.Text == "" || textBox2.Text == "")
{
MessageBox.Show("نام کاربري و رمز عبور را وارد کنيد");
}

else
try
{

//string a1;
//string a2;

// create connection !
SqlConnection Connection = new SqlConnection();
Connection.ConnectionString = "Server=localHost;Database=shop;integrated security=true";

// create sql command !
SqlCommand Command1 = new SqlCommand();
Command1.Connection = Connection;

// command text !
// notation : sql injection attack !!!!
Command1.CommandText = " SELECT COUNT(*) FROM tbl_admin WHERE username=" + textBox1.Text +
" AND password=" + textBox2.Text ;

// if you are using (Parameters.AddWithValue) .NET checking sql injection directly
// and prevent from occured sql injection attack !
//
// Command1.Parameters.AddWithValue("@username", textBox1.Text);
// Command1.Parameters.AddWithValue("@password", textBox2.Text);

// open connection and execute command !
Connection.Open();
object result = null;
result = Command1.ExecuteScalar();

// close all resource !
Command1.Dispose();
Connection.Dispose();

if (result != null && ((int)result) > 0)
{
main show = new main();
show.Show();
this.Hide();
}
else
{
MessageBox.Show("يوزنيم يا پسورد اشتباه است");
}
}
catch (Exception)
{
MessageBox.Show("error occured...please contact with admin !!!");
}

}

fakhravari
سه شنبه 23 مهر 1392, 18:35 عصر
اگر به صورت Parameters بفرستین injection صورت نمیگیره