从WebShell到域控实战详解

出品|MS08067实验室(www.ms08067.com)

渗透环境
  首先介绍此次渗透的环境:假设我们现在已经渗透了一台服务器PAVMSEF21,该服务器内网IP为10.51.0.21。扫描后发现内网网络结构大概如图所示,其中PAVMSEF21是连接外网和内网的关键节点,内网其他服务器均不能直接连接。

我们的渗透目标是通过一个普通的WebShell权限一步步地获得域管权限,从而掌控整个内网。

一. 提升权限

  上传免杀的Payload到机器名为PAVMSEF21、IP为10.51.0.21的服务器上,然后在“中国菜刀”或者WebShell下运行,如图所示。

  获得Meterpreter Shell后要做的第一件事情就是提权。通常,在渗透过程中很有可能只获得了一个系统的Guest或User权限。低的权限级别将使我们受到很多的限制,所以必须将访问权限从Guset提升到User,再到Administrator,最后到SYSTEM级别。
  我们先尝试利用本地溢出漏洞提权,即使用本地漏洞的利用程序(Local Exploit)提升权限。也就是说,通过运行一些现成的、能造成溢出漏洞的Exploit,把用户从User组或其他系统用户组提升到Administrator组(或root)。
  此时,我们获取的权限是一个普通域用户权限,如图所示。

  首先利用本地溢出漏洞提权,发现服务器补丁打得很全,尝试利用MS1505、MS15078等,都以失败告终,如图所示。

  再尝试绕过Windows账户控制(UAC),我们现在具有一个普通域用户的权限。利用Bypass UAC模块提权,又以失败告终,如果成功会返回一个新的Meterpreter Shell,如图所示。

  使用Bypass UAC模块进行提权时,系统当前用户必须在管理员组,而且用户账户控制程序UAC设置为默认,即“仅在程序试图更改我的计算机时通知我”,而且Bypass UAC模块运行时会因为在目标机上创建多个文件而被杀毒软件识别。我们没能绕过UAC,可能是这两个原因。
  其实提权没有成功也不要紧,我们还是可以以此服务器为跳板,攻击其他服务器的。

二. 信息收集

  我们此时虽然提权不成功,但还是可以进行域渗透测试的。有了内网的第一台机器的权限后,收集信息是很关键的一步,也是内网渗透中不可或缺的一部分。
  首先要查看当前机器的网络环境,收集域里的相关信息,包括所有的用户、所有的计算机,以及相关关键组的信息,下面列出了常用的命令及其作用,如图所示。

net user /domain:查看域用户。
net view /domain:查看有几个域。
net view /domain:XXX:查看域内的主机。
net group /domain:查看域里面的组。
net group “domain computers” /domain:查看域内所有的主机名。
net group “domain admins” /domain:查看域管理员。
net group “domain controllers” /domain:查看域控制器。
net group “enterprise admins” /domain:查看企业管理组。
nettime/domain:查看时间服务器。

  通过收集以上信息,我们可以分析出很多重要的线索,例如内网是怎么划分的,各机器名的命名规则,根据机器名尝试找出重要人物的计算机,以及目标机是否为多层域结构,关键是要探测出域管理员的名字和域服务器的名字等信息。

三. 获取一台服务器的权限

  我们的目标是域服务器,此时有两种情况:当前服务器可以直接攻击域服务器和不可以直接攻击域服务器。不可以直接攻击又分为两种情况:如果是权限不够就需要提升权限;如果是不能连接到域服务器,则需要攻击内网中某个可以连接到域服务器的服务器,然后以此为跳板再攻击域服务器。
  现在因为权限问题不可以直接攻击域服务器,整理下思路,可以采取以下方法继续渗透。
— 使用Meterpreter目前拥有的权限添加内网路由,进行弱口令扫描。
— 使用PowerShell对内网进行扫描(要求目标机是Windows 7以上的服务器)。
— 架设Socks4a,然后Socks会自动进行内网扫描。
— 利用当前权限进行内网IPC$渗透。
— 其他方法。
  通过上面的分析,我们先选择最简单的方法,在net view的机器名里选择一个和我们机器名相似的服务器来试试,不出意外的话,成功率很高,如图所示。

  下面再给读者温习下经典的IPC$入侵。
  IPC$入侵,即通过使用Windows系统中默认启动的IPC$共享获得计算机控制权的入侵,在内网中极其常见。
  假设现在有一台IPC$主机:127.0.0.25,输入以下命令。

D:>net use \127.0.0.25\ipc$      #连接127.0.0.25的IPC$共享
D:>copy srv.exe \127.0.0.25\ipc$      #复制srv.exe上去
D:>net time \127.0.0.25         #查时间
D:>at\127.0.0.25 10:50 srv.exe  #用at命令在10点50分启动srv.exe(注意这里设置的时间要比主机时间快)

  上述命令中的at就是让计算机在指定的时间做指定事情的命令(例如运行程序)。
这里把免杀的Payload上传到PAVMSEP131服务器,然后利用at命令启动Payload,反弹回Meterpreter Shell,具体操作如图所示。

将木马复制到目标服务器

查看系统时间

使用at命令启动木马

  接着返回handler监听,可以看到反弹成功了,我们获得了PAVMSEP131服务器的Meterpreter Shell,如图所示。

我们先看看PAVMSEP131服务器的信息和现在的权限,如图所示。

  可以看到没有SYSTEM权限,说明既可以用Mimikatz等工具,也可以用run post/windows/gather/hashdump来抓Hash。
  我们在用Mimikatz抓Hash之前要注意一点:如果服务器安装的是64位操作系统,要把Mimikatz进程迁移到一个64位的程序进程中,才能查看64位系统的密码明文,32位系统没有这个限制。
  这里使用Mimikatz抓Hash,具体操作如图所示。

接着查看抓到的域用户的权限,如图所示。

四. PowerShell寻找域管在线服务器

  Windows PowerShell是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用.NET Framework的强大功能。PowerShell还允许将几个命令组合起来放到文件里执行,实现文件级的重用,也就是说有脚本的性质。
  将Hunter模块上传到主机名为PAVMSEP131,IP为10.51.0.131的服务器中,然后输入Invoke-UserHunter,如图所示。
  具体命令如下所示。

powershell.exe -exec bypass -Command "&{Import-Module .\powerview.ps1;Invoke-UserHunter}"`

  可以看到域管理员当前在线登录的机器主机名为PAVMSXD30,IP为10.51.0.30,此时需要入侵此服务器,然后将其迁移到域管理登录所在的进程,这样便拥有了域管理的权限。

五. 获取域管权限

  利用获取到的HASH,我们成功地获取到主机名PAVMSXD30,IP为10.51.0.30的服务器权限,接下来就可以渗透域控了。
  首先利用getsystem命令提升权限,如图所示。

  可以看到我们现在的UID是sonicwall,从前面获取的域管理员账号信息中已知sonicwall是域管理员。

  然后利用ps命令找到域管理所在的进程,把Meterpreter Shell进程迁移到此进程中,成功后就获得了域管理权限,如图所示。

  这里除了迁移进程外,也可以使用Metasploit中的窃取令牌功能,同样能获得获得域管理权限。
  接着查看主域控IP,这里使用net time命令,一般来说时间服务器都是域服务器,如图所示。

  可以看到域服务器的主机名为PAVMSAD64,IP地址为10.51.0.63。
  现在我们可以使用经典的IPC$入侵来反弹一个Meterpreter Shell,具体操作如图所示。

  提示at命令已经被弃用,现在使用schtasks添加计划任务,因为目标机的系统是Windows 2012。因为现在已经在域管理员权限下面了,所以要给域控添加一个管理员账户,如图所示。

  利用如下命令确认账户是否添加成功,如图所示。

  可以看到我们已经成功添加了管理员账户。

六. 登录域控制器

  现在域控的权限也终于到手了。接下来就要登陆域控,然后抓域控的Hash。
  整理下思路,常见的登录域控的方式有以下几种。
1.利用IPC上传AT&Schtasks远程执行命令。
2.利用端口转发或者Socks登录域控远程桌面。
3.登录对方内网的一台电脑使用pstools工具包中的PsExec来反弹Shell。
4.使用Metasploit下的psexec, psexec_psh;Impacket psexec;pth-winexe;Empire Invoke-Psexec等PsExec类工具反弹shell。
5.使用Metasploit下的smb_login来反弹Meterpreter。
6.使用WMI(Windows Management Instrumentation)来进行攻击。
7.使用PsRemoting posershel远程执行命令。其他一些方法。
  这里采用最常见也是效果最好的,Metasploit下的PsExec来反弹Meterpreter,使用时注意以下这两点,如图所示。
    — MSF中的PsExec模块。
    — cuestom模块,建议使用类似Veil之类的工具来生成免杀的Payload。
  这里采用最常见也是效果最好的方式——Metasploit下的PsExec来反弹Meterpreter,使用时注意以下两点,如图所示。

— MSF中的PsExec模块。
— cuestom模块,建议使用类似Veil之类的工具生成免杀的Payload。
  可以看到已经反弹成功了,然后先迁移进程,查看域控的系统信息和sessions控制图,如图所示。

  思路:可以看到现阶段控制的session共有5个。session1为WebShell反弹,session2利用ipc$入侵,渗透session4是为了获取域管在线服务器,session5为域。整个渗透过程一环套一环,环环相扣。
  有了域控的权限,接着来抓Hash,常用方法有以下几种。
— 使用Metasploit自带的dumphash或者smart_hashdump模块导出用户的Hash。
— 利用PowerShell的相应模块导出Hash。
— 使用WCE、Mimikatz等工具。
— 其他方法。
  这里使用了Metasploit自带的dumphash模块。需要注意:要想使用此模块导出Hash,必须要有SYSTEM的权限才行,具体操作如图所示。

七. SMB爆破内网

  有了域控的密码,接下来只要快速在内网扩大控制权限就好,具体操作如下所示。
— 利用当前获取到的域控账户密码,对整个域控IP段进行扫描。
— 使用SMB下的smb_login模块。
— 端口转发或者Socks代理进内网。
  我们先在Metasploit添加路由,然后使用smb_login模块或者psexec_scanner模块进行爆破,具体操作如图所示。

  可以看出,我们获取了大量内网服务器的密码,下面就可以畅游内网了。可以使用Meterpreter的端口转发,也可以使用Metasploit下的Socks4a模块或者第三方软件。
  这里简单地使用Meterpreter的端口转发即可,如图所示。

八. 清理日志

  清理日志主要有以下几个步骤,如图所示。
— 删除之前添加的域管理账号。
— 删除所有在渗透过程中使用过的工具。
— 删除应用程序、系统和安全日志。
— 关闭所有的Meterpreter连接。



转载请联系作者并注明出处!

Ms08067安全实验室专注于网络安全知识的普及和培训。团队已出版《Web安全攻防:渗透测试实战指南》,《内网安全攻防:渗透测试实战指南》,《Python安全攻防:渗透测试实战指南》,《Java代码安全审计(入门篇)》等书籍。
团队公众号定期分享关于CTF靶场、内网渗透、APT方面技术干货,从零开始、以实战落地为主,致力于做一个实用的干货分享型公众号。
官方网站:https://www.ms08067.com/

扫描下方二维码加入实验室VIP社区
加入后邀请加入内部VIP群,内部微信群永久有效!

posted @ 2021-03-26 11:17  Ms08067安全实验室  阅读(598)  评论(0编辑  收藏  举报