专栏首页玄魂工作室从WebShell到域控实战详解

从WebShell到域控实战详解

渗透环境

首先介绍此次渗透的环境:假设我们现在已经渗透了一台服务器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连接。

本文分享自微信公众号 - 玄魂工作室(xuanhun521)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 泛微 e-cology OA 远程代码执行漏洞复现

    Poc已在github公开,由于环境搭建较为复杂,所以我在空间搜索引擎中找了国外的网站进行复现

    用户1631416
  • Hacker基础之Linux篇:系统简介特别番之Kali Linux

    0x01. 前言 作为安全界的明星,Kali可以说是无人不知无人不晓,当然,除了Kali之外,我们还有许多的可以选择的工具,比如: ParrotSec ? ...

    用户1631416
  • 【渗透实战】记一次艰难的内网漫游之旅_拿下472台主机shell!

    控制软件有一个功能,就是上传作业,很幸运的是教师机和学生机一样,全部使用windows默认设置:不显示已知文件的后缀 提交作业时的标准是提交doc或xls文件,...

    用户1631416
  • 从WebShell到域控实战详解

    首先介绍此次渗透的环境:假设我们现在已经渗透了一台服务器PAVMSEF21,该服务器内网IP为10.51.0.21。扫描后发现内网网络结构大概如图所示,其中PA...

    Ms08067安全实验室
  • Redis 哨兵 Sentinel

    redis-server /path/to/sentinel.conf --sentinel

    WindWant
  • 中国有微信和支付宝, 你为啥还费力不讨好去做区块链? | 人物志

    他是一位连续创业者,曾在当时互联网最大二级市场票务平台悠闲地“打工”,生活无忧无虑无所求。一次偶然的机会,他“勾搭”上了一位澳洲技术男,异地畅聊、跨国面基之后,...

    区块链大本营
  • 浅析redis主从、哨兵和Cluster

    在这篇文章我们主要来理一理redis的复制(replication)和两种高可用方案Redis哨兵(Sentinel)和自动分区(Cluster)。

    开发架构二三事
  • 使用jekyll搭建个人博客

    其实蛮纠结这篇文章到底放在哪个分类下呢?开发环境搭建?还是环境搭建?后面想了一下,写博客总结是和我们日常开发一样重要的任务!也是一种开发,那么博客的搭建自然就算...

    呼延十
  • flask + Python3 实现的的

    **背景: 1.平时测试接口,总是现写代码,对测试用例的管理,以及测试报告的管理持久化做的不够, 2.工作中移动端开发和后端开发总是不能并行进行,需要一个moc...

    py3study
  • 生物信息基础(一):SSH应用,如何优雅地登录远程服务器?

    作为一名生信工程师,每天都要跟服务器打交道,如何登录到远程服务器上去呢?通常有两种方法:

    简说基因

扫码关注云+社区

领取腾讯云代金券