2011-11-27 18 views
11

La mia azienda ha un'intranet molto severa per il lavoro relativo, la rete ha una sola porta per consentire i file dentro e fuori. La sicurezza della porta non consente tipi speciali di file (solo * .txt, * .doc ecc.), E anche in quei tipi specifici di file, cerca pattern che approvi che il file sia davvero di quel tipo. (Non si può semplicemente nascondere un file * .zip come un file * .doc.)Come decodificare un file dalla codifica Base64 con JavaScript

Come un progetto di sicurezza, mi è stato detto di trovare un modo per aggirare questo sistema, e inserire un file exe unico linguaggio C quello dice 'Hello World'.

Quello che ho pensato è stato quello di cambiare l'estensione a .txt, e base64 codificare in modo che sarebbe stato più accettabile per il sistema. Il problema è come decodificarlo una volta dentro. È molto semplice all'esterno, PHP o qualsiasi altro linguaggio decente può farlo per me. Tuttavia, lì, l'unico vero linguaggio a cui ho accesso è JavaScript (su IE6 e forse, FORSE, su IE8).

Quindi la domanda è la seguente, posso usare JavaScript per leggere un file dal file system, decodificarlo, e scrivere di nuovo? o almeno visualizzare il risultato per me?

Nota che non chiedo la decodifica/codifica di un messaggio, questo è facile, cerco di decodificare un file .

Grazie.

+1

Vuoi decodificare il file che viene scaricato e salvato su disco dall'utente? Temo che questo non sia possibile, ma è possibile utilizzare https per tunnelare il file attraverso il firewall/proxy, se supportato. – x4u

+0

@Truth: forse, è possibile utilizzare pneumatici: controllare l'API File, http://www.google.it/url?sa=t&rct=j&q=javascript%20air&source=web&cd=1&ved=0CCAQFjAA&url=http%3A%2F% 2Fonair.adobe.com% 2Ffiles% 2FAIRforJSDevPocketGuide.pdf & ei = xQHSTqr0GIa6hAe8wu3WDQ & usg = AFQjCNGp5Z1AIQMNG1bW0502qF_4JaUSjw & sig2 = a-dnLJi2vlcg847htO9Vwg & cad = rja – AsTheWormTurns

+0

Questo è un sistema interno. Sono abbastanza sicuro che non ci sia AIR lì. Controllerò comunque. –

risposta

6

JSON potrebbe essere la risposta che state cercando. Può davvero fare il trucco.

  1. codificare il file txt in formato JSON. E 'molto probabile che passi la sicurezza porta della vostra azienda

    var myJsonData = { "text" : "SGVsbG8sIHdvcmxkIQ==" }; // <-- base64 for "Hello, world!" 
    
  2. importare il file txt utilizzando il codice HTML semplice sintassi dello script

    <script src="hello.txt" type="text/javascript"> </script> 
    
  3. Questo è tutto! Ora è possibile accedere a un oggetto JSON utilizzando la sintassi:

    alert(myJsonData.text); 
    
  4. Per completare il vostro lavoro, ottenere this semplice decoder Base64 Javascript.

  5. Il gioco è fatto. Ecco il codice (molto semplice) che ho usato:.

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
    <html> 
        <head> 
        <meta http-equiv="content-type" content="text/html; charset=windows-1250"> 
        <meta name="generator" content="PSPad editor, www.pspad.com"> 
        <title></title> 
    
        <script src="base64utils.js" type="text/javascript"> </script> 
        <script src="hello.txt" type="text/javascript"> </script> 
    
        <script type="text/javascript"> 
        function helloFunction() { 
        document.getElementById("hello").innerHTML = decode64(myJsonData.text); 
        } 
        </script> 
    
        </head> 
        <body onload="helloFunction();"> 
        <p id="hello"></p> 
        </body> 
    </html> 
    
+0

pulito! Funzionerà su IE6? –

+0

L'ho provato in Ubuntu usando winetricks tu esegui IE6. Funziona, non so se funzionerà anche nel tuo ambiente, ma IMHO vale la pena provare. – loscuropresagio

+0

Lo proverò. Peccato che la taglia scada prima: X –

6

Utilizzando solo javascript (vale a dire nessun plugin come AIR, ecc), i browser non consentono l'accesso al file system. Non solo non è possibile scrivere un file sul disco, non è nemmeno possibile leggerlo - i browser sono molto rigidi su quel genere di cose, grazie al cielo.

+2

un amico solo suggerito che il flash potrebbe funzionare se è installato. – Jeff

+0

È installato. Non so quale versione, ma controllo la cabina. Per favore aggiungi la soluzione flash se ne hai una. –

+0

Mi spiace, non ho familiarità con il flash me stesso - potresti avere più fortuna a fare un'altra domanda al riguardo. – Jeff

3

Non si può fare questo con JS dritto nel browser, contesto di protezione e il DOM non consentono l'accesso filesystem.

Non si può fare questo con le attuali versioni di Flash, le versioni più vecchie (pre 7 IIRC) ha avuto alcuni problemi di sicurezza che hanno permesso l'accesso del file system.

Si potrebbe fare questo con un plugin personalizzato, e, eventualmente, un applet Java firmato, o COM (componente ActiveX, Internet Explorer solo).

Vorrei suggerire a lavorare con l'IT per quanto riguarda la rete Intranet per aprire il contesto/autorizzazioni necessarie in questo caso come quello può essere il percorso più breve per ciò che si vuole qui. In alternativa, è possibile creare un'utilità della riga di comando per crittografare facilmente/decrittografare determinati file firmati da una chiave comune.

+0

. Il punto è quello di "rodare". Non dovrei lavorare con un addetto ai lavori che potrebbe uccidere il punto.Potresti spiegare di più sull'utilità della riga di comando? –

2

Tutto dipende da come è possibile ottenere il file dentro Se hai l'exe base-64 codificato come txt, si potrebbe usa facilmente Flash! Non sono abbastanza sicuro di come implementarlo, ma puoi caricare un file in flash e as3 usando flex.

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> 

    <mx:Script> 
     <![CDATA[ 
      import flash.net.FileReference; 
      import flash.net.FileFilter; 

      import flash.events.IOErrorEvent; 
      import flash.events.Event; 

      import flash.utils.ByteArray; 

      //FileReference Class well will use to load data 
      private var fr:FileReference; 

      //File types which we want the user to open 
      private static const FILE_TYPES:Array = [new FileFilter("Text File", "*.txt;*.text")]; 

      //called when the user clicks the load file button 
      private function onLoadFileClick():void 
      { 
       //create the FileReference instance 
       fr = new FileReference(); 

       //listen for when they select a file 
       fr.addEventListener(Event.SELECT, onFileSelect); 

       //listen for when then cancel out of the browse dialog 
       fr.addEventListener(Event.CANCEL,onCancel); 

       //open a native browse dialog that filters for text files 
       fr.browse(FILE_TYPES); 
      } 

      /************ Browse Event Handlers **************/ 

      //called when the user selects a file from the browse dialog 
      private function onFileSelect(e:Event):void 
      { 
       //listen for when the file has loaded 
       fr.addEventListener(Event.COMPLETE, onLoadComplete); 

       //listen for any errors reading the file 
       fr.addEventListener(IOErrorEvent.IO_ERROR, onLoadError); 

       //load the content of the file 
       fr.load(); 
      } 

      //called when the user cancels out of the browser dialog 
      private function onCancel(e:Event):void 
      { 
       trace("File Browse Canceled"); 
       fr = null; 
      } 

      /************ Select Event Handlers **************/ 

      //called when the file has completed loading 
      private function onLoadComplete(e:Event):void 
      { 
       //get the data from the file as a ByteArray 
       var data:ByteArray = fr.data; 

       //read the bytes of the file as a string and put it in the 
       //textarea 
       outputField.text = data.readUTFBytes(data.bytesAvailable); 

       //clean up the FileReference instance 

       fr = null; 
      } 

      //called if an error occurs while loading the file contents 
      private function onLoadError(e:IOErrorEvent):void 
      { 
       trace("Error loading file : " + e.text); 
      } 

     ]]> 
    </mx:Script> 

    <mx:Button label="Load Text File" right="10" bottom="10" click="onLoadFileClick()"/> 
    <mx:TextArea right="10" left="10" top="10" bottom="40" id="outputField"/> 

</mx:Application> 

per decodificarlo, guardare in http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/utils/Base64Decoder.html

1

Se le scansioni del sistema di sicurezza per i modelli in file, è molto improbabile che si affacciano su un file con codifica Base64 o contenuti base64 codifica nei file. Gli allegati di posta elettronica sono codificati in base64 e, se il sistema è valido, esegue la scansione degli allegati di posta elettronica potenzialmente dannosi anche se sono denominati .txt. L'inizio codificato in base 64 di un EXE file è quasi certamente riconosciuto da esso. Quindi ISTM stai facendo la domanda sbagliata.

+1

Il punto è dimostrare che il sistema non è molto intelligente e può essere banalmente ingannato da un abile attaccante. Non sono sicuro che lo rileverà. Ma proverò sicuramente. Grazie per la tua risposta! –

Problemi correlati