SQL注入攻击
昨天开始接触到CTF、网络安全等知识,对网络安全方面有了初步的了解。
今天试一下攻击之前自己做的winform测试程序。
登录界面:
登录的主要代码:
private void button1_Click(object sender, EventArgs e) { if (textBox1.Text == "" || textBox2.Text == "") { MessageBox.Show("账号密码不能为空"); return; } SqlConnection conn = ConnDB.DBConnection(); conn.Open(); string sql = @"select * from DnUser where account = '{0}' and password = '{1}'"; sql = string.Format(sql, textBox1.Text, textBox2.Text); SqlCommand cmd = new SqlCommand(sql, conn); string account = (string)cmd.ExecuteScalar(); if (textBox1.Text == account) { Program.account = textBox1.Text; this.DialogResult = DialogResult.OK; conn.Close(); this.Close(); } else { MessageBox.Show(sql+"账号密码错误"); } }
sql语句是动态拼接的,没有识别输入字符的格式,也没有过滤单引号、括号等特殊字符,这就带来了安全隐患。
开始攻击:
在账号栏输入以下语句,点击登录,就可以往数据库插入一条数据。
1'; insert into DnUser values('3','3'); --
查询数据库,发现多了一条记录。
接下来就可以用账号为3,密码为3的账户登录系统了。