{"id":429,"date":"2010-12-09T15:36:56","date_gmt":"2010-12-09T14:36:56","guid":{"rendered":"https:\/\/d-mueller.de\/blog\/?p=429"},"modified":"2010-12-09T15:36:56","modified_gmt":"2010-12-09T14:36:56","slug":"kreative-attacken-mit-csrf","status":"publish","type":"post","link":"https:\/\/d-mueller.de\/blog\/kreative-attacken-mit-csrf\/","title":{"rendered":"Kreative Attacken mit CSRF"},"content":{"rendered":"<p>Frei nach der Devise &#8222;know your enemy&#8220; m\u00f6chte ich in diesem Post etwas auf weniger offensichtliche M\u00f6glichkeiten eingehen, wie mit CSRF attackiert werden kann. CSRF selbst habe ich \u00fcbrigens <a href=\"https:\/\/d-mueller.de\/blog\/angriffe-auf-webanwendungen-teil-4-csrf\/\">hier<\/a> genauer erkl\u00e4rt.<\/p>\n<h2>1) Feststellen, ob ein Benutzer bestimmte Seiten besucht hat<\/h2>\n<p>Es gibt ja bereits seit l\u00e4ngerem die <i>getComputedStyle<\/i>-Technik. Dabei werden Links auf einer Webseite platziert und mittels Javascript ausgelesen, ob diese Links <i>:visited<\/i> sind. Alter Hut, <a href=\"http:\/\/ajaxian.com\/archives\/spyjax-using-avisited-to-test-your-history\">genauer hier erkl\u00e4rt<\/a>. Diese Technik ist allerdings in neueren Browsern nicht mehr m\u00f6glich, die diese das Auslesen des Link-Status verbieten. Trotz allem gibt es noch eine M\u00f6glichkeit, um die es hier gehen soll. War der Benutzer bereits auf einer Webseite X, hat er die <b>Bilder dieser Seite in seinem Browsercache<\/b>. Was muss der Angreifer tun? <\/p>\n<ol>\n<li> Er sucht sich ein etwas gr\u00f6\u00dferes Bild einer Website aus, von der er wissen will, ob sein Opfer auf dieser Page war &#8211; In Zeiten von youporn kann das interessante R\u00fcckschl\u00fcsse ziehen.<\/li>\n<li>Er platziert dieses Bild mittels Javascript unsichtbar auf seiner Seite <i>attacker.com<\/i> und misst die Zeit, bis das Bild vollst\u00e4ndig geladen wurden &#8211; Der Javascript <i>onload<\/i>-Handler machts m\u00f6glich. Wenn das Bild nun in windeseile das onload-Eregnis ausl\u00f6st, kann der Angreifer sichergehen, dass es sich im Browsercache des Opfers befunden haben muss.<\/li>\n<\/ol>\n<pre data-enlighter-language=\"js\" class=\"EnlighterJSRAW\">\r\nvar starttime = (new Date).getTime();\r\n\r\nvar i = document.createElement(&quot;img&quot;);\r\ni.src = &quot;http:\/\/files.youporn.com\/images\/logoblack.png&quot;;\r\ni.onload = function()\r\n{\r\n\tvar delay = (new Date).getTime() - starttime;\r\n\talert(&quot;image loaded in &quot; + delay + &quot;msec&quot;);\r\n}\r\ni.onerror = function()\r\n{\r\n\talert(&quot;You have not visited this page&quot;);\r\n}\r\n<\/pre>\n<\/p>\n<h2>2) CSRF DDoS-Attacken<\/h2>\n<p>Eine <b>D<\/b>istributed <b>D<\/b>enial <b>o<\/b>f <b>S<\/b>ervice &#8211; Attacke bezeichnet das \u00fcberschwemmen eines Servers mit Requests von mehreren Rechnern aus. Gerade ist das Thema auch aktuell, da radikale Wikileaks-Anh\u00e4nger mastercard.com, paypal und weitere Seiten angreifen, die Wikileaks die Konten gesperrt hatten. Nun stelle man sich vor, der Angreifer m\u00f6chte eine gewisse Seite drastisch verlangsamen oder sogar unerreichbar machen. Dabei muss er folgendes tun.<\/p>\n<ol>\n<li>Er sucht nach einem Aufruf, der viele Berechnungen auf Seiten des Opfer-Servers hervorruft. Denkbar w\u00e4re dazu etwa eine Volltextsuche in einem Forum \u00fcber alle Kategorien.<\/li>\n<li>Diese URL platziert er dann beispielsweise in einem Scipt-Tag auf seiner Webseite und verbreitet diese in einem beliebten IRC-Channel oder an sonstigen prominenten Pl\u00e4tzen im Interet<\/li>\n<li>Die Besucher seiner Seite l\u00f6sen im Hintergrund nun unbemerkt einen Request aus, der die rechenintensive Opfer-Seite aufuruft und somit einiges an Last erzeugt<\/li>\n<\/ol>\n<pre data-enlighter-language=\"html\" class=\"EnlighterJSRAW\">\r\n&lt;img src=&quot;funny-picture.png&quot; \/&gt;\r\n&lt;script src=&quot;http:\/\/www.victim.com\/this\/url\/does\/a\/lot\/of\/calcultion.php&quot;&gt;&lt;\/script&gt;\r\n<\/pre>\n<\/p>\n<h2>3) Informationen \u00fcber das Intranet eines Users herausbekommen<\/h2>\n<p>Was w\u00e4re nun, wenn wir die unter 1) und 2) aufgelisteten Techniken verwenden, um Infos \u00fcber das Intranet eines Users herauszukriegen? Wenn wir es also schaffen, Menschen auf unsere Seite zu lotsen, die an ihrem Arbeitsplatz sitzen und an diesem auch Zugang zum Firmen-Intranet haben, k\u00f6nnten wir ein paar hilfreiche Informationen herauskriegen. Typische Intranet-URLs sind bspw. <i>10.10.10.10<\/i>. Wir requesten also in einem script-Tag ein paar typische Intranet-URLs und analysieren die Antwort. So l\u00e4sst sich im Erfolgsfall zumindest mal der verwendete Server herausfinden &#8211; k\u00f6nnte ja ein veralteter Apache oder IIS mit vielen Sicherheitsl\u00fccken sein. Wertvolle Informationen f\u00fcr den Angreifer f\u00fcr einen eventuellen sp\u00e4teren Angriff.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Frei nach der Devise &#8222;know your enemy&#8220; m\u00f6chte ich in diesem Post etwas auf weniger offensichtliche M\u00f6glichkeiten eingehen, wie mit CSRF attackiert werden kann. CSRF selbst habe ich \u00fcbrigens hier genauer erkl\u00e4rt. 1) Feststellen, ob ein Benutzer bestimmte Seiten besucht &hellip; <a href=\"https:\/\/d-mueller.de\/blog\/kreative-attacken-mit-csrf\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,12,6,3],"tags":[],"class_list":["post-429","post","type-post","status-publish","format-standard","hentry","category-php","category-javascript","category-security","category-webdev"],"_links":{"self":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts\/429","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/comments?post=429"}],"version-history":[{"count":0,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts\/429\/revisions"}],"wp:attachment":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/media?parent=429"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/categories?post=429"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/tags?post=429"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}