irgendwas bei 350 zeilen interface fuer einen one-liner

November 26th, 2010 § 3 comments § permalink

erinnert ihr euch an mein problem? das konnte ich nun doch sehr elegant loesen:

ed@mediathek:~$ find Media/Movies/ -name "*.nfo" -print0 | \
  xargs -0  egrep -i -c -e "countr.*dd|genre.*sci-fi|year.*196" | \
  grep ":3" | sort | sed 's/:3//'
Media/Movies/Der Schweigende Stern (1960)/\
  Der Schweigende Stern (1960).nfo
Media/Movies/First Spaceship on Venus (1962)/\
  First Spaceship on Venus (1962).nfo

und bevor ich das rausfand wurde mir im irc noch gesagt, ich koennte keine scheisse aufpolieren und solle das lieber in perl oder besser noch in python programmieren! und am ende habe ich es doch in einem one-liner untergebracht :P

damit das auch nachhaltig ist und benutzbar bleibt, habe ich mir das ziel gesetzt, nun auch in der bash das interface zuprogrammieren. nach ganz viel case-voodoo wird am ende auch nur wieder

 /usr/bin/find $DIR -type f -name "*.nfo" -print0 | \
  xargs -0 egrep -c -i -e "$EXPRESSION" | \
  grep ":$COUNTER" | sort | \
  sed 's/:'$COUNTER'//' | sed -r 's/^.*\/(.*)\/.*/\1/'

ausgefuehrt. in der benutzung sieht das dann z.b. so aus:

ed@mediathek:~$ mediathek-cli-search --country=dd --genre=sci-fi \
  --year=196
Der Schweigende Stern (1960)
First Spaceship on Venus (1962)

# link zum source von extern und von intern

die man-page und die bash-completion bau ich dann morgen oder so...

ed@mediathek:~$ mediathek-cli-search 
USAGE:
 mediathek-cli-search [OPTION=VALUE]...

OPTIONS: 
 --help
 --title
 --orignaltitle
 --alternativetitle
 --englishtitle
 --germantitle
 --year
 --country
 --director
 --genre
 --length 
 --dub 
 --sub
 --subfiles
 --source
 --videoformat 
 --resolution
 --aspectratio

EXAMPLES:
 mediathek-cli-search --help=OPTION
 mediathek-cli-search --country=dd --genre=sci-fi
 mediathek-cli-search --country=jp --genre=action \
   --year=199
 mediathek-cli-search --director=vertov
 mediathek-cli-search --dub=en --subfiles=de \
   --genre=horror

seit stunden droehnt der inhalt des goldenen doeschen (neben dem auch der benjamin liegt) in mein hirn und psychodelischer trance (den marv mitgebracht hat) in mein ohr.

alternative mediathek via shell

November 24th, 2010 § 1 comment § permalink

beim versuch meinen fetisch fuer utopische defa produktionen auszuleben, komme ich ja mit
[code]mr@mediathek:~$ find Media/Movies/ -name "*.nfo" -print0
| xargs -0  egrep -i -l "country.*dd" | sort[/code]
schon echt weit. aber wie ich das ergebniss nochmal durch
[code]egrep -i -l "genre.*sci-fi" | sort[/code]
schubse ist mir unklar.
versuche das durch weitere pipes zu quetschen z.B. mit [code]find -exec[/code] oder [code]xargs[/code]-voodoo haben kein akzeptables bis gar kein ergebniss geliefert, oder sind wie z.b. [code]grep -B 60 -A 60[/code] einfach hinrissig... hat jemand ein vorschlag wie ich mit grep zwei und mehr strings in verschiedenen zeilen durch binaere-operatoren verbinden kann?

the revolution

November 19th, 2010 § 1 comment § permalink

… will not be twittered!

the revolution will be thimbled!

ed@mediathek:/usr/local/bin/Thimbl-CLI$ ./thimbl fetch
Fingering  dk@telekommunisten.org
Fingering  meschugge@ping01.stura.uni-weimar.de
finger: connect: Connection refused *
Failed on address. Skipping
Finished
ed@mediathek:/usr/local/bin/Thimbl-CLI$ ./thimbl print
ed@ping01.stura.uni-weimar.de
2010-11-19 12:10:04
es lebe die maschine der teleanarchistischen revolution\!

dk@telekommunisten.org
2010-11-05 12:44:12
Hey @mark, this is the first update sent with Thimbl-CLI

dk@telekommunisten.org
2010-07-07 12:51:20
mike needs to stop sending messages from the future!

dk@telekommunisten.org
2010-07-07 12:21:40
#thimbl is rolling!

dk@telekommunisten.org
2010-06-22 17:09:14
I love thimbl! #thimbl
* living in the shadow of a router sux :(

WLAN-BUW vpn on arch linux

November 18th, 2010 § 4 comments § permalink

Habs endlich geschafft auf meinem arch linux den vpn zu konfigurieren und will euch nicht vorenthalten wie es geht.

Zu allererst brauchen wir den vpnc.

sudo pacman -S vpnc

Dann gehts in die config von vpnc. Die liegt in /etc/vpnc/default.conf

# example vpnc configuration file
# see vpnc --long-help for details

#Interface name tun0
#IKE DH Group dh2
#Perfect Forward Secrecy nopfs

# You may replace this script with something better
#Script /etc/vpnc/vpnc-script
# Enable this option for NAT traversal
#UDP Encapsulate

IPSec gateway 172.18.254.252
IPSec ID GROUP-WLAN
IPSec secret v2oeff
Xauth username DEINNUTZER
Xauth password DEINPW

Da in der config dein vpn passwort plaintext liegt, kannst du zumindest mit chmod die rechte aendern, sodass nur root das file lesen kann.

chmod 700 /etc/vpnc/default.conf

Jetzt koennt ihr euch ins uni wlan einloggen und vpnc ausfuehren.

sudo vpnc

Weil ich ein fauler mensch bin und auf networkmanager stehe... gibs dazu auch noch was auf die augen:

Wicd haelt hierfuer die moeglichkeit bereit scripts fuer jede einzelne verbindung auszufuehren. Es gibt pre- und post connection scripts und pre- und post disconnection scripts. Weil wir nach dem connecten zum uni wlan vpnc ausfuehren wollen erstellst du dir /etc/wicd/scripts/postconnect/uniwlan.sh mit folgenden inhalt:

#!/bin/bash

script="$(basename "$0")"
script_name="${script/.sh/}"

echo "Running ${script}" >"/var/log/wicd/${script_name}.log"
exec 2>>"/var/log/wicd/${script_name}.log"
exec 1>&2

connection_type="$1"
echo "Connection type: ${connection_type}"

if [ "${connection_type}" == "wired" ]; then
profile="$3"
echo "Profile: ${profile}"
elif [ "${connection_type}" == "wireless" ]; then
essid="$2"
bssid="$3"
echo "ESSID: ${essid}"
echo "BSSID: ${bssid}"
else
echo "Unknown connection type: ${connection_type}" >&2
exit
fi

if [ "${essid}" == "WLAN-BUW" ]; then
killall vpnc
vpnc

else
exit
fi

Das killall vpnc ist nur ein reset,  falls da noch reste aus ner andern verbindung laufen... das else exit ist eventuell auch redundant... aber sicher ist sicher.

Wenn ihr aus dem uni wlan zu einem anderen netzwerk wechselt sollte natuerlich der vpnc wieder gekillt werden. Deshalb gibts /etc/wicd/scripts/postdisconnect/uniwlan.sh

#!/bin/bash

script="$(basename "$0")"
script_name="${script/.sh/}"

echo "Running ${script}" >"/var/log/wicd/${script_name}.log"
exec 2>>"/var/log/wicd/${script_name}.log"
exec 1>&2

connection_type="$1"
echo "Connection type: ${connection_type}"

if [ "${connection_type}" == "wired" ]; then
profile="$3"
echo "Profile: ${profile}"
elif [ "${connection_type}" == "wireless" ]; then
essid="$2"
bssid="$3"
echo "ESSID: ${essid}"
echo "BSSID: ${bssid}"
else
echo "Unknown connection type: ${connection_type}" >&2
exit
fi

killall vpnc
fi

There u have it... vergesst nicht die wicd scripts ausfuehrbar zu machen.
Ergebniss: Verbinden zum uniwlan incl. vpn mit einem click... bzw bei auto-connect total automatisiert und es ist nicht noetig dein pw einzutippen.

keksklau, blöde käfer und die pinnwand

November 16th, 2010 § 2 comments § permalink

Vor einem Monat wurde die Uni-Pinnwand unfreiwillig auf das private Blog einer recht bekannten Person umgeleitet.

Hier nun ein kleiner Erklärbär-Post zur Pinnwand-Sicherheit und ein wenig Web-Security im Allgemeinen:

Disclaimer: Die Informationen dazu sind seit Jahren bekannt und niemand möchte der Universität schaden oder hat wirklich Cookies geklaut. Es ist aber teilweise einfach zu einfach und viele Fehler tauchen im Netz immer wieder auf oder man begeht sie selbst wenn man Webseiten bastelt (ist immer einfacher als man denkt ;)

Daher hier einmal die beiden (bislang bekannten und bereits gefixten) Bugs in der Piazza etwas erklärt:

Bug #1: HTML-Injection

Möglich geworden ist dies durch eine XSS-Lücke. Der Titel eines Beitrages wurde auf der Übersichtsseite nicht korrekt escaped. 1

Das klingt auf den ersten Blick recht harmlos. In Verbindung mit JavaScript ergeben sich aber unendlich viele Möglichkeiten Spass zu haben oder eben auch "böse" Dinge zu tun. Mit JavaScript hat man Zugriff auf den kompletten DOM einer Website und kann normalerweise 2 auch Cookies auslesen oder Asteroids mit den Elementen der Website spielen 3.

Cookies sind vor allen Dingen interressant, weil damit Sessions authentizifiert werden. Wer es noch nicht kennt: Firesheep demonstriert recht beeindruckend, dass man oft nur den Cookie stehlen muss um eine Session zu stehlen.

Zum Glück hat das SCC seine Hausaufgaben hier gemacht und das Vorlesungsverzeichnis (mit den Noten der Studenten) nutzt httponly-Cookies 2 und ist damit (mit modernen Browsern) nicht angreifbar. Aber das TYPO3-Backend der Uni nutzt diese z.B. nicht.

Wie würde denn ein Angreifer mit bösen Absichten Session-Cookies stehlen?

Hier hilft wieder JavaScript. Cookies und JavaScript haben 2 verschiedene Sicherheitskonzepte. JavaScript hat eine sog. Same-Origin-Policy. D.h. man hat nur Zugriff auf Objekte der Domain in der das JavaScript ausgeführt wird.

Cookies haben zusätzlich zur Same-Origin-Policy noch einen Cookie-Path d.h. der Browser sendet nur Cookies an eine bestimmte Unterseite, wenn diese im Cookie-Path steht.

Dank JavaScript ist es aber kein Problem dies zu umgehen:

Man muss nur die Seite von der man die Cookies stehlen möchte in einen z.B. 1x1 Pixel großen <iframe> öffnen und kann dann über die JavaScript Funktion document.cookie den gewünschten Session-Cookie auslesen und unbemerkt weiterleiten.

Damit ist es dem Angreifer dann möglich sich als User zu authentifizieren.

Um das mal am Beispiel der Pinnwand zu illustrieren:

Person XY ist im TYPO3-Backend der Universtät eingeloggt und besucht die Pinnwand-Seite, dort ist ein verstecktes JavaScript in einer Nachricht, welches die TYPO3-Seite im Browser von Person XY in einem unsichtbaren (oder sehr kleinen) <iframe> öffnet, den Session-Cookie stielt und an den Angreifer weiterleitet.

Dieser kann sich nun selbst im TYPO3 einloggen in dem er den Cookie in seinen Browser einträgt.

Bug #2: Authentifizierung umgehen

Bis vor 3 Wochen konnte man ohne Passwort-Abfrage und ohne Freischaltung unter jeden Namen auf der Pinnwand Beiträge verfassen.

Die XSS-Lücke hat die Neugier geweckt und man kann sich ja mal den HTML-Quellcode ansehen und beobachten wie die Pinnwand funktioniert.... erstaunliches trat zu Tage:

Zur Erklärung: Dinge die man in Browser-Eingabekästchen eintippt werden gewöhnlich durch <form> und <input> Tags beschrieben. Beim Klick auf "Beitrag veröffentlichen" sendet der Browser in einen POST-Request die Daten an die URL die in dem Form-Tag angeben ist.

Auf der "Beitrag-Verfassen"-Seite wurde schon immer ein ein Passwort mitgesendet und überprüft. So weit so gut...

Nach der Verfassen-Seite kommt die Vorschau-Seite. Dort gibt gab es wieder ein Formular welches abgeschickt wird:


<form method="post"
action="https://www.uni-weimar.de/cms/index.php?id=2456" id="insert"
accept-charset="ISO-8859-1, ISO-8859-2">
<fieldset>
<input type="hidden" name="user" value="HIER EINEN
UNI-LOGIN EINTRAGEN">
<input type="hidden" name="titel" value="Titel des Posts">
<input type="hidden" name="inhalt"
value="Inhalt+vom+Post+urlencoded" />
<input type="hidden" name="datum" value="2010-10-20">
<input type="hidden" name="zeit" value="14:30:00">
<input type="hidden" name="dauer" value="1h">
<input type="hidden" name="intern" value="">
<input type="hidden" name="gast" value="">
<input type="hidden" name="pin_rubrik" value="11">
<input type="submit" value="Beitrag veröffentlichen"
name="insert">
</fieldset>
</form>

Na - fällt etwas auf? Hier gibt gab es kein Passwort-Feld. Und die URL an welche die Daten gesendet werden ist auch eine andere.

Blöd nur, dass HTTP zustandslos ist. Dementsprechend interressiert es weder den Browser noch die Website ob man sich vorher schon erfolgreich authentifiziert hat...

...basteln wir uns also eine kleine HTML-Datei, welche die Daten hinschickt und ändern wir den Eintrag im user=-Feld.

Huch. Da ist ein neuer Beitrag auf der Piazza ohne Passwortabfrage von einer anderen Person. In das Feld für den Namen konnte man eintragen was man möchte.

Jetzt können wir also alle unliebsamen Vorlesungen absagen und in Bernds Namen trollen. m(

Wer selbst eine Lücken finden sollte: Bitte der SCC Security Hotline melden: security@scc.uni-weimar.de. Die kümmern sich dann darum.

Und hier gibt es einen gutes Tutorial zur Sicherheit von Web-Anwendungen.

Anmerkungen

[1] Escaping ist das Umwandeln von Sonderzeichen wie < > in entsprechende HTML-Codes, so dass der Browser sie nicht mehr ausführt. In PHP z.B. mit htmlspecialchars() machbar.

[2] Da es das Problem des Cookie-Diebstahls schon sehr lange gibt wurde mit Internet Explorer 6 SP1 (2002) das httponly-Flag eingeführt. Damit wird verhindert, dass JavaScript- sowie AJAX-Funktionen Zugriff auf derart gesicherte Cookies haben.

[3] Einfach das Codeschnippsel in die Adresszeile kopieren mit den Pfeiltasten navigieren und mit der Leertaste ballern:

javascript:var%20s%20=%20document.createElement('script');
s.type='text/javascript';document.body.appendChild(s);
s.src='http://erkie.github.com/asteroids.min.js';void(0);