<?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/"
	>

<channel>
	<title>j-zero&#187; j-zero.de</title>
	<atom:link href="http://www.j-zero.de/blog/category/computer/hacks-computer/feed" rel="self" type="application/rss+xml" />
	<link>http://www.j-zero.de</link>
	<description>Leben. Computer. Rock &#039;n&#039; Roll.</description>
	<lastBuildDate>Mon, 05 Jul 2010 11:53:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Injektionen – die Querygrippe</title>
		<link>http://www.j-zero.de/blog/injektionen-%e2%80%93-die-querygrippe-407.html</link>
		<comments>http://www.j-zero.de/blog/injektionen-%e2%80%93-die-querygrippe-407.html#comments</comments>
		<pubDate>Fri, 23 Oct 2009 05:59:14 +0000</pubDate>
		<dc:creator>j-zero</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[Hacks]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Injection]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.j-zero.de/?p=407</guid>
		<description><![CDATA[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 &#8220;Injektionen&#8221; ein? Richtig! Schweinegrippe! Was viel dem ein oder anderen (vermutlich nur Nerds) früher bei &#8220;Injektionen&#8221; ein? Wieder richtig! SQL. Nun ich bin in den letzten [...]]]></description>
			<content:encoded><![CDATA[<p>Mahlzeit.</p>
<p>Nach dem ich ja schon länger nichts gepostet habe wollte ich mal wieder ein aktuelles mit einem alten Thema verbinden.<br />
Was fällt uns denn im Moment zum Thema &#8220;Injektionen&#8221; ein? Richtig! Schweinegrippe!</p>
<p>Was viel dem ein oder anderen (vermutlich nur Nerds) früher bei &#8220;Injektionen&#8221; ein? Wieder richtig! SQL.</p>
<p>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.<br />
Die SQL-Injections waren nicht das einzige Problem, aber vermutlich das welches am häufigsten auch bei anderen Projekten möglich ist.</p>
<p>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.<br />
<span style="color: #ff0000;"><strong>ACHTUNG: Der nachfolgende Text ist für rein edukative Zwecke gedacht und ich übernehme keinerlei Haftung für dadurch entstandenen Schaden!</strong></span><br />
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.<br />
Nun rufen eure Verwandten diese Bilder mittels: &#8220;http://www.example.com/meinalbum.php?album=2008&#8243; ab. Schön und gut.</p>
<p>Ihr habt also eine SQL-Abfrage in dem PHP die in etwa so lautet:</p>
<div class="codecolorer-container php geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$result</span><span style="color: #339933;">=</span><a href="http://www.php.net/mysql_query"><span style="color: #990000;">mysql_query</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SELECT * FROM alben WHERE album = &quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'album'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; ORDER BY id ASC&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Na, wer findet das Problem?</p>
<p>Richtig! Es fehlen die Anführungszeichen im SQL-Query. Nun kommen wieder einige Scriptkiddies und meinen: Die brauchen wir nicht, geht ja auch so!<br />
Damn! Ihr habt mal wieder recht! Für alle die wissen wollen was noch geht, lest einfach weiter.<br />
Viele werden es schon vermuten: SQL-Injections.<br />
Nun wie tun wir das? Erstmal testen, ob&#8217;s klappt: Erstmal schauen wir ob wir einen Fehler erzeugen können in dem wir ein &#8216; hinter die 2008 hängen. Bekommen wir dann das:</p>
<pre>You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right foo bar...</pre>
<p>Sind wir schon mal einen Schritt weiter.  Das bedeutet in den meisten Fällen, die Seite ist verwundbar.<br />
Nun wollen wir herausfinden wie viele Spalten denn wohl diese &#8220;alben&#8221;-Tabelle hat, das kann man einfach per &#8220;ORDER BY&#8221; machen:</p>
<pre>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/* &lt;-- hier gibts einen Fehler ("Unknown column 5 in ...")</pre>
<p>Da wir nicht nach Spaltennamen sondern deren Index sortieren muss es 4 Spalten geben, wenn bei 5 keine kommt.</p>
<p>Fein, aber wie bringt uns das Weiter? Hmm&#8230; UNION!<br />
UNION in SQL ist sowas wie ein &#8220;DOWNER JOIN&#8221; man kann also zwei SELECT-Ergebnisse untereinander hängen.</p>
<p>Wir benutzen also</p>
<pre>meinalbum.php?album=2008 UNION ALL SELECT 1,2,3,4/*</pre>
<p>und schon haben wir alle Einträge der Tabelle.<br />
Oder:</p>
<pre>meinalbum.php?album=2008 UNION ALL SELECT 1,2,3,4 FROM mysql.user/*</pre>
<p>Und schon haben wir im Grunde Zugriff auf die gesamte Datenbank.</p>
<p>Wie schafft man sich als Programmierer Abhilfe?</p>
<ul>
<li>Immer Anführungszeichen vor und nach den Werten im Query verwenden! Vor allem vor Werten die direkt vom User geändert werden können!</li>
<li>Werte immer so weit wie möglich auf den Datentyp oder Inhalt testen! (Im Beispiel z.B. mit &#8220;is_numeric&#8221;)</li>
</ul>
<p>Falls noch Fragen oder Kritiken oder Anregungen da sind. Bitte Mail oder Kommentar.</p>
<p>Bis neulich.</p>
<p>j-zero</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-spaced shr-bookmarks-bg-knowledge">
<ul class="socials">
		<li class="shr-printfriendly">
			<a href="http://www.printfriendly.com/print?url=http://www.j-zero.de/blog/injektionen-%e2%80%93-die-querygrippe-407.html" rel="nofollow" class="external" title="Sende diese Seite zu Print Friendly">Sende diese Seite zu Print Friendly</a>
		</li>
		<li class="shr-mail">
			<a href="mailto:?subject=%22Injektionen%20%E2%80%93%20die%20Querygrippe%22&amp;body=Link: http://www.j-zero.de/blog/injektionen-%e2%80%93-die-querygrippe-407.html (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Mahlzeit.%0D%0A%0D%0ANach%20dem%20ich%20ja%20schon%20l%C3%A4nger%20nichts%20gepostet%20habe%20wollte%20ich%20mal%20wieder%20ein%20aktuelles%20mit%20einem%20alten%20Thema%20verbinden.%0D%0AWas%20f%C3%A4llt%20uns%20denn%20im%20Moment%20zum%20Thema%20%22Injektionen%22%20ein%3F%20Richtig%21%20Schweinegrippe%21%0D%0A%0D%0AWas%20viel%20dem%20ein%20oder%20anderen%20%28vermutlich%20nur%20Nerds%29%20fr%C3%BCher%20bei%20%22Injektionen%22%20" rel="nofollow" class="external" title="Sende diesen Artikel einem Freund per Email">Sende diesen Artikel einem Freund per Email</a>
		</li>
		<li class="shr-comfeed">
			<a href="http://www.j-zero.de/blog/injektionen-–-die-querygrippe-407.html/feed" rel="nofollow" class="external" title="Abonniere die Kommentare für diesen Beitrag">Abonniere die Kommentare für diesen Beitrag</a>
		</li>
		<li class="shr-slashdot">
			<a href="http://slashdot.org/bookmark.pl?url=http://www.j-zero.de/blog/injektionen-%e2%80%93-die-querygrippe-407.html&amp;title=Injektionen+%E2%80%93+die+Querygrippe" rel="nofollow" class="external" title="Empfehle diesen Artikel bei SlashDot">Empfehle diesen Artikel bei SlashDot</a>
		</li>
		<li class="shr-googlebookmarks">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.j-zero.de/blog/injektionen-%e2%80%93-die-querygrippe-407.html&amp;title=Injektionen+%E2%80%93+die+Querygrippe" rel="nofollow" class="external" title="Füge hinzu zu Google Bookmarks">Füge hinzu zu Google Bookmarks</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.j-zero.de/blog/injektionen-%e2%80%93-die-querygrippe-407.html&amp;title=Injektionen+%E2%80%93+die+Querygrippe" rel="nofollow" class="external" title="Empfehle diesen Artikel bei del.icio.us">Empfehle diesen Artikel bei del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.j-zero.de/blog/injektionen-%e2%80%93-die-querygrippe-407.html&amp;title=Injektionen+%E2%80%93+die+Querygrippe" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-googlereader">
			<a href="http://www.google.com/reader/link?url=http://www.j-zero.de/blog/injektionen-%e2%80%93-die-querygrippe-407.html&amp;title=Injektionen+%E2%80%93+die+Querygrippe&amp;srcUrl=http://www.j-zero.de/blog/injektionen-%e2%80%93-die-querygrippe-407.html&amp;srcTitle=Injektionen+%E2%80%93+die+Querygrippe&amp;snippet=Mahlzeit.%0D%0A%0D%0ANach%20dem%20ich%20ja%20schon%20l%C3%A4nger%20nichts%20gepostet%20habe%20wollte%20ich%20mal%20wieder%20ein%20aktuelles%20mit%20einem%20alten%20Thema%20verbinden.%0D%0AWas%20f%C3%A4llt%20uns%20denn%20im%20Moment%20zum%20Thema%20%22Injektionen%22%20ein%3F%20Richtig%21%20Schweinegrippe%21%0D%0A%0D%0AWas%20viel%20dem%20ein%20oder%20anderen%20%28vermutlich%20nur%20Nerds%29%20fr%C3%BCher%20bei%20%22Injektionen%22%20" rel="nofollow" class="external" title="Füge hinzu zu Google Reader">Füge hinzu zu Google Reader</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Injektionen+%E2%80%93+die+Querygrippe+-+http://tinyurl.com/23oow3k&amp;source=shareaholic" rel="nofollow" class="external" title="Twittere diesen Artikel!">Twittere diesen Artikel!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.j-zero.de/blog/injektionen-%e2%80%93-die-querygrippe-407.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
