Security

Im Zuge der Sicherheits-Fragen für BRG_HP habe ich mich ein bisschen mit Spam und Hacks beschäftigt… Dabei bin ich auch geniale Sicherheitslücken gestoßen.

  • SQL-Injektion: Dürfte wohl jeder erfahrener Informatiker kennen. Statt ?id=42 schicke ich ID=42; UPDATE USER SET TYPE="admin" WHERE ID=23; ab. So kann man sich wunderbar Adminrechte beschaffen und Kontrolle über den Server übernehmen. Finde ich natürlich genial, wobei es sehr einfach ist (das schließt sich nicht aus!). Ich bin mir sicher bei ein paar unerfahrenen Leuten kann man das ausnutzen, aber das probiere ich besser nicht aus. 😉
    Tipps: Natürlich muss derjenige, der das ausführt wissen, welche Tabellen, welche Spaltennamen und welche Inhalte verwendet werden. Aber ich denke einmal einen Profi hält das nicht auf!
    Vorbeugung: Einfach die GET-Übermittlung überprüfen. In dem Fall wollen wir nichts weiter als eine Zahl übermitteln. Deshalb formatieren wird das Ergebnis in einen Integer: $sql = sprintf("SELECT [...] ID = %u", $_GET['ID']); Oder einfach is_int()
    Außerdem: phpBB hat sich natürlich dagegen geschützt. Sämtliche Tests von mir an BRG3 sind fehlgeschlagen 😉
  • Gefälschte URLs im IE: http://brg-viktring-board.at@192.168.1.1/
    Dir kommt diese URL nicht ganz geheuer vor? Wieso? Wegen dem @-Zeichen? Das bedeutet doch nur, dass er nicht auch brg-viktring-board.at sondern auf den Server mit der IP 192.168.1.1 zugreift. OK… dann stimmt’s. Also: Rühre nie solch eine Adresse an! OK… bist du dann sicher? Nein…. denn der IE 6.x zeigt die Adresse nach dem @ nicht einmal an. Das heißt du siehst du Adresse http://brg-viktring-board.at in der Adressleiste und du gelangst aber auf den Server 192.168.1.1 !
    Ganz schön gefährlich, aber ich verwende den IE sowieso nicht. Darum habe ich das Problem nicht. Und der Prof. Schmiddy hat aber gesagt, der IE sei der sicherste Browser (wobei er sicher sein Gründe hat!). Komisch.
    Tipp: Nachdem es bei meinem IE 6.0 funktioniert hat, mein Tipp: Verzicht auf den IE! (bzw. Umstieg auf 7.0) Sowohl Opera als auch Firefox haben bei mir diesen Test bestanden. PS: Um es noch gemeiner zu machen, kann man die Adresse mit unescape (JS) verschlüsseln. 😉
  • Harvester: Jeder Betreiber einer Webseite kennt das Problem: Für eine Webseite legt man sich extra eine neue Support-E-Mail-Adresse zu (ich zB: BRG_HP – NViktring@gmx.at). Wunderbar… (zB) gmx und gmail bieten auch die Möglichkeiten dazu. Doch kaum ist einmal die Webseite online, finden Spam-Mails ein neues Zuhause.
    Problem:
    Der Harvester ist gekommen! Er hat den Quelltext der Seite nach einem vermeintlichen mailto: (dabei wird es eh aus diesem Grunde selten verwendet) durchforstet. Und schon wird die E-mailadresse an den Harvester-Papa geschickt.
    Tipp: Da der Harvester den kompletten Quelltext durchsuchen muss, nimmt er auch vor Kommentaren keinen Halt. Wie zum Beispiel diesem: <?php echo '<!--'. date('YmdHis-') . "${_SERVER['REMOTE_ADDR']}@{$_SERVER['HTTP_HOST']} -->"?>
    Diesen genialen Einfall haben wir Daniel Rehbein zu verdanken. Es täuscht im HTML-Quelltext eine E-mailadresse vor. Der Harvester findet sie und verschickt an diese natürlich sofort (nicht der Harvester sondern der Harvester-User 😉 ) eine Spam-Mail. Was er nicht ahnt: Statt die Mail an eine richtige Adresse zu schicken, liefert er seine IP-Adresse und den Zeitpunkt seines Zugriffs mit. Dadurch kann genau ermittelt werden, wer wann einen Harvester benutzt hat. Voraussetzung: Dir gehört der POP3-Server!
    Sollte ich auch ausprobieren 😉 (leider kein POP3-Server 🙁 )

Wer weitere Infos haben will, kann sich über XSS informieren. Und wer weitere Tipps und Tricks hat, bitte per Kommentar informieren! 🙂

Security

16 Jahre nerdy Luk

So… 16 Jahre gibt es mich schon. Das ist für mich ein Anlass Resumé zu ziehen:

  • Seit über einem Jahr experimentiere ich an meiner Homepage herum.
  • Ich habe beschlossen Informatik zu studieren.
  • Ich arbeite mit Peter und Steve zusammen.
  • Ich arbeite an den Projekten BRG3 (Mitarbeiter) und BRG_HP (Programmer). *freu*
  • Ich kenne CSS in- und auswendig und habe es zu meiner Lieblingssprache erklärt. 🙂
  • Ich kann innerhalb einer Stunde eine recht akzeptable Webseite (XHTML + CSS) mit einem normalen Editor erstellen.
  • Ich arbeite mit CSS, HTML, XHTML und PHP, wobei ich mich komplett an den W3C-Standard halte.
  • Ich kann die Grundzüge von PHP und erweitere momentan mein Wissen. auf dem Gebiet.
  • Ich habe eine Kamera und habe meine Freude am Fotographieren entdeckt.

Thanks für die Geburtstagsglückwünsche 😉

16 Jahre nerdy Luk

PHP-Eastereggs

Diesem Blog habe ich entnommen, dass man die PHP-Version ermitteln kann. Und zwar fügt man einfach an die URL (zB eines Blogs) an ?=PHPE9568F36-D428-11d2-A769-00AA001ACF42. Das Resultat ist ganz einfach: Ein beliebiges (von Version abhängiges) Bild, dass ein verziertes Logo von PHP enthält. Dadurch kann man die PHP-Version ermitteln.

Statement von Autor:

Das Easteregg ersetzt normalweise am 1. April beim Aufruf der phpinfo()-Funktion das PHP-Logo. Für jede PHP-Version gibt’s ein anderes Bild. Somit kann man also auch die verwendete PHP-Version erkennen -> Fingerprinting.

Beispiele:

http://brg-viktring-board.at/blog/ (Version 5.1.x)

http://chrispederick.com/blog/ (Version 4.3.x)

http://web20spot.de/ (Version ?)

Liste der Versionen:
Eine schöne Auflistung findet man hier.

Für Sicherheitsfanatiker: Das lässt sich abstellen, indem man in der php.ini “expose_php” auf off stellt. So wie es bei mir ist, wie ich gerade in meiner phpinfo gelesen habe 🙁 .

Andere PHP-Eastereggs:

http://brg-viktring-board.at/
http://brg-viktring-board.at/
http://brg-viktring-board.at/
http://brg-viktring-board.at/

PHP-Eastereggs

HowTo “Protecting your WP-Blog with a password”

So… heute hatte ich ein Problem. Wie verschlüssle ich meinen geheimen WordPress-Blog?

Die Idee: PHP 5, MySQL, Cookies und strtr

Zuerst interpretieren wir den Inhalt des SQL-Querys in den entschlüsselten Text. Dazu schreiben wir:

$content = strtr($content, "abcdefghijklmnopqrstuvwxyz", $_COOKIE['access']);

… in die Datei functions/functions-formatting.php in die Funktion convert_chars($content, $flag = 'obsolete') in die Zeile 388 vor return $content;
OK…. als Nächstes müssen wir den Blog mit dem Passwort versehen. Dazu gehen wir in die Datei index.php. Dort schreiben wir nach <?php dazu:

if (!isset($_COOKIE['access']) && $_GET['mode'] != "schluessel") {
echo '<form action="index.php?mode=schuessel" method="post"> <input type="password" name="password" value="Password" /> <input type="submit" value="Send" /> </form>'; die();
}
if (!isset($_COOKIE['access']) && $_GET['mode'] == "schuessel") {
if ($_POST['passwd'] == "beliebiges Passwort") {
$cookie = setcookie("access", "irgendeine andere Reihenfolge des Alphabets", time()+3600);
if ($cookie) echo "Cookie gesetzt";
}

}
OK… das Letzte ist noch das Schreiben in die Datenbank. Dazu gehen wir in die Datei functions/functions-post.php. Dort schreiben wir in die Funktion wp_insert_post($postarr = array()) in die Zeile 145:

$post_content = strtr($post_content, $_COOKIE['access'], "abcdefghijklmnopqrstuvwxyz");
$post_title = strtr($post_title, $_COOKIE['access'], "abcdefghijklmnopqrstuvwxyz");

Danach schreiben wir das selbe noch in die Zeile 322 jeweils vor $wpdb->query(...);
OK… das war’s. Die Verschlüsselung ist geglückt. Wie funktioniert das?

Wir versuchen auf die Startseite zu gehen. Fehlanzeige, weil kein Cookie namens access gesetzt ist. Darum erscheint eine Input-Box. In diese geben wir unser Passwort (in dem Fall “beliebiges Passwort”) ein und drücken “Send”. Dann wird ein Cookie gesetzt. Das steht auch am Anfang der Seite (ganz oben). In diesem Cookie ist der strtr-Schlüssel gesetzt, welcher uns erlaubt, den Text zu lesen. Fertig!

Bug: Bei der Edit-Funktion von WP wird der Text neu verschlüsselt. Bugfix: Text kopieren und als neuen Post speichern.
Info:
strtr ersetzt Zeichen gegen Zeichen. $addr = strtr("Hällö Übi", "äüö", "aao"); echo $addr; ergibt also "Hallo Ubi".
time()+3600 bedeutet, dass das Cookie eine Stunde lang gesetzt ist (danach wird es gelöscht). Du kannst es mit einfachen Matheoperationen bearbeiten (zB time()+3600*24 = 1 Tag).
Bei einem falschen Passwort wird der Inhalt falsch dargestellt (verschlüsselt). Noobs – die nicht Cookies löschen können – müssen dann 1 Stunde (bzw. die angegebene Cookie-Zeit) warten bis sie ein neues Passwort ausprobieren können.

🙂 Ich bin ein bisschen selbst fasziniert, dass das funktioniert (meine erste Arbeit mit Cookies). Naja… Eigenlob stinkt 😉

HowTo “Protecting your WP-Blog with a password”

Projects

Den Geo-Test habe ich überlebt und der Steve ist mit’m Zivi fertig. Da ich mich jetzt entschieden habe, wie ich bei meinen Projekten weiter mache, möchte ich über die Entscheidungen reden und erklären, wie ich weitermache:

  • BRG_HP: Da ich bei dieser Homepage immer schon den Steve als Vorbild hatte, werde ich seinem Rat folgen (Design bleibt!) und folgend weitermachen:
    Altes Design; Inhalt überarbeiten (FAQ, etc.); Funktionen erweitern (Upload, etc.); Materialien sammeln (Buch lesen, etc.)
  • HP: 10.0 im Aufbau:
    komplizierter Aufbau; Knowhow von BRG_HP einbauen; Neues Design fast fertig
  • Blog: Da die Qualität manchmal gut ist; manchmal schlecht, möchte ich ab und zu Refreshs machen. Kurz: Löschen schlechter Beiträge. Um den passenden Namen zu finden, nenne ich dann die Blogversionen um die Kommastelle um 😉 (momentan: 1.0; nächstes Mal: 1.2)
    HTML-Tags-Erweiterung mit CSS (<code> <address>, etc.)
  • Ali: Habe ein Kontaktformular programmiert… Projekt fast fertig (falls keine weiteren Wünsche)
  • HTML-CSS-Tutorial: in Arbeit

Naja… an sich bin ich im Schulstress und habe keinen Bock auf irgendwas, aber das halte ich für die falsche Einstellung 😉 . Also dann… 🙂

Projects

Refresh?

In letzter Zeit stehe ich vor einer Menge von organisatorischen Entscheidungen, ob ich nicht alles erneuern soll.

  • BRG_HP: Die Funktionen sind nicht ausgereift. Das Design wird langweilig. Die Icons müssen erneuert werden. Das Adminmenü ist nicht fertig. Die Speicherung der Daten auf der DB habe ich falsch gemacht (vorher statt nacher geparst).
    Zukunft: Neues Design? Neues Version? Neues Konzept?
  • HP: Funktionen nicht eingebaut. Unübersichtlich. Langweilig. Kein Inhalt. Ideenlos.
    Zukunft: 10.0 in Planung! Neues Design! Neuer Inhalt! Neue Technik! Neue Übersichtlichkeit?
  • Blog: Farben monoton. Alte Einträge schleusig.
    Zukunft: Neues Design. Manche Einträge löschen.
  • CSS-HTML-Tutorial: In Arbeit. Formulierung des Texts teilweise nicht passend.
    Zukunft: Renovierung des Texts
  • ali: Blog meines Bruders mit weiteren Funktionen ausstatten (hatProbleme mit amerik. Tastatur).
    Zukunft: Mit RegEx erweitern
  • Vereinheitlichung der Projekte: Der Steve hat eine wunderschöne Übersichtsseite über seine Projekte. Ich auch? Außerdem ist alles ziemlich problematisch bei so vielen E-mailadressen, etc.
    Zukunft: Übersichtseite im Zuge von HP 10.0! Serverwechsel auf brg-viktring-board.at?

Naja…. das hier ist ein schöne Übersicht geworden. Ich kämpfe gerade mit dem Design von HP 10.0.

Refresh?

Chorwoche der 6AD 2007

Hi! I’m back!

Ich habe bereits eine Zusammenfassung der Chorwoche geschrieben, aber die ist so lang und viel zu uninteressant für einen normalen Blog. Ich habe mich dazu entschieden einen Kurzfilm der Chorwoche zu schneiden und ich möchte eine eigene Seite für die Chorwoche machen. Naja…. wenn ich Zeit habe, komme ich dazu (muss noch ein bisschen Material sammeln).

Zukunft: Ich werde wieder meine Arbeit an BRG_HP fortsetzen und die neue Position als Admin in BRG3 will ich natürlich auch behalten 😉 . Mein Bruder ist in St. Augustine (USA-Florida) und sammelt dort Flugstunden für den CPL. Der Peter ist – so wie ich – gerade zurück, aber in BRG3 hat sich ein bisschen was getan. Naja… wie besagt. Der Film und die HP warten und ich werde hoffentlich auch Zeit für BRG_HP, BRG3 und die Schule (!) finden…. 🙂

Verdammt ich muss endlich die Smileys vom Blog editieren!

Chorwoche der 6AD 2007

Chorwoche

Ich möchte mich nur von meinem Blog verabschieden, da ich jetzt für 5 Tage auf Chorwoche bin. 😉 Wir fahren nach St. Georgen am Längsee und wohnen dort im Stift.

St. Georgen am Längsee

Tschüß daweil mein Blog! Nach der Chowoche wirst du natürlich mit Fotos gefüttert (2 GB SD-Speicherkarte vorbereitet) 😉

Chorwoche

Freitag, 13.4

Klaro… ich bin weder gläubisch noch abergläubisch. Der Grund für den Titel ist das Zitat von unserem Musiklehrer:

Nur wenn Fr. der 13. und Vollmond ist, erscheint er. DER HAMSTER!

Seither sind Freddy und ich dahinter diesen Tag ausfindig zu machen; nicht mehr vor unserer Matura. Aber wir haben ihn gewarnt, wir würden auch als Opas in die Klasse kommen, um den Hamster zu sehen 😉

[Wie man sieht, habe ich den Statement-Balken in den Stylesheet-Balken geschrieben. Ich hoffe, ich kann ihn brauchen]

Edit: Zu Schulende habe ich mit dem Fred ein Skript entwickelt, das diesen Zusammenfall der Tage berechnet. Erfolglos… der Server wird überlastet, wenn er über 10 Jahre jeden Tag überprüfen soll.

Freitag, 13.4