完成一次简单的 SQL 注入

先来看几起 SQL 注入的安全事件:

 

 

 

 

 

 

Joomla 对象注入漏洞

 

        事件概述:2015年10月29日国外知名CMS(内容管理系统)Joomla,爆出存在SQL注入漏洞,该漏洞影响了 1.5 到 3.4.5 的所有版本,漏洞利用无须登录,直接在前台即可执行任意PHP代码。这个漏洞在libraries/joomla/sesion/sesion.php文件中,joomla将HTTP_USER_AGENT和HTTP_X_FORWARDED_FOR直接存入到了session中, 只需将恶意代码放在 User-Agent 或 X-Forwarded-For 中发送给网站,将网站返回的cookie值带入第二个请求中,即可触发漏洞。或是在第一个请求中指定cookie值,在第二次中带上同样cookie值也能触发漏洞,并会在phpinfo()返回结果。

        危险指数:★★★★★★☆☆☆☆

        一句话点评:joomla出现的SQL注入不少,但出现如此严重的漏洞,还属罕见。此漏洞几乎通杀joomla全版本,后续影响值得我们持续关注。

 

Joomla 是国外的CMS(内容管理系统),对于国内的技术人员来说,比较陌生。但Joomla染指的两个大项目,大家应该特别了解:

 

GitHub

 

全世界最大的同性交友网站,其实是重型武器库。没有什么小工具在这里是找不到的。还记得我们的SQL在线答题小程序吗:

我的第一个小程序 - SQL 开发者问答

就是我在这里找到的。

 

JetBrains

 

好用到爆的编程工具,如果你是Java,Python系的编程人员,即使要装X,JetBrains 也是你的神器。能让程序员满意的工具,那必定是好工具。

 

 

 

 

 

东欧黑客利用SQL注入漏洞成功攻破英议会官网

 

 

一位绰号"Unu"的罗马尼亚黑客在自己的博客上披露,他发现英国议会的官方网站上存在SQL注入漏洞,而这些漏洞则暴露了很多机密信息,包括未加密 的登录证书等。利用这种漏洞,他宣称只要在浏览器中的网页地址后面加上数据库指令,就可以从网站后台服务器上窃取到有关的机密数据。更糟糕的是,当局对该网页漏洞的防范意识和反应速度都很难令人满意。

 

 

总以为安全部门会对SQL注入引起足够多的关注,但事实上注入依旧是网站被黑,被脱裤最常用的手段。

 

640?wx_fmt=png

(图片来源:安全牛)

 

 

截止2017年,安全牛统计称SQL注入依旧是Top1的安全风险事件。

 

640?wx_fmt=png

 

640?wx_fmt=png

 

且各家网络安全公司都称 SQL注入黑洞依旧风险巨大。

 

 

 

 

 

 

那么 SQL 注入的原理是什么呢?来看个简单的例子

 

一个简单的产品搜索界面表单,根据产品名字来搜索产品对应的价格与库存:

 

640?wx_fmt=png

(来源:https://www.youtube.com/watch?v=ciNHn38EyRc)

 

来看下搜索的整个过程:

 

给 php server 发送 hammer 关键字:

 

640?wx_fmt=png

(来源:https://www.youtube.com/watch?v=ciNHn38EyRc)

 

php 应用向数据库发送查找 hammer 的指令:

 

640?wx_fmt=png

(来源:https://www.youtube.com/watch?v=ciNHn38EyRc)

 

数据库收到搜索指令,返回查询结果

 

640?wx_fmt=png

(来源:https://www.youtube.com/watch?v=ciNHn38EyRc)

 

作为C/S,B/S过来的程序员,可能是会这么处理整个流程的:

 

先有一个基本的动态SQL语句:

 

640?wx_fmt=png

(来源:https://www.youtube.com/watch?v=ciNHn38EyRc)

 

前端 UI 会发送搜索关键字符串 hammer ,经由 php server程序,最终落脚到数据库。我猜 php 应该是这样的脚本:

 

 

db.execute("select * from prod where like '%searchKeyword%' ",searchKeyWord)	
注:	
1)这里 searchKeyword 就是搜索框里捕获用户输入字符串的变量	
2)prod 是存放产品信息的表	

 

 

让我们改写一下:

 

640?wx_fmt=png

(来源:https://www.youtube.com/watch?v=ciNHn38EyRc)

 

 

假如,我们把单引号 ' 提前,加上 ";--", ,那么作用就是查询所有的产品。而所做的事情,就是把 hammer 替换成 "';--"而已。整个SQL语句就变成了这样:

 

 

select * from prod where like '%'; -- 	
? : 表示数据库字段或者表名	
;断句符号	
--注释符号

 

640?wx_fmt=png

(来源:https://www.youtube.com/watch?v=ciNHn38EyRc)

 

结果就是查询到了所有的产品:

 

640?wx_fmt=png

(来源:https://www.youtube.com/watch?v=ciNHn38EyRc)

 

这,就是简单的一次SQL注入。

 

想想看,这如果是你同事,老板的工资库,亦或是银行账户,A股股票交易账户,酒店开房记录,想象空间是不是更大?

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dbLenis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值