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攻击形式:黑客挟持多个电脑( ...
随机推荐
- Excel 两列单元格合并超级链接的VBA 写法
Excel 单元格 分两列 (B列存放姓名, C列存放链接) 列如: 姓名 学号 博客地址 1309032022 李汉超 http://www.cnblogs.com/Vpygamalion/ 141 ...
- caffe 训练imagenet
1.整理得到自己的数据库,并生成自己数据库的列表文件.txt 2.将数据库转成lmbp格式 3.计算图像均值 4.修改网络参数 5.得到结果 1.整理得到自己的数据库 因为前面博文提到的原因,技术水平 ...
- 索引视图DEMO2
use tempdb ----在创建视图和所有底层表时,必须打开ANSI_NULLS以及QUOTED_IDENTIFIER选项 --SET ANSI_NULLS ON --GO --SET QUOTE ...
- Windows的cmd窗口显示utf8字符
用XeLaTeX的时候,查字体需要用fc-list命令,XeLaTeX用的都是utf编码,所以fc-list输出的字体信息也是utf编码.因此需要把cmd窗口也改成utf8编码才能看到这些字体信息.U ...
- Python-实现图表绘制总结
Numpy是Python开源的数值计算扩展,可用来存储和处理大型矩阵,比Python自身数据结构要高效: matplotlib是一个Python的图像框架,使用其绘制出来的图形效果和MATLAB下绘制 ...
- Linux巩固记录(2) java项目的编译和执行
由于要近期使用hadoop等进行相关任务执行,操作linux时候就多了 以前只在linux上配置J2EE项目执行环境,无非配置下jdk,部署tomcat,再通过docker或者jenkins自动部署上 ...
- WebDriver高级应用实例(8)
8.1使用Log4j在测试过程中打印日志 目的:在测试过程中,使用Log4j打印日志,用于监控和后续调试测试脚本 被测网页的网址: http://www.baidu.com 环境准备: (1)访问ht ...
- MySQL命令行登陆,远程登陆MySQL
注: MySQL图形界面管理工具[navicat 10.1.8中文绿色版] 下载地址:http://www.t00y.com/file/18393836 备用地址:http://ProCircle.q ...
- Python+selenium+webdriver 安装与环境配置
1.python安装:访问python.org/download,下载最新版本,安装过程与其他windows软件类似.记得下载后设置path环境变量,然后Windows命令行就可以调用: 2.Sele ...
- Centos7安装Nginx实战
一.背景 最近在写一些自己的项目,用到了nginx,所以自己动手来在Centos7上安装nginx,以下是安装步骤. 二.基本概念以及应用场景 1.什么是nginx Nginx是一款使用C语言开发的高 ...