以前学习渗透时,虽然也玩过万能密码SQL注入漏洞登陆网站后台,但仅仅会用,并不理解其原理。

今天学习c#数据库这一块,正好学到了这方面的知识,才明白原来是怎么回事。

众所周知的万能密码SQL注入漏洞,大家相信很熟悉了。

不懂得简单了解下,懂的大牛直接飘过即可。

*****************************************************************************

当我们用御剑之类的扫描器扫描到某些有这个万能密码SQL注入的漏洞网站后台后,

打开网页,输入下列内容,无需知道账号密码也可以登录后台。

http://www.*******.com/admin/admin_login.asp

账号:djlfjdslajdfj(随意输入)

密码:‘or’’=‘

那么为什么呢?

其实原理很简单:

我们先看一条普通的数据库查询语句:

1.普通的直接在数据库里进行查询语句:

select * from T_users where username='root' and password='root';

2.在网站开发中有些人是这样做的,T_users是表名,username是数据库中字段名,

name和pwd是变量。

"select  * form T_users where username='  "+ name +"   '  "+" and password=' "+ pwd +" ' ";

如果变量name赋值为root,pwd变量赋值为root的话,这根本不会有什么问题,和上面一模一样。

即等价于"select * from T_users where username= 'root' and password= 'root' "

3.但是如果变量name赋值:随意输入,而pwd被赋值 1 or 1=1 ,

那么整个语句就变成了这个样子:

"select from T_users where username=‘adsfafsf' and password='1 or 1=1’ "

可以看出,此时整个查询语句返回值始终为true.

模拟测试数据库如下:

模拟万能密码SQL注入漏洞源码如下:

using System;
using System.Data.SqlClient;
namespace 第一个数据库程序
{
class Program
{
static void Main(string[] args)
{
//解决数据库添加不进去数据,两个mdf问题冲突问题代码,即.
/***************************************************/ string dataDir = AppDomain.CurrentDomain.BaseDirectory;
if (dataDir.EndsWith(@"\bin\Debug\")
|| dataDir.EndsWith(@"\bin\Release\"))
{
dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
}
/************************************************/ Console.WriteLine("请输入用户名:");
string user = Console.ReadLine();
Console.WriteLine("请输入密码:");
string pwd = Console.ReadLine(); //与数据库建立连接
using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"))
{
conn.Open();//打开连接 //创建sql语句命令
using (SqlCommand cmd = conn.CreateCommand())
{
//SQL语句查询命令
cmd.CommandText = " select * from [T_users] where username='"+ user + "'" + "and password='" + pwd + "'" ; int i = Convert.ToInt32(cmd.ExecuteScalar());//返回第一行第一列的值
if (i > )
{
Console.WriteLine("登陆成功!");
}
else
{
Console.WriteLine("登陆失败!");
}
}
} Console.ReadKey();
}
}
}

程序运行截图:

普通输入,输错密码无法登陆:

输入正确密码,登陆成功:

输入万能密码,登陆成功!

那么该如何解决这问题呢?

解决源码如下:

using System;
using System.Data.SqlClient;
namespace 第一个数据库程序
{
class Program
{
static void Main(string[] args)
{
//解决数据库添加不进去数据,两个mdf问题冲突问题代码,即.
/***************************************************/ string dataDir = AppDomain.CurrentDomain.BaseDirectory;
if (dataDir.EndsWith(@"\bin\Debug\")
|| dataDir.EndsWith(@"\bin\Release\"))
{
dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
}
/************************************************/ Console.WriteLine("请输入用户名:");
string user = Console.ReadLine();
Console.WriteLine("请输入密码:");
string pwd = Console.ReadLine(); //与数据库建立连接
using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"))
{
conn.Open();//打开连接 //创建SQL命令语句
using (SqlCommand cmd = conn.CreateCommand())
{
//SQL查询语句
cmd.CommandText = "select * from T_users where username=@NAME and password=@PW"; cmd.Parameters.Add(new SqlParameter("NAME", user));//NAME 和PW是参数,名字自己随意取,但必须和上面的一致。
cmd.Parameters.Add(new SqlParameter("PW", pwd)); int i = Convert.ToInt32(cmd.ExecuteScalar());//函数返回第一行第一列的值
if (i > )
{
Console.WriteLine("登陆成功!");
}
else
{
Console.WriteLine("登陆失败!");
}
}
} Console.ReadKey();
}
}
}

普通输入,输错密码无法登陆:

输入正确密码,登陆成功:

万能密码登陆失败!

从c#角度看万能密码SQL注入漏洞的更多相关文章

  1. SQL注入漏洞技术的详解

    SQL注入漏洞详解 目录 SQL注入的分类 判断是否存在SQL注入 一:Boolean盲注 二:union 注入 三:文件读写 四:报错注入 floor报错注入 ExtractValue报错注入 Up ...

  2. SQL注入漏洞详解

    目录 SQL注入的分类 判断是否存在SQL注入 一:Boolean盲注 二:union 注入 三:文件读写 四:报错注入 floor报错注入 ExtractValue报错注入 UpdateXml报错注 ...

  3. 10年前,我就用 SQL注入漏洞黑了学校网站

    我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...

  4. sql注入漏洞笔记随笔

    sql注入是从1998年出现的,是一个十分常见的漏洞,它是OWASP top10的第一名(注入) 在了解sql注入之前,我们需要先了解web框架 webapp:web网站,这种方式它采用的是B/S架构 ...

  5. 利用SQL注入漏洞登录后台的实现方法

    利用SQL注入漏洞登录后台的实现方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-01-12我要评论 工作需要,得好好补习下关于WEB安全方面的相关知识,故撰此文,权当总结,别无它意.读 ...

  6. 浅谈SQL注入漏洞以及防范策略

    --HeShiwei 2014-5-15 什么是SQL注入 SQL注入,指的是用户通过向登录框输入恶意字符,利用代码的字符串拼接漏洞进行网站注入攻击,最终导致整个网站用户表信息泄露的攻击方式.黑客就是 ...

  7. 利用SQL注入漏洞登录后台的实现方法 。。。。转载

    一.SQL注入的步骤 a) 寻找注入点(如:登录界面.留言板等) b) 用户自己构造SQL语句(如:' or 1=1#,后面会讲解) c) 将sql语句发送给数据库管理系统(DBMS) d) DBMS ...

  8. 简单分析什么是SQL注入漏洞

    现在很多人在入侵的过程中基本都是通过SQL注入来完成的,但是有多少人知道为什么会有这样的注入漏洞呢?有的会随口说着对于字符的过滤不严造成的.但是事实是这样吗?我们学这些,不仅要知其然,更要知其所以然! ...

  9. 利用“参数赋值”防范SQL注入漏洞攻击

    <<年轻,无权享受>————送给每一个看到此文的同僚们 在这无精打采的炎夏 我躺在阳台上房东的旧沙发 回想几个月来遇到的问题 我不禁内心开始慌张喘着粗气 还有大把时间去打拼 没有到只 ...

随机推荐

  1. opencv源码:cascadedetect

    级联分类器检测类CascadeClassifier,提供了两个重要的方法: CascadeClassifier cascade_classifier; cascade_classifier.load( ...

  2. JavaWeb——Filter

    一.基本概念 之前我们用一篇博文介绍了Servlet相关的知识,有了那篇博文的知识积淀,今天我们学习Filter将会非常轻松,因为Filter有很多地方和Servlet类似,下面在讲Filter的时候 ...

  3. 再部署一个 instance 和 Local Network - 每天5分钟玩转 OpenStack(131)

    上一节部署了 cirros-vm1 到 first_local_net,今天我们将再部署 cirros-vm2 到同一网络,并创建 second_local_net. 连接第二个 instance 到 ...

  4. iOS逆向工程之Theos

    如果你对iOS逆向工程有所了解,那么你对Tweak并不陌生.那么由Tweak我们又会引出Theos, 那么什么是Theos呢,简单一句话,Theos是一个越狱开发工具包,Theos是越狱开发工具的首先 ...

  5. 如何安全的将VMware vCenter Server使用的SQL Server Express数据库平滑升级到完整版

    背景: 由于建设初期使用的vSphere vCenter for Windows版,其中安装自动化过程中会使用SQL Server Express的免费版数据库进行基础环境构建.而此时随着业务量的增加 ...

  6. jQuery2.x源码解析(缓存篇)

    jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 缓存是jQuery中的又一核心设计,jQuery ...

  7. [systemtap手记]debian体系安装过程

    Debian体系,本人测试用机 Ubuntu 11.10 uname -r 查看原本的内核版本为 3.0.0-12-generic 第一步: 安装systemtap包 $ sudo apt-get i ...

  8. 【从零开始学BPM,Day1】工作流管理平台架构学习

    [课程主题] 主题:5天,一起从零开始学习BPM [课程形式] 1.为期5天的短任务学习 2.每天观看一个视频,视频学习时间自由安排. [第一天课程] Step 1 软件下载:H3 BPM10.0全开 ...

  9. postgresql无法安装pldbgapi的问题

    要对函数进行调试需要安装插件pldbgapi,当初在windows上面的postgresql实例中执行了一下语句就安装上了: create extension pldbgapi; 但是在linux中执 ...

  10. <程序员从入门到精通> -- How

    定位 自己才是职业生涯的管理者,想清楚自己的发展路径: 远期的理想是什么?近期的规划是什么?今日的任务和功课又是什么? 今日之任务或功课哪些有助于近期之规划的实现,而近期之规划是否有利于远期之理想? ...