一、SQL字符串注入攻击

  SQL注入攻击俗称为黑客的填空游戏是黑客对数据库进行攻击的常用手段之一。SQL注入的手法相当灵活,SQL注入攻击会导致的数据库安全风险包括:刷库、拖库、撞库。 一般来说,SQL注入一般存在于形如:HTTP://xxx.xxx.xxx/abc.asp?id=XX等带有参数的ASP动态网页中,如果ASP程序员没有安全意识,不进行必要的字符过滤,存在SQL注入的可能性就非常大。

1、攻击思路

发现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特征识别,实现实时攻击阻断。

  在构造动态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 .....

1
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的区别

1 中先找最大号,新加入的比最大号大 1
2 中先看有多少记录,新加入的比总记录数大 1 
 
 
 

ADO.NET 【攻击及防御】的更多相关文章

  1. Mac地址泛洪攻击的防御措施和具体配置

    Mac地址泛洪攻击指的是:利用交换机的mac地址学习机制,攻击者不断地刷新mac地址,填满交换机的mac地址表,以致崩溃,使交换机不得不使用广播发包,从而获取其他人的报文信息. mac地址泛洪攻击的防 ...

  2. C#-黑客-数据库访问-字符串的攻击和防御

    C#中用基本的方法对数据库进行增删改查,会被黑客利用,写入其他的代码以实现对数据库的数据进行其他的操作.例如: 对下列数据库的某个信息进行修改操作 修改代码: using System; using ...

  3. ARP缓存表的构成ARP协议全面实战协议详解、攻击与防御

    ARP缓存表的构成ARP协议全面实战协议详解.攻击与防御 1.4.3  ARP缓存表的构成 在局域网的任何一台主机中,都有一个ARP缓存表.该缓存表中保存中多个ARP条目.每个ARP条目都是由一个IP ...

  4. 浅谈Ddos攻击攻击与防御

    EMail: jianxin#80sec.comSite: http://www.80sec.comDate: 2011-2-10From: http://www.80sec.com/ [ 目录 ]一 ...

  5. 通过DDOS攻击流程图来浅谈如何预防Ddos攻击与防御

    DDOS攻击流程图 站长之家配图(来源:ppkj.net) 一 背景 在前几天,我们运营的某网站遭受了一次ddos攻击,我们的网站是一个公益性质的网站,为各个厂商和白帽子之间搭建一个平台以传递安全问题 ...

  6. 《sql注入攻击与防御 第2版》的总结 之 如何确定有sql注入漏洞

    看完<sql注入攻击与防御 第2版>后,发现原来自己也能黑网站了,就一个字:太爽了. 简单总结一下入侵步骤: 1.确定是否有sql注入漏洞 2.确定数据库类型 3.组合sql语句,实施渗透 ...

  7. CSRF——攻击与防御

    CSRF——攻击与防御 author: lake2 0x01 什么是CSRF攻击 CSRF是Cross Site Request Forgery的缩写(也缩写为XSRF),直译过来就是跨站请求伪造的意 ...

  8. iOS安全攻击和防御(24):敏感的保护方案逻辑(1)

    iOS安全攻击和防御(24):敏感的保护方案逻辑(1) Objective-C代码easy被hook.暴露信息太赤裸裸,为了安全,改用C来写吧! 当然不是所有代码都要C来写,我指的是敏感业务逻辑代码. ...

  9. 常见【十种】WEB攻击及防御技术总结

    最近参加了一个WEB安全培训,感觉WEB攻击跟防御都是挺有意思的.以下总结比较简短,仅供观赏哈. 一.XSS攻击 [介绍] xss攻击是跨站脚本攻击,例如在表单中提交含有可执行的javascript的 ...

  10. DDOS和cc攻击的防御

    DDOS和cc攻击的防御 author:headsen chen    2017-10-21  10:47:39 个人原创,转载请注明作者,否则依法追究法律责任: DDOS攻击形式:黑客挟持多个电脑( ...

随机推荐

  1. 解决toad中number类型小数位数过长按科学计数法显示的问题

    在toad中->view->option->data->display large number in scientific notation,不选择该选项即可. (在pl/s ...

  2. Windows核心编程:第11章 Windows线程池

    Github https://github.com/gongluck/Windows-Core-Program.git //第11章 Windows线程池.cpp: 定义应用程序的入口点. // #i ...

  3. CefSharp访问需要认证网页或接口(在Request的Headers中添加认证Token)

    public class MyRequestHandler : DefaultRequestHandler { public static readonly string VersionNumberS ...

  4. Linux的1000个命令

    目录 Linux常用命令 uptime wget uname free who last history pwd cd ls cat head tail tr wc cut diff touch mk ...

  5. C#6.0语言规范(六) 转换

    转换能够被视为是一个特定类型的表达式.转换可能会导致给定类型的表达式被视为具有不同的类型,或者它可能导致没有类型的表达式获取类型.转换可以是隐式或显式的,这决定了是否需要显式转换.例如,从类型int到 ...

  6. 转载:TCP/IP四层模型

    转载:TCP/IP四层模型 一. TCP/IP参考模型示意图 ISO制定的OSI参考模型的过于庞大.复杂招致了许多批评.与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用. 如图所示 ...

  7. Shell - 简明Shell入门11 - 调用脚本(CallTheScript)

    示例脚本及注释 主脚本: CallTheScript.sh #!/bin/bash . ./11-subscript.sh # 调用其他脚本;注意点号"."和文件路径之间有一空格; ...

  8. es 修改拼音分词器源码实现汉字/拼音/简拼混合搜索时同音字不匹配

    [版权声明]:本文章由danvid发布于http://danvid.cnblogs.com/,如需转载或部分使用请注明出处 在业务中经常会用到拼音匹配查询,大家都会用到拼音分词器,但是拼音分词器匹配的 ...

  9. Runtime 全方位装逼指南

    Runtime是什么?见名知意,其概念无非就是“因为 Objective-C 是一门动态语言,所以它需要一个运行时系统……这就是 Runtime 系统”云云.对博主这种菜鸟而言,Runtime 在实际 ...

  10. centos7.2 部署zabbix 3.2.7

    centos7.2 部署zabbix 3.2.7[zabbix@zabbixServer ~]$ cat /etc/redhat-release CentOS Linux release 7.2.15 ...