网络安全及防御之SQL注入原理介绍

课程目标:讲解SQL注入的原理、特点、危害,SQL注入的攻击手法和MySQL注入的常用函数,讲解相关工具,如何去防御SQL注入。

任务目标:了解SQL注入相关概念,掌握SQL注入攻击手法,了解SQL注入相关工具和防御方法。

A.SQL注入概述
什么是SQL注入

所谓SQL注入,就是通过SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。比如先前的很多影视网站泄露VIP会员密码大多就是通过Web表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击。

SQL注入的原理

SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。

385CC726-D2C8-0029-0AD7-22C81914FA1F.png

SQL注入的地位

E6DE2BE2-AB8D-733D-B4E4-31872473BC7E.png

739A2BE8-CEF8-E0B3-112A-2CE5BBBAEFA2.png

SQL注入的来源

0E24A492-3A61-A4AF-869B-26F8F55C3826.png

SQL注入的主要特点

1.变种极多

有经验的攻击者会手工调整攻击的参数,致使攻击的数据是不可枚举的,这导致传统的特征匹配方法仅能识别到相当少的攻击。或者是最常规的攻击,难以做到防范。

2.攻击简单

攻击过程简单,目前互联网上流行的众多SQL注入攻击工具,攻击者借助这些工具可以很快的对目标网站进行攻击或者是破坏,危害大。

3.危害极大

由于web语言自身的缺陷,以及具有安全编程的开发人员较少,大多数web应用系统均具有被SQL注入攻击的可能,而攻击者一旦攻击成功,就可以对控制整个web应用系统对数据做任何的修改或者是窃取,破坏力达到了极致。

SQL注入的危害

1.未经授权状况下操作数据库中的数据

2.恶意篡改网页内容//登陆后台后发布的内容,也可以发布对首页的更新,这时候更新可能就是一些非法信息,也可以对系统进行添加账户或者是数据库账号。这个需要拿到web shell或者更高的权限

3.私自添加系统账号或者是数据库使用者账号

4.网页挂木马//拿到web shell或者获取到服务器的权限以后,我们将一些网页木马挂在服务器上,去攻击别人。甚至再严重些我们可以控制整个web服务器,这个都是非常危险的。

B.SQL注入攻击
SQL注入攻击

SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想的得知的数据,这就是所谓的SQL Injection,即SQL注入。

SQL注入威胁表达方式

绕过认证,获得非法权限

拆解后台数据库全部的信息

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

SQL注入典型攻击手段

判断应用程序是否存在注入漏洞

收集信息、并判断数据库类型

根据注入参数类型,重构生气了语句的原貌

拆解表名、字段名

获取账户信息、攻击web或为下一步攻击做准备

SQL注入是否存在注入的判断方式

00DE126E-254F-E913-316F-E18177DA0B4A.png

SQL注入实战步骤

BA809AD3-32FA-C5B6-7C37-3F5D9F2919F8.png

按照注入点类型来分类

B85D6373-A360-0047-982B-F83FD5A1A16E.png

按照数据提交的方式来分类

718D7A42-6F78-B488-70AB-DA2FF517A810.png

按照执行效果来分类
  1. 基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
  2. 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
  3. 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
  4. 联合查询注入,可以使用union的情况下的注入。
  5. 堆查询注入,可以同时执行多条语句的执行时的注入。
C.MySQL注入常用函数
MySQL的注释风格

0769E379-1BCC-3EFA-3CA8-5FC6F5B745F4.png

E394A973-E7A0-069C-CD06-7BEEF4031CE9.png

MySQL——union操作符

union操作符用于拼接两个或者多select查询语句

union中的每个查询必须拥有相同的列数

039D3A3A-9C65-1157-EB29-5C59BDC92EFC.png

MySQL——常用函数

17EEFC20-F2A8-4AF4-FBDF-54D8E2DCF919.png

MySQL——字符串连接函数

concat(str1,str2...)函数,直接连接

group_concat(str1,str2...)函数,使用逗号做为分隔符

concat_ws(sep,str1,str2...)函数,使用第一个参数做为分隔符

A9E49A4C-369B-E843-505A-66D64464BD2E.png

MySQL——information-schema结构

BEFBB75C-AD67-5B13-B2BC-244D119D3B27.png

D.SQL注入相关工具
sqlmap介绍

SQLMAP是一个开源的渗透测试工具,它主要用于自动化地侦测和实施SQL注入攻击以及渗透数据库服务器。SQLMAP配有强大的侦测引擎,适用于高级渗透测试用户,不仅可以获得不同数据库的指纹信息,还可以从数据库中提取数据,此外还能够处理潜在的文件系统以及通过带外数据连接执行系统命令等。

D80B5DFA-FBFA-0C6E-1672-F0378B39A037.png

Pangolin介绍

Pangolin能够通过一系列非常简单的操作,达到最大化的攻击测试效果。它从检测注入开始到最后控制目标系统都给出了测试步骤。Pangolin时目前国内使用率最高的SQL注入测试的安全软件,可以说是网站安全测试人员的必备工具之一。

啊D注入工具

啊D注入工具是一种主要用于SQL的注入工具,由彭岸峰开发,使用了多线程技术,能在极短的时间内扫描注入点。使用者不需要经过太多的学习就可以很熟练的操作。并且该软件附带了一些其他的工具,可以为使用者提供极大的方便。

Havij注入工具

HavijPro是一款自动化地SQL注入工具,它能够帮助渗透测试人员发现和利用Web应用程序的SQL注入漏洞。Havij不仅能够自动挖掘可利用的SQL查询,还能够识别后台数据库类型、检索数据的用户名和密码hash、转储表和列、从数据库中提取数据,甚至访问底层文件系统和执行系统命令,当然前提是有一个可利用的SQL注入漏洞。Havij支持广泛的数据库系统,比如MsSQL,MySQL,MSAccess and Oracle。Havij支持参数配置以躲避IDS,支持代理,后台登陆地址扫描。

C8FFF70D-CC6C-4637-6337-AD12E0EDBF9B.png

E.SQL注入防御
  1. 开发人员在开发过程中要有SQL注入防御的思想,对用户输入的所有内容都要进行过滤。
  2. 使用数据库时,命名应该较为复杂,不应出现admin,user这样的库以及username,password这样的字段。
  3. 涉及密码的时候一定要加密存储。
  4. 使用一些框架及模板前检查代码是否有输入内容检测。
  5. 测试阶段,应进行SQL测试。
  6. 数据库权限最小化,防止拿到webshell权限,不要用特权账户或者能够登陆系统的账户启动数据库。
收藏 (0)
评论列表
正在载入评论列表...
我是有底线的
为您推荐
    暂时没有数据