小米技术社区
小米技术社区管理员 关于小米

27岁,山西运城人,职业电商经理人,前端开发工作者,从事过网站建设、网络推广、SEO、SEM、信息流推广、二类电商、网络运维、软件开发,等相关电商工作,经验较为丰富,小米技术社区致力于为广大从事Web前端开发的人员提供一些力所能及的引导和帮助 ...[更多]

E-mail:mzze@163.com

Q Q:32362389

W X:xiaomi168527

小米技术社区大牛王飞 关于王飞

27岁,山西运城人,职业电商经理人,网络工程师兼运维,从事过运营商网络建设,企业网络建设、优化。数据中心网络维护等通过,经验丰富,座右铭:当自己休息的时候,别忘了别人还在奔跑。 ...[更多]

E-mail:wf_live@126.com

Q Q:3940019

微博:王小贱ss

小米技术社区设计小艳 关于小艳

大于花一样的年龄,河南郑州是我家,2010年在北京接触团购网,2011年进入天猫淘宝一待就是四年,如今已经将设计走向国际化(ps:误打误撞开始进入阿里巴巴国际站的设计,嘿嘿)五年电商设计,丰富经验,从事过天猫淘宝阿里各项设计,店铺运营,产品拍摄;我将我的经历与您分享是我的快乐!座右铭:越努力越幸运! ...[更多]

E-mail:97157726@qq.com

Q Q:97157726

标签云
精品推荐
您的位置:首页 > 网络运维 > 安全防护

SQL注入攻击产生的原因和威胁,SQL注入的案例

分类: 安全防护30个赞

什么是Sql注入攻击

 SQL注入攻击通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,它目前是黑客对数据库进行攻击的最常用手段之一。


Sql注入产生原因及威胁

 当我们访问动态网页时, Web 服务器会向数据访问层发起 Sql 查询请求,如果权限验证通过就会执行 Sql 语句。 这种网站内部直接发送的Sql请求一般不会有危险,但实际情况是很多时候需要结合用户的输入数据动态构造 Sql 语句,如果用户输入的数据被构造成恶意 Sql 代码,Web 应用又未对动态构造的 Sql 语句使用的参数进行审查,则会带来意想不到的危险。


 Sql 注入带来的威胁主要有如下几点


1.猜解后台数据库,这是利用最多的方式,盗取网站的敏感信息。

2.绕过认证,列如绕过验证登录网站后台。

3.注入可以借助数据库的存储过程进行提权等操作


判断是否存在sql注入漏洞

通常情况下,可能存在 Sql 注入漏洞的 Url 是类似这种形式 :http://xxx.xxx.xxx/abcd.php?id=XX 对 Sql 注入的判断,主要有两个方面:


判断该带参数的 Url 是否存在 Sql 注入?

如果存在 Sql 注入,那么属于哪种 Sql 注入?

 可能存在 Sql 注入攻击的 ASP/PHP/JSP 动态网页中,一个动态网页中可能只有一个参数,有时可能有多个参数。有时是整型参数,有时是字符串型参数,不能一概而论。总之只要是带有参数的 动态网页且此网页访问了数据库,那么就有可能存在 Sql 注入。如果程序员没有足够的安全意识,没有进行必要的字符过滤,存在SQL注入的可能性就非常大。


 最为经典的单引号判断法: 在参数后面加上单引号,比如:


http://xxx/abc.php?id=1'


 如果页面返回错误,则存在 Sql 注入。 原因是无论字符型还是整型都会因为单引号个数不匹配而报错。 (如果未报错,不代表不存在 Sql 注入,因为有可能页面对单引号做了过滤,这时可以使用判断语句进行注入)


判断Sql注入漏洞的类型

 通常 Sql 注入漏洞分为 2 种类型:


数字型

字符型

 其实所有的类型都是根据数据库本身表的类型所产生的,在我们创建表的时候会发现其后总有个数据类型的限制,而不同的数据库又有不同的数据类型,但是无论怎么分常用的查询数据类型总是以数字与字符来区分的,所以就会产生注入点为何种类型。



Sql注入实例

1 绕过登陆

 我们正常的登陆是输入用户名密码到后台数据库判断用户名密码是否正确,看看后台代码是如何实现的


select * from user where username = '$name' and password = '$pwd'"

2

 用户名密码都输入123,实际执行的sql语句是:


select * from users where username='123' and password='123'

3

 我们尝试在用户名中输入 123’ or 1=1 #, 密码同样输入 123’ or 1=1 #显示登陆成功,为什么会登录成功呢,我们来看看实际执行的sql语句


select * from users where username='123' or 1=1 #' and password='123' or 1=1 #'

4

 按照 Mysql 语法,# 后面的内容会被忽略,所以以上语句等同于(实际上密码框里不输入任何东西也一样):


select * from users where username='123' or 1=1

5

 由于判断语句 or 1=1 恒成立,所以结果当然返回真,成功登录。 我们再尝试不使用 # 屏蔽单引号,采用手动闭合的方式: 我们尝试在用户名中输入 123’ or ‘1’=’1, 密码同样输入 123’ or ‘1’=’1 (不能少了单引号,否则会有语法错误): 此处输入图片的描述 此处输入图片的描述 实际执行的 Sql 语句是:


select * from users where username='123' or '1'='1' and password='123' or '1'='1`

6

 看到了吗?两个 or 语句使 and 前后两个判断永远恒等于真,所以能够成功登录。


 还有通过sql语句注入来获取隐私信息,所以sql注入需要引起程序员们的注意。


sql注入可能出现在哪个地方:


http头、cookies、referee、user、agent、post提交数据包的地方等


小米技术社区

本站内容均为小米原创,转载请注明出处:小米技术社区>> SQL注入攻击产生的原因和威胁,SQL注入的案例