说明:文章所有内容均截选自实验楼教程【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注入还有以下项目教程可以学习:

Sql注入基础原理介绍的更多相关文章

  1. SQL注入基础原理

    Web安全: 三层架构(3-tier architecture) 通常意义上就是将整个业务应用划分为: 界面层(User Interface layer) 业务逻辑层(Business Logic L ...

  2. sql注入基础(原理)

    一.注入的分类 按数据库分类:1.整形 2.字符型(需要考虑单引号闭合的问题,还有注释不必要的语句  #  ) eag:  id='admin'  id='admin and1=1'这样会报错  所以 ...

  3. sql注入--基础

    什么是sql注入: 利用SQL语句 在外部 对数据库进行 查询,更新等 动作 sql注入的原理: 输入值可控且带入数据库执行(前提) 接受的变量传值未进行过滤(实质) sql注入的目的: 获取数据(网 ...

  4. SQL注入的原理以及危害

    SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符 ...

  5. Sqli-labs之sql注入基础知识

    (1)注入的分类 基于从服务器接收到的响应  ▲基于错误的SQL注入 ▲联合查询的类型 ▲堆查询注射 ▲SQL盲注 •基于布尔SQL盲注 •基于时间的SQL盲注 •基于报错的SQL盲注 基于如何处理输 ...

  6. SQL注入的原理及一般步骤

    原理 SQL注入是一种攻击方式,在这种攻击方式中,恶意代码被插入到字符串中,然后该字符串传递到SQL Server的实例以进行分析和执行.任何构成SQL语句的过程都应进行注入检查,因为SQL Serv ...

  7. 防止sql注入和sqlmap介绍

    sql注入问题从WEB诞生到现在也一直没停过,各种大小公司都出现过sql注入问题,导致被拖库,然后存在社工库撞库等一系列影响. 防止sql注入个人理解最主要的就一点,那就是变量全部参数化,能根本的解决 ...

  8. 【渗透课程】第五篇-SQL注入的原理

    哈哈哈,讲到注入了.我想给大家讲注入的原理.这个我们前面的前言篇就说过,所谓的SQL注入就是,绕过数据库验证机制直接执行SQL语句.怎么说呢,我们先讲一个概念吧! 网站和网页的区别 单纯的网页是静态的 ...

  9. 初级安全入门——SQL注入的原理与利用

    工具简介 SQLMAP: 一个开放源码的渗透测试工具,它可以自动探测和利用SQL注入漏洞来接管数据库服务器.它配备了一个强大的探测引擎,为最终渗透测试人员提供很多强大的功能,可以拖库,可以访问底层的文 ...

随机推荐

  1. 《Node.js在CLI下的工程化体系实践》成都OSC源创会分享总结

    背景: 随着开发团队规模不断发展壮大,在人员增加的同时也带来了协作成本的增加,业务项目越来越多,类型也各不相同.常见的类型有组件类.活动类.基于React+redux的业务项目.RN项目.Node.j ...

  2. python 写入CSV出现空白行问题及拓展

    最近在学习python,要求让出表格.期间在不懂得情况下,写了些代码,运行后发现存在输入写入猴行之间存在空白行.猴发现原来问题在打开文件的方式不对. 现将我的学习交流经验分享如下: 1,自己的起初代码 ...

  3. CodeForces - 748E (枚举+脑洞)

    E. Santa Claus and Tangerines time limit per test 2 seconds memory limit per test 256 megabytes inpu ...

  4. [No0000100]正则表达式匹配解析过程分析(正则表达式匹配原理)&regexbuddy使用&正则优化

    常见正则表达式引擎引擎决定了正则表达式匹配方法及内部搜索过程,了解它至关重要的.目前主要流行引擎有:DFA,NFA两种引擎. 引擎 区别点 DFA Deterministic finite autom ...

  5. Spring 嵌套方法AOP不生效问题

    问题描述, 如下Abc定义为一个Bean, b()方法添加@TargetDatasource,定义切面DynamicDataSourceAspect,期望:调用a()方法,b()方法上的AOP拦截能生 ...

  6. 应用打开其xlspptdoc等

    http://www.libxl.com/documentation.html  xls读写编辑类库libxl https://blog.csdn.net/songbob/article/detail ...

  7. n个元素的数组向左循环移动i个位置

    算法的完美 时间:2012-03-19 / 分类:学习园地,网络文摘 / 浏览:1797 / 0个评论 发表评论 考虑一个问题:将一个具有n个元素的数组向左循环移动i个位置.有许多应用程序会调用这个问 ...

  8. invariant theory 不变量理论

    https://baike.baidu.com/item/不变量理论/9224903?fr=aladdininvariant theory 一组几何元素由 k个参数组成的向量 P1表示.若 T为某一变 ...

  9. [http][ident] ident协议

    读<http权威指南>提到了ident协议. 接受客户端连接 在这个步骤中,包括建立连接,这里Web服务器可以随意拒绝或立即关闭任意一条连接.客户端主机名解析部分,服务器可以用“反向DNS ...

  10. python之路(转载)

    Python之路   Python生产环境部署(fastcgi,uwsgi)   Django   缓存.队列(Memcached.redis.RabbitMQ)   Python(九) Python ...