MyException - 我的异常网
当前位置:我的异常网» SQL » Sql注入基础原理引见

Sql注入基础原理引见

www.MyException.Cn  网友分享于:2013-10-11  浏览:0次
Sql注入基础原理介绍

说明:文章所有内容均截选自实验楼教程【Sql注入基础原理介绍】~

实验原理

Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击,它目前黑客对数据库进行攻击的最常用手段之一。

该项目带你从介绍 Web 应用运行原理开始,一步一步理解 Sql 注入的由来、原理和攻击方式。

Web 程序三层架构

三层架构(3-tier architecture) 通常意义上就是将整个业务应用划分为:

  • 界面层(User Interface layer)

  • 业务逻辑层(Business Logic Layer)

  • 数据访问层(Data access layer)。

区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构被应用于众多类型的软件开发。
由数据库驱动的Web应用程序依从三层架构的思想也分为了三层:

  • 表示层。

  • 业务逻辑层(又称领域层)

  • 数据访问层(又称存储层)

拓扑结构如下图所示

此处输入图片的描述

在上图中,用户访问实验楼主页进行了如下过程:

  • 在 Web 浏览器中输入 www.shiyanlou.com 连接到实验楼服务器。

  • 业务逻辑层的 Web 服务器从本地存储中加载 index.php 脚本并解析。

  • 脚本连接位于数据访问层的 DBMS(数据库管理系统),并执行 Sql 语句。

  • 数据访问层的数据库管理系统返回 Sql 语句执行结果给 Web 服务器。

  • 业务逻辑层的 Web 服务器将 Web 页面封装成 HTML 格式发送给表示层的 Web 浏览器。

  • 表示层的 Web 浏览器解析 HTML 文件,将内容展示给用户。

在三层架构中,所有通信都必须要经过中间层,简单地说,三层架构是一种线性关系

Sql 注入漏洞

1 Sql 注入产生原因及威胁:

刚刚讲过当我们访问动态网页时, Web 服务器会向数据访问层发起 Sql 查询请求,如果权限验证通过就会执行 Sql 语句。

这种网站内部直接发送的Sql请求一般不会有危险,但实际情况是很多时候需要结合用户的输入数据动态构造 Sql 语句,如果用户输入的数据被构造成恶意 Sql 代码,Web 应用又未对动态构造的 Sql 语句使用的参数进行审查,则会带来意想不到的危险。

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

  • 猜解后台数据库,这是利用最多的方式,盗取网站的敏感信息。
  • 绕过认证,列如绕过验证登录网站后台。
  • 注入可以借助数据库的存储过程进行提权等操作

Sql 注入实例 .验证绕过

我们试试一个利用 Sql 漏洞绕过登录验证的实验。

如下图所示,先下载文件并解压运行:

shiyanlou:~/ $ wget http://labfile.oss.aliyuncs.com/courses/876/sql2.tar.gz
shiyanlou:~/ $ tar -zxvf sql2.tar.gz
shiyanlou:~/ $ cd sql2
shiyanlou:~/ $ sudo apt-get update   
shiyanlou:~/ $ ./deploy.sh

进入 Firefox 浏览器,输入网址 : localhost/sql2 , 按照下图所示顺序,初始化数据:

此处输入图片的描述

此处输入图片的描述

此处输入图片的描述

此处输入图片的描述

准备工作完成之后,我们进入首页发现这是一个普通的登录页面,只要输入正确的用户名和密码就能登录成功。

我们先尝试随意输入用户名 123 和密码 123 登录:

此处输入图片的描述

从错误页面中我们无法获取到任何信息。

看看后台代码如何做验证的:

此处输入图片的描述

实际执行的操作时:

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

当查询到数据表中存在同时满足 username 和 password 字段时,会返回登录成功。

按照第一个实验的思路,我们尝试在用户名中输入 123' or 1=1 #, 密码同样输入 123' or 1=1 #

此处输入图片的描述

此处输入图片的描述

为什么能够成功登陆呢?因为实际执行的语句是:

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

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

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

由于判断语句 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

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

还有很多其他 Mysql 语句可以巧妙的绕过验证,同学们可以发散自己的思维进行尝试。

判断 Sql 注入点

通常情况下,可能存在 Sql 注入漏洞的 Url 是类似这种形式 :http://xxx.xxx.xxx/abcd.php?id=XX

对 Sql 注入的判断,主要有两个方面:

  • 判断该带参数的 Url 是否存在 Sql 注入?
  • 如果存在 Sql 注入,那么属于哪种 Sql 注入?

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

总结

sql注入常用技术有段还包括:

  • 采用非主流通道技术
  • 避开输入过滤技术
  • 使用特殊的字符
  • 强制产生错误
  • 使用条件语句
  • 利用存储过程
  • 推断技术
  • ........

最后

该文章只截选了教程【Sql注入基础原理介绍】部分内容,该项目教程还讲解了以下内容以及全部的项目源码,如果感兴趣的可以点击教程进入网站进行学习~

  • sql注入示例:猜解数据库
  • 判断是否存在 Sql 注入漏洞
  • 判断 Sql 注入漏洞的类型

另外关于sql注入还有以下项目教程可以学习:

文章评论

团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
那些争议最大的编程观点
那些争议最大的编程观点
我是如何打败拖延症的
我是如何打败拖延症的
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
Java程序员必看电影
Java程序员必看电影
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
为什么程序员都是夜猫子
为什么程序员都是夜猫子
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
旅行,写作,编程
旅行,写作,编程
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
10个调试和排错的小建议
10个调试和排错的小建议
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
编程语言是女人
编程语言是女人
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
程序员必看的十大电影
程序员必看的十大电影
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
代码女神横空出世
代码女神横空出世
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
程序员应该关注的一些事儿
程序员应该关注的一些事儿
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
程序员的鄙视链
程序员的鄙视链
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
一个程序员的时间管理
一个程序员的时间管理
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
漫画:程序员的工作
漫画:程序员的工作
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
程序员和编码员之间的区别
程序员和编码员之间的区别
程序员都该阅读的书
程序员都该阅读的书
 程序员的样子
程序员的样子
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
中美印日四国程序员比较
中美印日四国程序员比较
鲜为人知的编程真相
鲜为人知的编程真相
如何成为一名黑客
如何成为一名黑客
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有