关于SQL漏洞注入(Ado.Net)
SQL漏洞注入是常见的一种攻击方式,我们可以通过一些简单的方式来预防。看一下我们经常写的代码:
1: /// <summary>
2: /// 不安全的登录代码
3: /// </summary>
4: /// <param name="sender"></param>
5: /// <param name="e"></param>
6: private void button2_Click(object sender, EventArgs e)
7: {
8: string connString = "server=.;database=userinfo;uid=sa;pwd=123456";
9: using (SqlConnection conn = new SqlConnection(connString))
10: {
11: conn.Open();
12: string sql = string.Format("select * from userinfo where username = '{0}' and userpwd='{1}'", textBox1.Text, textBox2.Text);
13: using (SqlCommand cmd = new SqlCommand(sql, conn))
14: {
15: using (SqlDataReader reader = cmd.ExecuteReader())
16: {
17: if (reader.Read())
18: {
19: MessageBox.Show("Success!");
20: }
21: else
22: {
23: MessageBox.Show("Error");
24: }
25: }
26: }
27: }
28: }
数据库的结构:
运行程序:
SQL漏洞注入:
方式一(知道用户名):
当在用户名文本框中输入 tom ’ -- 点击登录按钮:
原因是生成后的SQL成了如下形式:
1: select * from userinfo where username = 'tom ' --' and userpwd=''
--是SQL中的注释
方式二(不知道用户名密码):
当在用户名文本框中输入 ' or 1=1 -- 点击登录按钮:
生成后的SQL:
1: select * from userinfo where username = '' or 1=1 --' and userpwd=''
--依然是注释,但是or促成了1=1条件的永远成立。
预防方式一(使用带参数的SQl):
1: /// <summary>
2: /// 安全登录
3: /// </summary>
4: /// <param name="sender"></param>
5: /// <param name="e"></param>
6: private void button3_Click(object sender, EventArgs e)
7: {
8: try
9: {
10: string connString = "server=.;database=userinfo;uid=sa;pwd=123456";
11: using (SqlConnection conn = new SqlConnection(connString))
12: {
13: conn.Open();
14: string sql = "select * from userinfo where username = @id and userpwd= @pwd";
15: using (SqlCommand cmd = new SqlCommand(sql, conn))
16: {
17: cmd.Parameters.Add(new SqlParameter("@id", textBox1.Text));
18: cmd.Parameters.Add(new SqlParameter("@pwd", textBox2.Text));
19: using (SqlDataReader reader = cmd.ExecuteReader())
20: {
21: if (reader.Read())
22: {
23: MessageBox.Show("Success!");
24: }
25: else
26: {
27: MessageBox.Show("Error");
28: }
29: }
30: }
31: }
32: }
33: catch (Exception ex)
34: {
35: MessageBox.Show(ex.Message.ToString());
36:
37: }
38: }
运行:
方式二(使用存储过程):
存储过程:
1: create proc findUser
2: @name nvarchar(50),
3: @pwd nvarchar(50)
4: as
5: select * from userinfo where username = @name and userpwd = @pwd
代码:
1: /// <summary>
2: /// 安全登录
3: /// </summary>
4: /// <param name="sender"></param>
5: /// <param name="e"></param>
6: private void button3_Click(object sender, EventArgs e)
7: {
8: try
9: {
10: string connString = "server=.;database=userinfo;uid=sa;pwd=123456";
11: using (SqlConnection conn = new SqlConnection(connString))
12: {
13: conn.Open();
14: using (SqlCommand cmd = new SqlCommand("finduser", conn))
15: {
16: cmd.CommandType = CommandType.StoredProcedure;
17: cmd.Parameters.Add(new SqlParameter("@name", textBox1.Text));
18: cmd.Parameters.Add(new SqlParameter("@pwd", textBox2.Text));
19: using (SqlDataReader reader = cmd.ExecuteReader())
20: {
21: if (reader.Read())
22: {
23: MessageBox.Show("Success!");
24: }
25: else
26: {
27: MessageBox.Show("Error");
28: }
29: }
30: }
31: }
32: }
33: catch (Exception ex)
34: {
35: MessageBox.Show(ex.Message.ToString());
36:
37: }
38: }
运行结果同上。
转载于:https://www.cnblogs.com/kay/archive/2009/01/07/1371463.html
关于SQL漏洞注入(Ado.Net)相关推荐
- sqlmap 进行sql漏洞注入
有一款工具叫sqlmap主要用于识别sql漏洞并注入,这里我就写一篇教程教大家如何使用. 因为sql注入是非法的,所以我就使用两台自己的虚拟机进行测试,请大家不要在别人的网站上搞破坏.(现在大部分网站 ...
- JeecgBoot 2.x版本SQL漏洞补丁发布——响应零日漏洞修复计划
漏洞编码:HW21-0499 产品名字:JeecgBoot低代码平台 问题: JEECG系统存在SQL注入0day漏洞 处理情况: 已经处理 处理方案: 针对存在SQL漏洞注入风险的接口,采用加签名认 ...
- 不为人知的动网7.1 SQL版注入漏洞
文章难易度:★★★ 文章阅读点:动网7.1 SQL版最新注入漏洞的详细利用以及如何在后台获取Webshell 话说上期X档案刊登了动网8.0 SQL版最新注入漏洞的文章,不知大家都掌握了没有,令人兴奋 ...
- php sql漏洞修复,php sql注入漏洞与修复
出于安全考虑,需要过滤从页面传递过来的字符. 通常,用户可以通过以下接口调用数据库的内容:URL地址栏.登陆界面.留言板.搜索框等. 轻则数据遭到泄露,重则服务器被拿下. 一.SQL注入的步骤 a) ...
- 墨者靶场-SQL手工注入漏洞测试(MySQL数据库-字符型)
0x00 前言 我们都知道,SQL注入分数字型和字符型,我们上次讲的是最基本的数字型SQL注入,这次我们就来讲最基本的字符型SQL注入.同样,如果是明白原理和方法的话,看懂这篇文章并不难,但是如果不清 ...
- 墨者学院01 SQL手工注入漏洞测试(MySQL数据库)
问题描述 鉴于我已经两周没能成功运行攻防世界的靶场环境...于是昨天又搜了一些网站,感觉墨者学院的题目还可以~ SQL手工注入虽然是一个已经被安全博主讲烂的主题,但是我之前很少有从头到尾实践手工注入的 ...
- SQL注入之什么是加密注入|二次漏洞注入|DNSlog注入
加密注入.二次漏洞注入.DNSlog注入 加密注入: 什么是加密注入??下面将由一个例子阐述: 以sqlilabs-less-21为例 1.在登录界面输入账户密码提交抓包 2.在抓到这条数据,将uma ...
- SQL手工注入漏洞测试(Oracle数据库)
SQL手工注入漏洞测试(Oracle数据库) 0x01前言 本文旨在讲述Oracle数据库多种情况下如何进行注入 靶场地址:SQL手工注入漏洞测试(Oracle数据库)_SQL注入_在线靶场_墨者学院 ...
- Oracle数据库注入-墨者学院(SQL手工注入漏洞测试(Oracle数据库))
本期来为大家讲解的sql注入题目是来墨者学院的SQL手工注入漏洞测试(Oracle数据库). 地址:http://124.70.22.208:42948/new_list.php?id=1(注意地址已 ...
最新文章
- 没有添加跳新增,添加之后跳修改
- flex 字体加载方式4
- 畅想来自未来的便携扫描仪
- 愚人节整人软件测试自学,2020愚人节整蛊整人攻略大全
- Redis高频面试笔记:mysql8.0新特性
- ②你真的学会Java了吗?来自《卷Ⅰ》的灵魂提问
- Android 中文API (38) —— Spinner
- 力扣——206.反转链表
- 问题六十八:BRDF——(着色模型(shading model)(1)——反射模型(reflection model)(3.2))
- element的form表单中如何一行显示多el-form-item标签
- 7个Python实战项目代码,让你感受下大神是如何起飞的!
- Android 原生工程接入mPaas框架
- 李宏毅机器学习笔记【未完】
- 网络编程实验综合报告
- oracle 手动添加分区,Oracle 分区表怎么添加分区
- 实时视频带宽的计算过程
- 地铁AFC付出体式格局近况及移动付出安好性探究
- java的JVM虚拟机相关知识,简单易懂。
- 内存优化总结: ptmalloc、tcmalloc 和 jemalloc
- Quick BI 数据大屏快速入门