<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>GO on if empty {}</title><link>https://ifempty.z1.web.core.windows.net/tags/go/</link><description>if empty {} (GO)</description><generator>Hugo -- gohugo.io</generator><lastBuildDate>Sun, 31 Jan 2016 10:49:39 +0100</lastBuildDate><atom:link href="https://ifempty.z1.web.core.windows.net/tags/go/index.xml" rel="self" type="application/rss+xml"/><item><title>Eigenen HTTP Proxy in GO schreiben</title><link>https://ifempty.z1.web.core.windows.net/posts/http_proxy_go/</link><pubDate>Sun, 31 Jan 2016 10:49:39 +0100</pubDate><guid>https://ifempty.z1.web.core.windows.net/posts/http_proxy_go/</guid><description>&lt;p>Die Programmiersparche GO is geradezu prädestiniert dazu einen eigenen Proxy zu schreiben.&lt;/p>
&lt;p>Ein lokaler HTTP Proxy ermöglicht eine vielzahl von Anwendungsgebieten z.B.&lt;/p>
&lt;ul>
&lt;li>Adblocker&lt;/li>
&lt;li>Javascript blocker&lt;/li>
&lt;li>Manipulieren von HTTP anfragen&lt;/li>
&lt;li>Cookie Banner Blocker&lt;/li>
&lt;li>Cachen von HTTP anfragen&lt;/li>
&lt;/ul>
&lt;p>Gerne wird er auch zum Analysieren von Programmen verwendet die sich nicht so leicht in den Netzwerkverkehr schauen lassen. Berühmte vertreter sind &lt;a href="https://www.telerik.com/download/fiddler">Fiddler&lt;/a> oder die &lt;a href="https://portswigger.net/burp/communitydownload">Burp Suite&lt;/a>.&lt;/p>
&lt;p>Der folgende Code dient als Grundlage um selbst solch einen Proxy zu schreiben. Zum ausprobieren einfach folgenden Code in eine Datei kopieren, z.B. in die simple_proxy.go&lt;/p>
&lt;script type="application/javascript" src="https://gist.github.com/blackespresso/b0d06b476a23cc732e61.js">&lt;/script>
&lt;p>und über die Kommandozeile (cmd oder bash) starten:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">go run simple_proxy.go
&lt;/code>&lt;/pre>&lt;/div>&lt;p>Jetzt horcht der Proxy auf Port 8080 auf Anfragen. Eventuell kommt noch eine Meldung der Windows Firewall die nachfrägt ob das gewollt ist, hier kann einfach mit &amp;ldquo;Zugriff zulassen&amp;rdquo; bestätigt werden.&lt;/p>
&lt;p>Die einfachste möglichkeit ist den Webbrowser über den Proxy laufen zu lassen, dazu in Firefox in den Einstellungen nach Proxy suchen und über den Button &amp;ldquo;Einstellungen&amp;hellip;&amp;rdquo; öffnen&lt;/p>
&lt;figure style="padding: 0.25rem; margin: 2rem 0; background-color: #cccc">
&lt;a href="firefox_einstellungen_suchen.png" target="_blank">
&lt;img style="max-width: 100%; width: auto; height: auto;" src="https://ifempty.z1.web.core.windows.net/posts/http_proxy_go/firefox_einstellungen_suchen_hu7e5eb94df2ba92492a692e91bc41e8cc_29006_400x0_resize_box_3.png" width="400" height="336">
&lt;/a>
&lt;figcaption>
&lt;small>
In Firefox nach "Proxy" suchen
&lt;/small>
&lt;/figcaption>
&lt;/figure>
&lt;p>jetzt den Proxy Adresse eintragen (localhost und 8080) und mit OK bestätigen:&lt;/p>
&lt;figure style="padding: 0.25rem; margin: 2rem 0; background-color: #cccc">
&lt;a href="firefox_einstellungen_proxy.png" target="_blank">
&lt;img style="max-width: 100%; width: auto; height: auto;" src="https://ifempty.z1.web.core.windows.net/posts/http_proxy_go/firefox_einstellungen_proxy_huc914822729d97549ae91892669b80125_53120_400x0_resize_box_3.png" width="400" height="336">
&lt;/a>
&lt;figcaption>
&lt;small>
Firefox's Proxy Einstellungen
&lt;/small>
&lt;/figcaption>
&lt;/figure>
&lt;p>Sobald eine Seite angesurft wird, zeigt der Proxy alle HTTP Anfragen an&lt;/p>
&lt;figure style="padding: 0.25rem; margin: 2rem 0; background-color: #cccc">
&lt;a href="simple_proxy_mit_firefox.png" target="_blank">
&lt;img style="max-width: 100%; width: auto; height: auto;" src="https://ifempty.z1.web.core.windows.net/posts/http_proxy_go/simple_proxy_mit_firefox_huc571f3d5517b648c78291351d216636a_484975_400x0_resize_box_3.png" width="400" height="337">
&lt;/a>
&lt;figcaption>
&lt;small>
Simple_Proxy mit Firefox
&lt;/small>
&lt;/figcaption>
&lt;/figure>
&lt;p>Die Performance sollte dank der parallelität von GO in pari stehen mit einer direkten Verbindung. Ein größeres Manko ist das ausbleiben von HTTPS, derzeit nimmt der Proxy nur HTTP anfragen und und lässt HTTPS ins leere Laufen. Die &amp;ldquo;CONNECT&amp;rdquo; Methode zum erstellen einer SSL Verbindung über einen Proxy wird einfach ignoriert. Die ist Thema für einen eigenen Artikel.&lt;/p></description></item><item><title>SHA256 Online berechnen mit GO</title><link>https://ifempty.z1.web.core.windows.net/posts/sha256_online_berechnen_mit_go/</link><pubDate>Sun, 31 Jan 2016 09:41:50 +0100</pubDate><guid>https://ifempty.z1.web.core.windows.net/posts/sha256_online_berechnen_mit_go/</guid><description>&lt;p>Ein Go Playground Snippet um den SHA265 des leerstrings zu berechnen.&lt;/p>
&lt;p>Die Variable &lt;code>message&lt;/code> kann direkt angepasst werden um etwa die Beispiel auf
Wikipedia &lt;a href="https://de.wikipedia.org/wiki/SHA-2#Beispiel-Hashes">SHA-2&lt;/a> nach zu vollziehen.&lt;/p>
&lt;pre tabindex="0">&lt;code>&amp;quot;Franz jagt im komplett verwahrlosten Taxi quer durch Bayern&amp;quot;
d32b568cd1b96d459e7291ebf4b25d007f275c9f13149beeb782fac0716613f8
&lt;/code>&lt;/pre>&lt;div>
&lt;iframe style="height: 100%; min-height: 500px; width: 100%;"
src="http://play.golang.org/p/sz6qwcgBMt" frameborder="0">
&lt;/iframe>
&lt;/div>
&lt;p>&lt;a href="http://play.golang.org/p/sz6qwcgBMt">Zum Playground&lt;/a>&lt;/p></description></item><item><title>PNG Bilder aus Stream und Binärdateien extrahieren</title><link>https://ifempty.z1.web.core.windows.net/posts/png_bilder_from_stream/</link><pubDate>Sun, 31 Jan 2016 08:34:01 +0100</pubDate><guid>https://ifempty.z1.web.core.windows.net/posts/png_bilder_from_stream/</guid><description>&lt;p>Beim analysieren von Memory Dumps, Firmware, ISO oder Exe-Dateien kommt es vor das dort eingebettete Dateien wieder extrahier werden sollen. Das folgende GO Script sucht nach dem PNG-Header und versucht
diese wieder zu dekodieren.&lt;/p>
&lt;p>Vorgehen:
Hierzu das script file &lt;a href="https://gist.github.com/BlackEspresso/aacf06fe03338fc828c2">find_png_in_dump.go&lt;/a> runterladen und mit&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">go build find_png_in_dump.go
&lt;/code>&lt;/pre>&lt;/div>&lt;p>kompileren. Das Tool kann dann mit&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">find_png_in_dump.exe -f &lt;span style="color:#e6db74">&amp;#34;c:\pfad\zum\dump.dmp&amp;#34;&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>gestartet werden. Hier gibt der Parameter -f den Pfad zum Quelle an. Das kann eine beliebige binäre Datei sein.&lt;/p>
&lt;h2 id="beispiel-1---dateien-aus-einem-memory-dump-extrahiern">Beispiel 1 - Dateien aus einem Memory Dump extrahiern&lt;/h2>
&lt;p>Als erstes Beispiel soll uns ein Memroy Dump des Chrome-Webbrowsers dienen. Unter Windows wird das z.B. mit dem Taskmanager erstellt:&lt;/p>
&lt;figure style="padding: 0.25rem; margin: 2rem 0; background-color: #cccc">
&lt;a href="TaskManager_memory_dump_erstellen.png" target="_blank">
&lt;img style="max-width: 100%; width: auto; height: auto;" src="https://ifempty.z1.web.core.windows.net/posts/png_bilder_from_stream/TaskManager_memory_dump_erstellen_huacae76a791a1b455e673fb87ed11c6bb_95221_400x0_resize_box_3.png" width="400" height="395">
&lt;/a>
&lt;figcaption>
&lt;small>
Task Manager Memory Dump erstellen
&lt;/small>
&lt;/figcaption>
&lt;/figure>
&lt;ol>
&lt;li>
&lt;p>Taskmanager öffnen&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Auf die Details liste gehen und den chorme.exe prozess suchen, hier kann es mehrere geben. Chrome legt für jeden Tab und für Hintergrunddienste einen neuen Prozess an. Am besten etwas rumprobieren oder jenen mit dem größten Speicherplatz auswählen&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Rechtsklick auf den Prozess und &amp;ldquo;Speicherabbild erstellen&amp;rdquo; bzw. &amp;ldquo;Create dump file&amp;rdquo; auswählen&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Nach wenigen Sekunden erscheint die Meldung
&lt;figure style="padding: 0.25rem; margin: 2rem 0; background-color: #cccc">
&lt;a href="TaskManager_memory_dump_erstellt.png" target="_blank">
&lt;img style="max-width: 100%; width: auto; height: auto;" src="https://ifempty.z1.web.core.windows.net/posts/png_bilder_from_stream/TaskManager_memory_dump_erstellt_hu1cc17d6ac6445456681e6e90594abb94_3757_400x0_resize_box_3.png" width="400" height="201">
&lt;/a>
&lt;figcaption>
&lt;small>
Task Manager Memory Dump Meldung
&lt;/small>
&lt;/figcaption>
&lt;/figure> &lt;/p>
&lt;/li>
&lt;li>
&lt;p>Jetzt diesen Pfad an das Tool übergeben&lt;/p>
&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">find_png_in_dump.exe -f &lt;span style="color:#e6db74">&amp;#34;c:\users\espress\appdata\local\temp\chrome.dmp&amp;#34;&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>und sobald es abgeschlossen ist befinden sich alle extrahieren Bilder im aktuellen Verzeichnis
&lt;figure style="padding: 0.25rem; margin: 2rem 0; background-color: #cccc">
&lt;a href="findPngs_ergebnis.png" target="_blank">
&lt;img style="max-width: 100%; width: auto; height: auto;" src="https://ifempty.z1.web.core.windows.net/posts/png_bilder_from_stream/findPngs_ergebnis_hu4885d796707df3ce4483c94c08209452_222965_400x0_resize_box_3.png" width="400" height="284">
&lt;/a>
&lt;figcaption>
&lt;small>
Task Manager Memory Dump Meldung
&lt;/small>
&lt;/figcaption>
&lt;/figure> &lt;/p>
&lt;p>Wer sich die Ergebnisse genauer ansieht dem fällt auf das sich hier sowohl Bilder aus Chrome selbst (z.B. das sad face icon in der ersten zeile) und auch Bilder aus der aktuell geladenen Website befinden.&lt;/p>
&lt;h2 id="beispiel-2---tpcdump">Beispiel 2 - TPCDump&lt;/h2>
&lt;p>tcpDump erlaubt es Netzwerkverbindungen mitzuschneiden und in eine Datei zu speichern. Unter Linux lässt sich tcpdump direkt über die paketverwaltung installieren, bei Windows kann &lt;a href="http://www.winpcap.org/windump/install/">Windump&lt;/a> von WinPcap.org benutzt werden. Das Prinzip ist analog zum ersten Beispiel:&lt;/p>
&lt;ol>
&lt;li>Netzwerkverekh mitschneiden&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">windump -i &lt;span style="color:#ae81ff">2&lt;/span> -s &lt;span style="color:#ae81ff">0&lt;/span> -w out.pcap
&lt;/code>&lt;/pre>&lt;/div>&lt;p>Hier bedeutet:&lt;/p>
&lt;ul>
&lt;li>&amp;ldquo;-i 2&amp;rdquo; das die 2te Netzwerkadapater benutzt werden soll. Eine Liste alles Netzwerkadapter gibt es mit &lt;code>windump -D&lt;/code> .&lt;/li>
&lt;li>&amp;ldquo;-s 0&amp;rdquo; gibt an das die Pakete vollständig geschrieben werden und&lt;/li>
&lt;li>&amp;ldquo;-w out.pcap&amp;rdquo; schreibt die pakete direkt in die out.pcap Datei
&lt;figure style="padding: 0.25rem; margin: 2rem 0; background-color: #cccc">
&lt;a href="windump_capture.png" target="_blank">
&lt;img style="max-width: 100%; width: auto; height: auto;" src="https://ifempty.z1.web.core.windows.net/posts/png_bilder_from_stream/windump_capture_huf1384ebb250a9f5182529db97971103e_6204_400x0_resize_box_3.png" width="400" height="309">
&lt;/a>
&lt;figcaption>
&lt;small>
Windump capture
&lt;/small>
&lt;/figcaption>
&lt;/figure> &lt;/li>
&lt;/ul>
&lt;ol start="2">
&lt;li>
&lt;p>Netzwerkverkehr erzeugen, z.B. mit dem Browser surfen.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Den Pfad von out.pcap an das Tool übergeben&lt;/p>
&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">find_png_in_dump.exe -f &lt;span style="color:#e6db74">&amp;#34;out.pcap&amp;#34;&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>Das Ergebnis sind alle (unverschlüsselt) übertragenen Bilder
&lt;figure style="padding: 0.25rem; margin: 2rem 0; background-color: #cccc">
&lt;a href="findPngs_windump.png" target="_blank">
&lt;img style="max-width: 100%; width: auto; height: auto;" src="https://ifempty.z1.web.core.windows.net/posts/png_bilder_from_stream/findPngs_windump_hu3cb23da5cf0ca76bdc84cd078db6a5d7_58866_400x0_resize_box_3.png" width="400" height="371">
&lt;/a>
&lt;figcaption>
&lt;small>
windump captured images
&lt;/small>
&lt;/figcaption>
&lt;/figure> &lt;/p>
&lt;h2 id="mankos">Mankos&lt;/h2>
&lt;p>Bei veschlüsselten Verbindungen oder komprimierten Dateien kann das Tool natürlich keine PNGs finden. Wobei sich das Tool bei letzterem Punkt leicht erweitern liese, mögliche Erweiterungen:&lt;/p>
&lt;p>Mögliche Verbesserungen:&lt;/p>
&lt;ul>
&lt;li>Andere Dateitypen wie BMP, JPEG, DLL, ZIP, doc, xlsx, mp4 &amp;hellip;&lt;/li>
&lt;li>Komprimierungen wie gzip erkenen&lt;/li>
&lt;li>&amp;ldquo;On the fly anlyse&amp;rdquo;. Datei offnen halten und beim hinzukommen neuer Daten diese weiter anlysieren. Praktisch bei laufenden pcap files&lt;/li>
&lt;/ul></description></item></channel></rss>