[DE] Cross-Site-Scripting (XSS) Angriffe verstehen
deutsch·@security101·
0.000 HBD[DE] Cross-Site-Scripting (XSS) Angriffe verstehen
Unter ***Cross-Site-Scripting (XSS)*** versteht man eine Schwachstelle in Webanwendungen, durch die es möglich ist Schadcode (meistens JavaScript) auszuführen. Oftmals ist dies durch Felder für Nutzereingaben möglich, in dem die Eingaben nicht ensprechend geprüft werden. Wichtig zu verstehen ist hierbei, dass JavaScipt im Browser des Besuchers und nicht auf dem Webserver ausgeführt wird. <center> https://www.netsparker.com.tr/img/article/DOM-XSS-Zafiyeti.png [Quelle](https://www.netsparker.com.tr/img/article/DOM-XSS-Zafiyeti.png) </center> Im Folgenden möchte ich die drei grundlegenden Arten - Reflexiv - Persistent - DOM-Basiert anhand des [XSS-Spiel](https://xss-game.appspot.com/) von Google veranschaulichen. Damit ist es möglich sich spielerisch mit Cross-Site-Scripting auseinander zu setzten um die Funktionsweise zu lernen. Ziel ist es als *Proof of concept* Code auszuführen, der ein Pop-Up mittels ```alert()```erscheinen lässt. Bei einem „richtigen“ Angriff würde hier entsprechender Schadcode ausgeführt werden, der Cockies ausliest etc. --- ## Level 1: Hier sehen wir ein Eingabefeld, das eine Suchfunktion darstellt.  Wird in dieses etwas eingegeben, so erscheint der entsprechende Text nach dem Absenden  Die wohl einfachste Möglichkeit eines XSS-Angriffes ist es, den Code direkt einzugeben: ``` <script>alert("Hello Steemit")</script> ```  Hierbei handelt es sich um einen sogenannten **reflektierten Angriff**. Reflektiert, weil die Benutzereingabe (in diesem Fall der gesuchte Text) nochmal ausgegeben wird. --- ## Level 2: Hier wird ein Forum simuliert. Die Texteingabe wird gespeichert und den anderen Benutzern verfügbar gemacht.  Die direkte Eingabe des Scriptes wie oben ist hier nicht möglich. Indem ein Bild eingebunden wird, welches nicht geladen werden kann kommt unser Code im ```onerror```Event zur Ausführung. Hier spricht man von einem **persistenten Angriff**. Persistent, da der Code (in diesem Fall über eine Kommentarfunktion) auf dem Webserver gespeichert wird. Jedes mal wenn ein Benutzer die Seite läd wird der Code im Browser ausgeführt. --- ## Level 3: Hier haben wir kein Eingabefeld, in welches wir schreiben können. Durch das Klicken auf eines der Reiter ändert sich das entsprechende Bild.  Ein Blick in den Quelltext verschafft uns Einsicht in die Funktionsweise   Das Bild wird abhängig vom angeklickten Tab geladen. Die Dateinamen werden hierbei entsprechend Zusammengesetzt(cloud1.jpg, cloud2.jpg, cloud3.jpg) Durch Einfügen eines einfachen ```'```"brechen" wir aus dem JS Code aus, und führen anschließend wie zueben über das HTML event ```onerror``` den entsprechenden Code aus: ``` https://xss-game.appspot.com/level3/frame#3' onerror='alert("Level 3.")'; ```  Diese Art des Angriffs nennt man lokales bzw. DOM-Basiertes Cross-Site-Scripting. Hierbei wird das **D**ocument **O**bject **M**odell manipuliert. --- ### Wie Schütze ich mich als Besucher einer Webseite ? Durch deaktivieren von JavaScript z.B durch entsprechende Browser-Addons wird kein Code mehr ausgeführt. Natürlich kann es sein, dass Funktionalität der Webseite hiedurch eingeschränkt wird. ### Wie schütze ich meine Webanwendung ? Durch den Einsatz von entsprechenden Tools wie [DOM Snitch](https://code.google.com/archive/p/domsnitch/) können während dem Entwickeln entsprechende Tests durchgeführt werden. Sinvoll ist es in jedem Fall einmal einen Blick in [Reviewing Code for XSS](https://www.owasp.org/index.php/Reviewing_Code_for_Cross-site_scripting) und [XSS Filter Evasion](https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet)von OWASP zu werfen. <center> https://steemitimages.com/0x0/https://i.imgur.com/NLy7ba1.png Ich hoffe euch einen groben Überblick gegeben zu haben. Bei weiteren Fragen beantworte ich diese natürlich gerne in den Kommentaren. Ansonsten könnt ihr euch ja mal an den nächsten Leveln versuchen ;) Vielen Dank fürs Lesen ! </center>
👍 panotwo, flugschwein, benni93, maxpatternman, danielplays, mdshahin786, arrax, correia, thevictor12, gammastern, stef77, alexzeigt, minnowsupport, dirty.hera, jhermanbeans, steemprentice, myday, bradfordtennyson, river-island, pheonike, edrivegom, stephen.king989, pomperipossa, numpypython, decibel, qwasert, cryptohustler, gamerveda, cryptowarrior88, cryptonator, rashbash, obvious, lulafleur, corazen, lifeofroman, tineschreibt, xers, k3ldo, tonkatonka, louis88, passive, bi0hack, grimmyx, amikphoto, sadekj, hamidaansary, maski, umm, moonrise, amri, heriadi, lemmybe, amanjain2k, gadgetsan, thatdamiguy, heremonium, joe.backpacker, znaffe, jannat, spreadfire1, dreamer.golos, hyipi, olegn, vvk, gamersunited, mwfiae, alaminhosssain, thephotographers, gogriffs, affeeeman, pangur-ban, indu1, shafay, winnetou, tommyinthesun, nuges, walkinharmony, cryptoletter, mike50, ftk22, walkwithme, michaelmorcos, herfie, bil.prag, bryanwilliam, hendragunawan, ranjitoram, bongje, dhrms, funder, amreshchandra, steemitpowerupph, patchi02, elizah, mcnil, jonalynurcales, thomasgutierrez, johnycrypto, troopaloop, folker-wulff, derpepe, vladimir-simovic, seveaux, xinvista, redpalestino, degrimmis, janisplayer, fridolin, privacybydesign, calvinthefreak, resteem.bot, syalla, oliver391, burstfire, fel1xw, hirschi, technotroll, flurgx, unixfriend,