RSS
 

Archive for the ‘Internet’ Category

Injektionen – die Querygrippe

23 Okt

Mahlzeit.

Nach dem ich ja schon länger nichts gepostet habe wollte ich mal wieder ein aktuelles mit einem alten Thema verbinden.
Was fällt uns denn im Moment zum Thema “Injektionen” ein? Richtig! Schweinegrippe!

Was viel dem ein oder anderen (vermutlich nur Nerds) früher bei “Injektionen” ein? Wieder richtig! SQL.

Nun ich bin in den letzten zwei Tagen nicht nur auf das erstere sondern auch auf das zweite gestoßen und das nicht auf einer ewig alten, nicht mehr gepflegten Webseite, sondern auf einer die noch irgendwie in der Entwicklungsphase ist aber schon produktiv mit sensiblen Daten arbeitet.
Die SQL-Injections waren nicht das einzige Problem, aber vermutlich das welches am häufigsten auch bei anderen Projekten möglich ist.

Ich möchte an dieser Stelle mal (für alle die, die mal was davon gehört haben, aber nicht wissen um was es sich handelt) erläutern, was bei SQL-Injections das Problem ist.
ACHTUNG: Der nachfolgende Text ist für rein edukative Zwecke gedacht und ich übernehme keinerlei Haftung für dadurch entstandenen Schaden!
Stellt euch vor, ihr habt eine tolle Seite in PHP gebastelt auf der ihr für die Familie die Grönland-Urlaubsbilder zur Verfügung stellen wollt oder die vom Jahr davor im Dschungel von Guatemala. Ihr habt sogar eine kleine Datenbank in der jedes Album eine Nummer hat. Grönland hat die Nummer 2009 und der Dschungel hat 2008 oder 1 und 2. Wie auch immer.
Nun rufen eure Verwandten diese Bilder mittels: “http://www.example.com/meinalbum.php?album=2008″ ab. Schön und gut.

Ihr habt also eine SQL-Abfrage in dem PHP die in etwa so lautet:

1
$result=mysql_query("SELECT * FROM alben WHERE album = " . $_GET['album'] . " ORDER BY id ASC");

Na, wer findet das Problem?

Richtig! Es fehlen die Anführungszeichen im SQL-Query. Nun kommen wieder einige Scriptkiddies und meinen: Die brauchen wir nicht, geht ja auch so!
Damn! Ihr habt mal wieder recht! Für alle die wissen wollen was noch geht, lest einfach weiter.
Viele werden es schon vermuten: SQL-Injections.
Nun wie tun wir das? Erstmal testen, ob’s klappt: Erstmal schauen wir ob wir einen Fehler erzeugen können in dem wir ein ‘ hinter die 2008 hängen. Bekommen wir dann das:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right foo bar...

Sind wir schon mal einen Schritt weiter. Das bedeutet in den meisten Fällen, die Seite ist verwundbar.
Nun wollen wir herausfinden wie viele Spalten denn wohl diese “alben”-Tabelle hat, das kann man einfach per “ORDER BY” machen:

meinalbum.php?album=2008 ORDER BY 1/*
meinalbum.php?album=2008 ORDER BY 2/*
meinalbum.php?album=2008 ORDER BY 3/*
meinalbum.php?album=2008 ORDER BY 4/*
meinalbum.php?album=2008 ORDER BY 5/* <-- hier gibts einen Fehler ("Unknown column 5 in ...")

Da wir nicht nach Spaltennamen sondern deren Index sortieren muss es 4 Spalten geben, wenn bei 5 keine kommt.

Fein, aber wie bringt uns das Weiter? Hmm… UNION!
UNION in SQL ist sowas wie ein “DOWNER JOIN” man kann also zwei SELECT-Ergebnisse untereinander hängen.

Wir benutzen also

meinalbum.php?album=2008 UNION ALL SELECT 1,2,3,4/*

und schon haben wir alle Einträge der Tabelle.
Oder:

meinalbum.php?album=2008 UNION ALL SELECT 1,2,3,4 FROM mysql.user/*

Und schon haben wir im Grunde Zugriff auf die gesamte Datenbank.

Wie schafft man sich als Programmierer Abhilfe?

  • Immer Anführungszeichen vor und nach den Werten im Query verwenden! Vor allem vor Werten die direkt vom User geändert werden können!
  • Werte immer so weit wie möglich auf den Datentyp oder Inhalt testen! (Im Beispiel z.B. mit “is_numeric”)

Falls noch Fragen oder Kritiken oder Anregungen da sind. Bitte Mail oder Kommentar.

Bis neulich.

j-zero

 

Wer die Wahl hat…

14 Sep

Mahlzeit,

das nenne ich mal Wahlwerbung!

Piraten vs. Zensursula

CDU-Plakat zerstört Internet-/Festnetzanbindung

SPD hängt alte Schröder-Plakate auf

 

Namen und Stoppschilder

02 Sep

Mahlzeit,

ich habe vor einiger Zeit unsere gesamte DSL-Infrastruktur inklusive Telefonanlage, etc. auf eine FRITZ!Box Fon WLAN 7270 umgesetzt.
Zu gegebenem Anlass wollte ich nun, da ich Telekom Kunde bin, andere DNS Server in der Fritz!Box eintragen was zu meinem erstauen nicht einfach so geht.

Ich habe dann einfach mal die Einstellungen exportiert und bin bei dabei auf folgenden Einträge gestoßen:st

1
2
overwrite_dns1 = 0.0.0.0;
overwrite_dns2 = 0.0.0.0;

“Schön!” dachte ich mir und trug dort voller Elan zwei DNS-Server von dieser Liste ein, wonach es so aussah:

1
2
overwrite_dns1 = 85.214.73.63;
overwrite_dns2 = 213.73.91.35;

Zu meiner Verwunderung behauptete das Web-Interface der Fritz!Box beim Importversuch nun aber – ich zitiere wörtlich:

Beim Wiederherstellen der Einstellungen ist ein Fehler aufgetreten.
Die angegebene Datei ist keine gültige Import-Datei.

“Hum?” Warum das nicht? Nach kurzem googlen fand ich das Problem: Die Fritzbox generiert eine Checksum und prüft beim importieren, ob die Datei passt. Ob das nun ein Sicherheitsfeature ist oder einfach nur zur Verhinderung z.B. genau meines Vorhabens gedacht ist, kann ich nicht sagen, aber jeder kann sich ja seinen Teil denken. Verschwörungstheorie und so.

Nun was tun? Bekanntermaßen gibt es für ein solches Problem genau zwei Lösungen.

  1. Checksum neu generieren
  2. Checksumprüfung umgehen

Für die erste Möglichkeit habe ich ein Perl-Skript gefunden, welches die Checksum neu generiert.
Die zweite Möglichkeit hielt ich aber erstmal für besser und hübscher.

Nun gibt es hier aber auch wieder zwei Ansätze. Die erste wäre, man aktiviert Telnet oder wenn man eh eine gemoddete Firmware hat man benutzt SSH um die in /var/flash/ liegende ar7.cfg direkt zu ändern. Danach ist nur ein Neustart erforderlich und die DNS-Server sind eingetragen. Die zweite ist, einfach vor in der exportierten Konfigurations-Datei vor die Zeile “**** CFGFILE:ar7.cfg” ein “NoChecks=yes” zu setzen und die Datei wieder zu importieren. Dies geht auch, wenn man die original Firmware nutzt.
Somit hat man nun wunderbare freie DNS Server.

Dies hilft allerdings nur so lange, wie die ISPs nicht – angewiesen vom BKA oder einer anderen Behörde – die DNS-Anfragen umleiten und/oder sie transparent modifizieren. Was durch eine Softwarelösung der Firma Nominum möglich wäre.
Was nach kurzem Überlegen stark an China erinnert.

Nein wir zensieren nichts im Internet, wir sperren nur das, was dem Staat nicht gefällt!

Abhilfe würde hier aber nur ein Proxy in einem anderen Land bringen. (SOCKS über SSH z.B.)

Ich verachte alles was mit Kindesmissbrauch zu tun hat, aber eine Sperrung von Webseiten, und das nur auf DNS-Basis bringt ja mal überhaupt nichts. Es sollten wohl eher die Hoster solcher Seiten herangezogen werden, was wie der AK-Zensur bewies wohl wesentlich Sinnvoller wäre.

Nun denn, lasst euch nicht von den Politikern ärgern, die wissen schon was sie tun! :D

Weiter Seiten die sich mit diesem oder anderen interessanten Themen beschäftigen findet ihr in meiner Linkliste.

bis neulich

j-zero

PS: Löschen statt verstecken!

 
 

Wolpertinger mit Zwiebeln

19 Jun

Wolpertinger
Mahlzeit,

ich hatte vor mal wieder Tor (The Onion Router) auf meinem Notebook, welches mit Ubuntu 9.04 (Jaunty Jackalope) läuft, zu installieren, als ich feststellen musste, dass diese nicht in den Repositories ist. Nach kurzer Suche habe ich aber Repositories die es haben: http://mirror.noreply.org/pub/tor.

Also einfach Folgendes ausführen:

1
2
3
4
5
sudo echo "deb http://mirror.noreply.org/pub/tor jaunty main" >> /etc/apt/sources.list
sudo echo "deb-src http://mirror.noreply.org/pub/tor jaunty main" >> /etc/apt/sources.list
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com CFF71CB3AFA44BDD
sudo apt-get update
sudo apt-get install tor

Und schon habt ihr Tor wieder installiert. Danach nur noch einen SOCKS5 Proxy auf Port 9050 in den Applikationen einrichten (z.B. mit FoxyProxy für den Firefox) und fertig.

Ihr könnt diesen “Torcheck” machen um zu sehen ob es funktioniert. Wenn nicht, schaut mal in die /var/log/tor/log, warum nicht.

Bis neulich.

j-zero

 

HTML-Link-Target dynamisch ändern…

11 Jun

Mahlzeit,
folgendes Problem ereilt einen des öfteren, wenn man z.B. in WordPress Links in dem HTML Editor manuell einfügt:
Das Link-Target (z.B. “_blank”) muss manuell eingetragen werden, damit beim Klicken auf einen Link die Seite in einem Neuen Fenster geöffnert wird. Es ist aber unschön diesen jedes mal manuell zu setzen, gerade wenn man mehr als einen Link hat.
Man könnte nun in der Tat einfach innerhalb des “<head>”-Tags ein

1
<base target="_blank" />

setzen, dieses würde aber Links die schon ein Target haben nicht ändern, was sehr gut ist, wenn man es nicht will. Wenn aber doch muss man sich anders helfen…
Dazu habe ich folgendes kleines Script gebastelt:

1
2
3
4
5
6
7
8
9
10
function setLinkTargets(){
 var l = document.getElementById("contentbox").getElementsByTagName("div");
  for (var i = 0; i < l.length; i++) {
    if(l[i].getAttribute("class") == "post"){
    var j = l[i].getElementsByTagName("a");
    for (var k = 0; k < j.length; k++) {
       if(j[k].getAttribute("class") == null){
          j[k].target = "_blank";
  }}}}
}

Damit wird allen “a”-Tags, die sich in dem div “contentbox” und innerhalb eines divs, welches die Class “post” hat das Target-Attribute “_blank” gegeben.
Unter Umständen müsst ihr noch den Class-Namen ändern oder eben das Target auf das Setzen was ihr möchtet.
Einzubinden ist das Script einfach folgendermaßen:

1
2
3
4
5
6
7
8
9
10
<html>
<head>
   <script type="text/javascript">
   ...
   </script>
</head>
<body onLoad="setLinkTargets()">
   ...
</body>
</html>

Viel Spaß damit.
j-zero
PS: Sicherlich wäre es eleganter die Links mit den richtigen Targets zu versehen, aber es wäre langweilig. ;)

Nachtrag:
Wie ich gerade eben gesehen habe, ist es nicht XHTML 1.0 Strict-Konform Links mit Targets zu versehen. Daher habe ich das Script deaktiviert.

 
 

Ihr Browser versucht gerade eine Seite aus dem sogenannten Internet auszudrucken. Das Internet ist ein weltweites Netzwerk von Computern, das den Menschen ganz neue Möglichkeiten der Kommunikation bietet.

Da Politiker im Regelfall von neuen Dingen nichts verstehen, halten wir es für notwendig, sie davor zu schützen. Dies ist im beidseitigen Interesse, da unnötige Angstzustände bei Ihnen verhindert werden, ebenso wie es uns vor profilierungs- und machtsüchtigen Politikern schützt.

Sollten Sie der Meinung sein, dass Sie diese Internetseite dennoch sehen sollten, so können Sie jederzeit durch normalen Gebrauch eines Internetbrowsers darauf zugreifen. Dazu sind aber minimale Computerkenntnisse erforderlich. Sollten Sie diese nicht haben, vergessen Sie einfach dieses Internet und lassen uns in Ruhe.

Die Umgehung dieser Ausdrucksperre ist nach §95a UrhG verboten.

Mehr Informationen unter www.politiker-stopp.de.