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攻击形式:黑客挟持多个电脑( ...
随机推荐
- WPF实战案例-打印
在前段时间做了一下打印,因为需要支持的格式比较多,所以wpf能打印的有限分享一下几种格式的打印(.xls .xlsx .doc .docx .png .jpg .bmp .pdf) 首先为了保证exc ...
- UWP 取消GridView、ListView鼠标选中、悬停效果
因为经常碰到ListView或者ListBox之类的选中.鼠标悬停样式和自己设置的主题颜色不搭,这时就需要改变这些样式了. 而这里我通过ListView来说明,大致思路其实就是重新定义Item的Tem ...
- winform自动升级方案
未涉及过winform升级,研究一阵,大致出来个不成熟的方案. 我的解决方案(判断升级,升级程序下载安装包的压缩包,解压,自动安装,重新启动程序). 1.首先根据服务器中软件版本号和本地软件版本号是否 ...
- [SDOI2011]消耗战(虚树+树形动规)
虚树dp 虚树的主要思想: 不遍历没用的的节点以及没用的子树,从而使复杂度降低到\(\sum\limits k\)(k为询问的节点的总数). 所以怎么办: 只把询问节点和其LCA放入询问的数组中. 1 ...
- UOJ#419. 【集训队作业2018】圆形(格林公式)
题面 传送门 题解 首先您得会用格林公式计算圆的面积并 这里只需要动态维护一下圆弧就可以了 时间复杂度\(O(n^2\log n)\) //minamoto #include<bits/stdc ...
- atomic write pipe
阅读 skynet 代码 socket_server 部分,发现对 socket 的写操作流程是这样的: 1. 各个服务(各线程)将数据写到 sendctrl_fd,这是一个 pipe 的 写端 2. ...
- Android逆向进阶—— 脱壳的奥义(基ART模式下的dump)
本文作者:i春秋作家HAI_ZHU 0×00 前言 市面上的资料大多都是基于Dalvik模式的dump,所以这此准备搞一个ART模式下的dump.HAI_的使用手册(各种好东西) Dalvik模式是A ...
- Vue.js 和 MVVM 的小细节
Vue.js 和 MVVM 的小细节 转载 作者:流云诸葛 链接:www.cnblogs.com/lyzg/p/6067766.html MVVM 是Model-View-ViewModel 的缩写, ...
- VBA操作word生成sql语句
项目开始一般都是用word保存下数据库的文档 但是从表单一个一个的建表实在是很困难乏味,查查资料 1.可以生成一个html或者xml,检索结构生成sql.但是这个方式也蛮麻烦 2.查到vba可以操作w ...
- Java - 基础起步
package basics; //声明该类所在的包为basics,package为包的关键字 import java.util.Date; //导入java.util包中的Date类,用来封装当前的 ...