Diese Woche sicher: 11.000 Tankstellen, TrustZone-Kernel-Hacks und unerwartete Ergebnisse

Automatische Tankanzeigen (ATG) sind raffinierte Technologien, die an fast jeder Tankstelle unsichtbar sind. Sie verfolgen den Kraftstoffstand, die Temperatur und andere Informationen und sind manchmal mit den automatisierten Systemen der Station verbunden. Das Problem ist, dass eine Reihe dieser Geräte Port 10001 im Internet abhören, und einige von ihnen scheinen falsch konfiguriert zu sein. Wie viele? Beginnen wir mit der einfachsten Frage: Bei wie vielen IP-Adressen ist Port 10001 geöffnet? Masscan ist dafür eines der besten Tools, und [RoseSecurity] hat über 85.000 Abhörgeräte gefunden. Ein offener Port ist nur der Anfang. Wie viele reagieren auf Verbindungen mit dem Kanal „In-Tank Inventory Reports“? Shodan meldet 11.113 IP-Adressen im August dieses Jahres. [RoseSecurity] hat ein einfaches Python-Skript geschrieben, das überprüft, ob jede dieser lauschenden IPs eine übereinstimmende Anzahl von Geräten gefunden hat. Der gruseligste Teil ist, dass diese Überprüfung durchgeführt wurde, indem ein Befehl Get In-Tank Inventory Report gesendet und auf eine gute Antwort geprüft wurde. Es scheinen 11K-Systeme zu sein, die mit dem Internet verbunden sind, ohne Authentifizierung. Was könnte schief gehen?

Knifflige JavaScript-Tricks

[Gareth Heyes] hat einen großartigen Leitfaden zu den Besonderheiten von JavaScript zusammengestellt. Und seltsam ist vielleicht eine Untertreibung, also halte durch. Der erste Teil dieses Artikels stammt aus dem Jahr 2016 und stellt eine Technik vor, um JS-Code ohne Klammern oder alphanumerische Zeichen auszuführen. +!+[] ist eine clevere Art, eine 1 zu schreiben. Wie? Die Magie dieses Codes besteht darin, dass der +-Operator eine unäre Verwendung hat. Wir verwenden es normalerweise in einer Anweisung wie 1+2, wo der Operator zwei Eingaben nimmt und sie addiert. Die unäre Version gibt einfach die numerische Darstellung des Objekts zurück. +2 entspricht 2 und +"2" entspricht 2. Starten Sie die JS-Konsole Ihres Browsers und probieren Sie es aus. Im obigen Beispiel definieren die eckigen Klammern also ein leeres Array und das Pluszeichen wird in eine Zahl umgewandelt, 0. ! ist der not-Operator, der den Wert stillschweigend in boolesch (falsch) und zurück (wahr) konvertiert. Dann digitalisieren wir den booleschen Wert auf 1. Es ist eine Menge Arbeit, eine 0 und eine 1 zu bekommen, aber mit diesen Additionen erhalten wir jede andere Zahl.

Der nächste Trick ist, dass [][[]] undefiniert zurückgibt. Es ist im Grunde ein leeres Array als Index eines Arrays, daher undefiniert. Interessant ist nun, dass [][[]]+[] den Additionsoperator verwendet und die Zeichenfolge „undefined“ zurückgibt. Um dies nutzbar zu machen, ist ein zusätzlicher Trick erforderlich, bei dem wir diese Zeichenfolge in ein Array einfügen und dann auf den ersten Index dieses Arrays verweisen: [[][[]]+[]][+[]]. All dies gibt uns die Möglichkeit, diesen String als Array zu behandeln und einzelne Buchstaben mit einem Index zu erhalten. Und da wir mit „undefined“ arbeiten müssen, können wir „find“ zusammensetzen. Und da „find“ eine Funktion ist, gibt die Ausführung ohne Klammern „function find() { [native code] }“ zurück. Verwenden Sie denselben Trick und Sie haben mehr Charaktere, mit denen Sie arbeiten können. Um diesen zusammengeschusterten String tatsächlich auszuführen, können wir ein wörtliches Muster verwenden, um die tatsächliche Ausführung zu erhalten, Function`alert(1)```. Bevor wir den neuen Beitrag behandeln, was ist der Sinn dieses verschlungenen JS? Cross-Site-Scripting (XSS). Wenn Sie genügend JS-Code an die richtige Stelle auf einer Website ziehen können, können Sie Ihren Code möglicherweise in dessen Browser ausführen, wenn ein anderer Benutzer das Ergebnis anzeigt. Websites werden sorgfältig erstellt, um dies zu vermeiden, aber Tricks wie diese können verwendet werden, um diese Schutzmaßnahmen zu umgehen.

Und das bringt uns zum neuesten Post, The Seventh Way to Call a JavaScript Function Without Parentheses. Und hier sind Template-Funktionen mit Template-Literalen als Argumente. Schauen Sie sich x`x${y}x` an. Das ${}-Konstrukt führt in einem wörtlichen Muster den Ausdruck innerhalb der geschweiften Klammern aus und ersetzt die Ergebnisse in der Zeichenfolge. Dieses Stück Code macht etwas anderes, indem es eine Tag-Funktion verwendet. Und was interessant ist, wenn eine Tag-Funktion auf diese Weise aufgerufen wird, erhält sie den String als erstes Argument, aber die Rohergebnisse der Ausdrücke als die verbleibenden Argumente. Auch dies kann zum Ausführen von Code verwendet werden. Am Ende sieht es aus wie [].sort.call`${alert}1337`. Dies ist vorerst eine Neuheit, aber ich wäre nicht besonders überrascht, wenn verschleiertes JS in Zukunft diese Techniken verwenden würde.

Hacken von Android über die TrustZone ...

Diese Woche sicher: 11.000 Tankstellen, TrustZone-Kernel-Hacks und unerwartete Ergebnisse

Automatische Tankanzeigen (ATG) sind raffinierte Technologien, die an fast jeder Tankstelle unsichtbar sind. Sie verfolgen den Kraftstoffstand, die Temperatur und andere Informationen und sind manchmal mit den automatisierten Systemen der Station verbunden. Das Problem ist, dass eine Reihe dieser Geräte Port 10001 im Internet abhören, und einige von ihnen scheinen falsch konfiguriert zu sein. Wie viele? Beginnen wir mit der einfachsten Frage: Bei wie vielen IP-Adressen ist Port 10001 geöffnet? Masscan ist dafür eines der besten Tools, und [RoseSecurity] hat über 85.000 Abhörgeräte gefunden. Ein offener Port ist nur der Anfang. Wie viele reagieren auf Verbindungen mit dem Kanal „In-Tank Inventory Reports“? Shodan meldet 11.113 IP-Adressen im August dieses Jahres. [RoseSecurity] hat ein einfaches Python-Skript geschrieben, das überprüft, ob jede dieser lauschenden IPs eine übereinstimmende Anzahl von Geräten gefunden hat. Der gruseligste Teil ist, dass diese Überprüfung durchgeführt wurde, indem ein Befehl Get In-Tank Inventory Report gesendet und auf eine gute Antwort geprüft wurde. Es scheinen 11K-Systeme zu sein, die mit dem Internet verbunden sind, ohne Authentifizierung. Was könnte schief gehen?

Knifflige JavaScript-Tricks

[Gareth Heyes] hat einen großartigen Leitfaden zu den Besonderheiten von JavaScript zusammengestellt. Und seltsam ist vielleicht eine Untertreibung, also halte durch. Der erste Teil dieses Artikels stammt aus dem Jahr 2016 und stellt eine Technik vor, um JS-Code ohne Klammern oder alphanumerische Zeichen auszuführen. +!+[] ist eine clevere Art, eine 1 zu schreiben. Wie? Die Magie dieses Codes besteht darin, dass der +-Operator eine unäre Verwendung hat. Wir verwenden es normalerweise in einer Anweisung wie 1+2, wo der Operator zwei Eingaben nimmt und sie addiert. Die unäre Version gibt einfach die numerische Darstellung des Objekts zurück. +2 entspricht 2 und +"2" entspricht 2. Starten Sie die JS-Konsole Ihres Browsers und probieren Sie es aus. Im obigen Beispiel definieren die eckigen Klammern also ein leeres Array und das Pluszeichen wird in eine Zahl umgewandelt, 0. ! ist der not-Operator, der den Wert stillschweigend in boolesch (falsch) und zurück (wahr) konvertiert. Dann digitalisieren wir den booleschen Wert auf 1. Es ist eine Menge Arbeit, eine 0 und eine 1 zu bekommen, aber mit diesen Additionen erhalten wir jede andere Zahl.

Der nächste Trick ist, dass [][[]] undefiniert zurückgibt. Es ist im Grunde ein leeres Array als Index eines Arrays, daher undefiniert. Interessant ist nun, dass [][[]]+[] den Additionsoperator verwendet und die Zeichenfolge „undefined“ zurückgibt. Um dies nutzbar zu machen, ist ein zusätzlicher Trick erforderlich, bei dem wir diese Zeichenfolge in ein Array einfügen und dann auf den ersten Index dieses Arrays verweisen: [[][[]]+[]][+[]]. All dies gibt uns die Möglichkeit, diesen String als Array zu behandeln und einzelne Buchstaben mit einem Index zu erhalten. Und da wir mit „undefined“ arbeiten müssen, können wir „find“ zusammensetzen. Und da „find“ eine Funktion ist, gibt die Ausführung ohne Klammern „function find() { [native code] }“ zurück. Verwenden Sie denselben Trick und Sie haben mehr Charaktere, mit denen Sie arbeiten können. Um diesen zusammengeschusterten String tatsächlich auszuführen, können wir ein wörtliches Muster verwenden, um die tatsächliche Ausführung zu erhalten, Function`alert(1)```. Bevor wir den neuen Beitrag behandeln, was ist der Sinn dieses verschlungenen JS? Cross-Site-Scripting (XSS). Wenn Sie genügend JS-Code an die richtige Stelle auf einer Website ziehen können, können Sie Ihren Code möglicherweise in dessen Browser ausführen, wenn ein anderer Benutzer das Ergebnis anzeigt. Websites werden sorgfältig erstellt, um dies zu vermeiden, aber Tricks wie diese können verwendet werden, um diese Schutzmaßnahmen zu umgehen.

Und das bringt uns zum neuesten Post, The Seventh Way to Call a JavaScript Function Without Parentheses. Und hier sind Template-Funktionen mit Template-Literalen als Argumente. Schauen Sie sich x`x${y}x` an. Das ${}-Konstrukt führt in einem wörtlichen Muster den Ausdruck innerhalb der geschweiften Klammern aus und ersetzt die Ergebnisse in der Zeichenfolge. Dieses Stück Code macht etwas anderes, indem es eine Tag-Funktion verwendet. Und was interessant ist, wenn eine Tag-Funktion auf diese Weise aufgerufen wird, erhält sie den String als erstes Argument, aber die Rohergebnisse der Ausdrücke als die verbleibenden Argumente. Auch dies kann zum Ausführen von Code verwendet werden. Am Ende sieht es aus wie [].sort.call`${alert}1337`. Dies ist vorerst eine Neuheit, aber ich wäre nicht besonders überrascht, wenn verschleiertes JS in Zukunft diese Techniken verwenden würde.

Hacken von Android über die TrustZone ...

What's Your Reaction?

like

dislike

love

funny

angry

sad

wow