浅谈注入漏洞问题

1、分析

在客户端进行身份认证登录的时候,有时候会面临字符串的脚本注入漏洞,可能会因为sql字符串的书写而添加了多个逻辑运算符进而出现账号密码的“强制匹配”。也比如说在网站中插入某个恶意的脚本窃取用户的Cookie,进而盗用客户的信息。这些问题都有可能会导致用户信息和安全的泄露。

要防止SQL注入其实不难,你知道原理就可以了。所有的SQL注入都是从用户的输入开始的。如果你对所有用户输入进行了判定和过滤,就可以防止SQL注入了。用户输入有好几种,我就说说常见的吧。
        文本框、地址栏里***.asp?中?号后面的id=1之类的、单选框等等。一般SQL注入都用地址栏里的,或者在密码输入文本框中输入1’or‘1’=‘1’或者在用户名输入框中输入‘‘ or 1=1#.

2、场景模拟

我们在登录界面中的按钮中点击事件中输入:

 1  private void btnLogin_Click(object sender, EventArgs e)
 2         {
 3             // 如何表示登陆成功了?
 4             // select count(*) from tbl where uid=uid and pwd=pwd;
 5
 6             string uid = txtUid.Text.Trim();
 7             string pwd = txtPwd.Text;
 8
 9             // 验证 。。。
10
11             string connStr = ConfigurationManager.ConnectionStrings["sql"].ConnectionString;
12
13             string sql = "select count(*) from LoginTestWithPrimary where uid=‘" + uid + "‘ and pwd=‘" + pwd + "‘;";
14             int count;
15             using (SqlConnection conn = new SqlConnection(connStr))
16             {
17                 // 执行对象
18                 using (SqlCommand cmd = new SqlCommand(sql, conn))
19                 {
20                     conn.Open();
21                     count = (int)cmd.ExecuteScalar();
22                 }
23             }
24             if (count > 0)
25             {
26                 MessageBox.Show("登陆成功");
27             }
28             else
29             {
30                 MessageBox.Show("用户名或密码错误");
31
32             }
33         }

这样的话在密码端输入框中输入1’ or ‘1’=‘1,无论我们输入什么账户名,都会弹出登录成功MessageBox.

以此我们可以做出以下改动:

1 string pwd = txtPwd.Text.rePlace("\‘","\‘\‘");

我们也可以做出以下的调整,对Sql语句进行参数化查询,所谓的参数化就是就是将需要值的地方,用一个参数变量进行描述,也就是进行参数的替换。

 1     string sql = "select count(*) from LoginTestWithPrimary where [email protected] and [email protected];";//sql查询语句
 2
 3             // 参数赋值
 4             SqlParameter pUid = new SqlParameter("@uid123", uid);
 5             SqlParameter pPwd = new SqlParameter("@pwd", pwd);
 6
 7             //
 8             int count;
 9             using (SqlConnection conn = new SqlConnection(connStr))
10             {
11                 using (SqlCommand cmd = new SqlCommand(sql, conn))
12                 {
13                     // 3 将参数交给cmd
14                     cmd.Parameters.Add(pUid);
15                     cmd.Parameters.Add(pPwd);
16
17
18                     conn.Open();
19                     count = (int)cmd.ExecuteScalar();
20                 }
21             }
22
23             if (count > 0)
24             {
25                 Console.WriteLine("登陆成功");
26             }
27             else
28             {
29                 Console.WriteLine("登陆失败");
30             }

  

3、结论分析

因为1=1永远是都是成立的,即where子句总是为真,将该sql进一步简化之后,等价于如下select语句: select count(*) from LoginTestWithPrimary where uid=‘123‘ and pwd=‘1‘ or ‘1‘=‘1‘。没错,该sql语句的作用是检索LoginTestWithPrimary 表中的所有字段的受影响的行数,从这条语句上看无论uid和pwd是什么,进行的或运算,结果都为真。

在使用参数化查询的情况下,数据库服务器不会将参数的内容视为sql指令的一部份来处理,而是在数据库完成sql指令的编译后,才套用参数运行,因此就算参数中含有指令,也不会被数据库运行。Access、SQL Server、MySQL、SQLite等常用数据库都支持参数化查询。这样也易形成一个规范去使用sql去操作,避免注入漏洞的问题的发生。

时间: 2024-11-10 13:27:29

浅谈注入漏洞问题的相关文章

浅谈SSRF漏洞

转自:http://www.cnblogs.com/s0ky1xd/p/5859049.html 浅谈SSRF漏洞 SSRF漏洞是如何产生的? SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞.一般情况下,SSRF攻击的目标是从外网无法访问的内部系统.(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统) SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有

浅谈越权漏洞

越权漏洞是一种很常见的逻辑安全漏洞.是由于服务器端对客户提出的数据操作请求过分信任,忽略了对该用户操作权限的判定,导致修改相关参数就可以拥有了其他账户的增.删.查.改功能,从而导致越权漏洞. 1. 分类 根据对数据库的操作进行分类,可以分为以下几类:越权查询.越权删除.越权修改.越权添加等. 根据维度进行分类,可分为:平行越权.垂直越权.交叉越权. 平行越权:权限类型不变,权限ID改变:如:同是普通用户,其中一个用户可查看其它用户信息.常见的就是通过修改某一个ID参数来查看其他用户的信息,比如你

浅谈APP漏洞挖掘之逻辑漏洞

作者:Can 联系方式:[email protected] 文章中若无特别说明,实例皆为本人自主挖掘. 转载请注明出处,本文仅为个人经验总结,介绍的并非所有方法,只是一些最常见的方法.如有错误,烦请指出. 0x00 简介 本文主要介绍APP漏洞挖掘中逻辑漏洞,包括任意用户密码重置,支付漏洞,任意用户未授权登录. 0x01 任意用户密码重置正文 首先,我们来看看任意用户密码重置. 方法一:密码找回的凭证太弱,为4位或6位纯数字,并且时效过长,导致可爆破从而重置用户密码. 这里我们来看一个实例,目前

浅谈CSRF漏洞

前言: 看完小迪老师的CSRF漏洞讲解.感觉不行 就自己百度学习.这是总结出来的. 歌曲: 正文: CSRF与xss和像,但是两个是完全不一样的东西. xss攻击(跨站脚本攻击)储存型的XSS由攻击者和受害者一同完成.xss详细介绍:点我跳转 CSRF(跨站脚本伪造)完全由受害者完成.攻击者不参与其中.CSRF详细介绍:点我跳转 CSRF原理: 银行转账的数据包:http://jianse.com/zhuanzhang.php?name=lu&[email protected]&monet

PHP环境 XML外部实体注入漏洞(XXE)

XXE XXE漏洞的文章网上就很多了 文件读取 <!DOCTYPE root[ <!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd"> ]> <root><name>&xxe;</name></root> <!DOCTYPE root[ <!ENTITY xxe SYSTEM &quo

[转]SQL注入漏洞及绑定变量浅谈

1.一个问题引发的思考 大家在群里讨论了一个问题,奉文帅之命写篇作文,且看: String user_web = "user_web"String sql = "update user set user_web="+user_web+" where userid=2343"; 大家看看这条sql有没有问题,会将user_web字段 更新成什么? 问题的结论是:执行后的记录结果跟执行前一样,(执行时的sql语句为 update user set u

浅谈:APP有哪些常被黑客利用的安全漏洞

首先,说到APP的安全漏洞,身为程序猿的大家应该不陌生:如果抛开安卓自身开源的问题的话,其主要产生的原因就是开发过程中疏忽或者代码不严谨引起的.但这些责任也不能怪在程序猿头上,有时会因为BOSS时间催得紧等很多可观原因.所以本文会对 Android 系统的开源设计以及生态环境做一些浅谈. 1. 应用反编译漏洞:APK 包非常容易被反编译成可读文件,稍加修改就能重新打包成新的 APK.利用:软件破解,内购破解,软件逻辑修改,插入恶意代码,替换广告商 ID.建议:使用 ProGuard 等工具混淆代

浅谈企业内部安全漏洞的运营(一):规范化

一提到漏洞,不少安全工程师又爱又恨.爱在,挖掘和复现漏洞本身,就是特别有意思的事情,能登上国内各大SRC排行榜,进入谷歌名人堂.被微软致谢也是充满成就感的事情.恨在,如果企业真的发现的漏洞多了,就有"野火烧不尽 春风吹又生"之感,仿佛自己的时间被不断的发现漏洞.确认和分发漏洞.推动修复漏洞给淹没了.不修漏洞吧,风险在那儿好像也不踏实:修吧,总是在找业务方,业务方还不一定立即找得到.乐意修.一段时间下来,觉得仿佛漏洞怎么修也修不完,自己不像做技术的,反而很多时间花在技术之外,不少开发还谈

浅谈.NET编译时注入(C#--&gt;IL)

原文:浅谈.NET编译时注入(C#-->IL) .NET是一门多语言平台,这是我们所众所周知的,其实现原理在于因为了MSIL(微软中间语言)的一种代码指令平台.所以.NET语言的编译就分为了两部分,从语言到MSIL的编译(我喜欢称为预编译),和运行时的从MSIL到本地指令,即时编译(JIT).JIT编译分为经济编译器和普通编译器,在这里就不多说了,不是本文的重点.本文主要讨论下预编译过程中我们能做的改变编译情况,改变生成的IL,从编译前后看看微软C#3.0一些语法糖,PostSharp的静态注入