ADO.NET 【攻击及防御】
一、SQL字符串注入攻击
SQL注入攻击俗称为黑客的填空游戏是黑客对数据库进行攻击的常用手段之一。SQL注入的手法相当灵活,SQL注入攻击会导致的数据库安全风险包括:刷库、拖库、撞库。 一般来说,SQL注入一般存在于形如:HTTP://xxx.xxx.xxx/abc.asp?id=XX等带有参数的ASP动态网页中,如果ASP程序员没有安全意识,不进行必要的字符过滤,存在SQL注入的可能性就非常大。
发现SQL注入位置;
判断后台数据库类型;
确定XP_CMDSHELL可执行情况
发现WEB虚拟目录
上传ASP木马;
得到管理员权限;
2、攻击操作
(1)向数据库添加数据(使用上一章对数据库添加操作)
///攻击前 字符串拼接形式[ " +code+ " ', ' " +name+ " ] 添加数据
cmd.CommandText = "insert into Students values( ' " +code+ " ', ' " +name+ " ' )";
conn.Open();
cmd.ExecuteNonQuery();
conn.Close(); /// SQL注入攻击
// 将原字符串"name" 部分改变拼接
// 拼接语句的最后的 “--” 注释掉了原拼接字符串后面的部分 a ' ) ; update students set Sname = ' 傻 X ' ;-- /// 攻击后 实际运行
cmd.CommandText = "insert into Students values
( ' code' ,' a ' ); update students set Sname = ' 傻 X ' ; --
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
(2)对有登录页面的网站进行注入攻击
//某个网站的登录验证的SQL查询代码为:
strSQL = "SELECT * FROM users WHERE (name='" + userName+"') and (pw= '"+ passWord +"');" //恶意填入
userName = "1' OR '1'='1";
passWord = "1' OR '1'='1"; //将导致原本的SQL字符串被填为
strSQL = "SELECT * FROM users WHERE (name = '1' OR '1'='1') and (pw = '1' OR '1'='1');" //也就是实际上运行的SQL命令会变成下面这样的
strSQL = "SELECT * FROM users;" //达到无账号密码,亦可登录网站。
二、使用占位符防注入攻击
1、防攻击的方法:
可以通过数据库防火墙实现对SQL注入攻击的防范,,
可以使用虚拟补丁技术实现对注入攻击的SQL特征识别,实现实时攻击阻断。
2、占位符防注入攻击使用
对攻击案例1进行防御
cmd.CommandText = "insert into Students values(@a,@b)";
cmd.Parameters.Clear(); // 清空
cmd.Parameters.AddWithValue( " @a " , code ); //@a 占位符 与对应的值 code
cmd.Parameters.AddWithValue( " @b " , name ); //@b 占位符 与对应的值 name
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
Parameters 集合是属于数据库操作类的,作用是防止字符串注入攻击
public List<Users> select(string name)
{
List<Users> list = new List<Users>();
cmd.CommandText = "select * from Car where name like @a";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@a",'%'+name+'%'); conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
Users u = new Users();
u.Name = dr["name"].ToString();
list.Add(u);
}
conn.Close(); return list;
}
3、练习
Student表 Scode,Sname
添加学生信息 ,只需要用户输入学生姓名,
编号自动生成:S001 S002 .....
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient; namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//默认表中没有数据
string code = "S001"; while (true)
{
Console.Write("请输入添加的学生姓名:");
string name = Console.ReadLine(); string sql = "server=.;database=Data0216;user=sa;pwd=123"; SqlConnection conn = new SqlConnection(sql); SqlCommand cmd = conn.CreateCommand(); //查询所有降序排列
cmd.CommandText = "select *from Students order by Scode desc"; conn.Open(); SqlDataReader dr = cmd.ExecuteReader(); if (dr.HasRows)
{
//生成编号
dr.Read(); //取第一个(最大)
string s = dr["Scode"].ToString(); // 截取 s 后面的 转换类型 留3位数
code = "S" + (Convert.ToInt32(s.Substring()) + ).ToString("");
}
conn.Close(); cmd.CommandText = "insert into Students values(@a,@b);"; cmd.Parameters.Clear(); cmd.Parameters.AddWithValue("@a", code); cmd.Parameters.AddWithValue("@b", name); conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); Console.ReadLine();
}
}
}
}
2
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text; namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{ //5、Student表 Scode,Sname
//添加学生信息 ,只需要用户输入学生姓名,
//编号自动生成:S001 S002 string sql = "server=.;database=Data0216_5;user=sa;pwd=123"; SqlConnection conn = new SqlConnection(sql); SqlCommand cmd = conn.CreateCommand(); Console.Write("请输入姓名:"); string name = Console.ReadLine(); string scode; cmd.CommandText = "select * from student"; conn.Open(); SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
int a = ;
while (dr.Read())
{
a += ;
} scode = "s" + (a+).ToString(""); }
else
{
scode = "s001";
} conn.Close(); cmd.CommandText = "insert into student values('" + scode + "','" + name + "')"; conn.Open(); int aa = cmd.ExecuteNonQuery();
if (aa > )
{
Console.WriteLine("添加成功");
}
else
{
Console.WriteLine("添加失败!");
} conn.Close(); Console.ReadLine();
}
}
}
1于2的区别
ADO.NET 【攻击及防御】的更多相关文章
- Mac地址泛洪攻击的防御措施和具体配置
Mac地址泛洪攻击指的是:利用交换机的mac地址学习机制,攻击者不断地刷新mac地址,填满交换机的mac地址表,以致崩溃,使交换机不得不使用广播发包,从而获取其他人的报文信息. mac地址泛洪攻击的防 ...
- C#-黑客-数据库访问-字符串的攻击和防御
C#中用基本的方法对数据库进行增删改查,会被黑客利用,写入其他的代码以实现对数据库的数据进行其他的操作.例如: 对下列数据库的某个信息进行修改操作 修改代码: using System; using ...
- ARP缓存表的构成ARP协议全面实战协议详解、攻击与防御
ARP缓存表的构成ARP协议全面实战协议详解.攻击与防御 1.4.3 ARP缓存表的构成 在局域网的任何一台主机中,都有一个ARP缓存表.该缓存表中保存中多个ARP条目.每个ARP条目都是由一个IP ...
- 浅谈Ddos攻击攻击与防御
EMail: jianxin#80sec.comSite: http://www.80sec.comDate: 2011-2-10From: http://www.80sec.com/ [ 目录 ]一 ...
- 通过DDOS攻击流程图来浅谈如何预防Ddos攻击与防御
DDOS攻击流程图 站长之家配图(来源:ppkj.net) 一 背景 在前几天,我们运营的某网站遭受了一次ddos攻击,我们的网站是一个公益性质的网站,为各个厂商和白帽子之间搭建一个平台以传递安全问题 ...
- 《sql注入攻击与防御 第2版》的总结 之 如何确定有sql注入漏洞
看完<sql注入攻击与防御 第2版>后,发现原来自己也能黑网站了,就一个字:太爽了. 简单总结一下入侵步骤: 1.确定是否有sql注入漏洞 2.确定数据库类型 3.组合sql语句,实施渗透 ...
- CSRF——攻击与防御
CSRF——攻击与防御 author: lake2 0x01 什么是CSRF攻击 CSRF是Cross Site Request Forgery的缩写(也缩写为XSRF),直译过来就是跨站请求伪造的意 ...
- iOS安全攻击和防御(24):敏感的保护方案逻辑(1)
iOS安全攻击和防御(24):敏感的保护方案逻辑(1) Objective-C代码easy被hook.暴露信息太赤裸裸,为了安全,改用C来写吧! 当然不是所有代码都要C来写,我指的是敏感业务逻辑代码. ...
- 常见【十种】WEB攻击及防御技术总结
最近参加了一个WEB安全培训,感觉WEB攻击跟防御都是挺有意思的.以下总结比较简短,仅供观赏哈. 一.XSS攻击 [介绍] xss攻击是跨站脚本攻击,例如在表单中提交含有可执行的javascript的 ...
- DDOS和cc攻击的防御
DDOS和cc攻击的防御 author:headsen chen 2017-10-21 10:47:39 个人原创,转载请注明作者,否则依法追究法律责任: DDOS攻击形式:黑客挟持多个电脑( ...
随机推荐
- RocketMQ概述
概述 ApacheRocketMQ是一个低延时.高性能.可靠.海量并且灵活扩展性的分布式消息和流平台,于2017年9月25日成为Apache基金会顶级开源项目.它由4个部分组成:name server ...
- c#依参数自动生成控件
很多系统都带有自定义报表的功能,而此功能都需依参数自动生成控件,举例如下: 如上图,一条查询语句当中,包含了3个参数,其中两个是日期型(使用:DATE!进行标识),一个是字符型(使用:进行标识),要生 ...
- CefSharp.v49.0.1浏览器控件完全WPF版,实现禁止弹出新窗口,在同一窗口打开链接,并且支持带type="POST" target="_blank"的链接
需求场景:在查询页面,填写查询条件,查询条件包括上传的图片,根据图片的特征查询,这就需要在提交的时候,使用POST提交,因为GET提交无法提交图片数据,提交查询条件之后,在新的窗口展示查询结果.(当然 ...
- file-loader引起的html-webpack-plugin坑
引言 最近,我们的一个后台系统要改版为基于react + redux + react-router + ant-design 技术栈,切换到当下比较新的技术来实现后台系统:在项目实施过程中,选择了基于 ...
- [luogu 5301][bzoj 5503] [GXOI/GZOI2019] 宝牌一大堆
题面 好像ZJOI也考了一道麻将, 这是要发扬中华民族的赌博传统吗??? 暴搜都不会打, 看到题目就自闭了, 考完出来之后看题解, \(dp\), 可惜自己想不出来... 对于国士无双(脑子中闪过了韩 ...
- java String 内存模型
关于java的内存模型,参照以下的一篇文章: https://isudox.com/2016/06/22/memory-model-of-string-in-java-language/
- JS获取浏览器URL中查询字符串的参数
首先要知道Location这个对象以及这个对象中的一些属性: href:设置或返回完整的url.如本博客首页返回http://www.cnblogs.com/wymninja/ host:设置或返回主 ...
- linux中jdk的安装与配置
一.卸载系统已有的JDK 1.查看已安装的jdk rpm -qa|grep jdk 2.卸载jdk rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1. ...
- WebRTC开发基础(WebRTC入门系列3:RTCDataChannel)
除了视频和音频,webRTC还可以传输其他数据 例子: http://webrtc.github.io/samples/src/content/datachannel/datatransfer/ 应用 ...
- POJ 2421
#include<iostream> #include<stdio.h> #define MAXN 500 #define inf 100000000 using namesp ...