Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] XSS Attacke testen. Aber wie?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] XSS Attacke testen. Aber wie?

    Hi

    habe heute mal versucht, selber eine XSS Attacke durch Parametermanipulation einer Textbox auszulösen. Also das typische
    Code:
    <script>alert('XSS');</script>
    Das ganze natürlich nur, um besser zu wissen, wovon bei XSS die Rede ist.

    Das hat nicht geklappt. Habe dann verschiedene Kodierungen aus RSnakes Cheat Sheet angetestet. Klappt auch nicht. Unkodiert wird meine Eingabe URL-encodiert. Kodiert wird es wieder in lesbaren Text umgewandelt oder etwas noch Kryptischeres, wobei keine Variante die alert-Box auf den Bildschirm zaubert.

    Kann mir jemand sagen, was da jetzt noch nötig ist.

    Meine Testseite sieht so aus.
    Code:
    form action="xss.php" method="get" enctype="text/plain">
    <div>
    <input type="text" value="'.$_GET['tx_test'].'" name="tx_test" />
    <input type="submit" value="Senden" name="bt_send" />
    </div>
    </form>
    In den URL schreibe ich dann sowas rein
    Code:
    http://localhost/test/xss.php?tx_test=<script>alert('XSS');</script>&bt_send=Senden
    Es ist schon alles gesagt. Nur noch nicht von allen.


  • #2
    Code:
    tx_test="><script>alert('XSS');</script>
    Code:
    tx_test="+style="font-size:700em;"
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      Vielleicht hast du magic_quotes an und ueberlebst die Attacken dann bis PHP 6 oder dem naechsten Serverumzug. Was immer ganz hilfreich ist, wenn man eine Funktion hat, die den globalen Datenlieferanten spielt, beispielsweise eine Uebersetzer-Klasse oder ein Datenbank-Adapter. Hier kann man ziemlich schnell mal einen Dummyrueckgabewert reinbauen, der - wenn man bisher valides HTML produziert hat - den HTML-Validator schoen flimmern laesst bzw. dir ne Menge alert() Boxen auf den Bildschirm zaubert.

      Das beste Testen ist doch sowieso die eigene Kenntnis einsetzen: Wie wuerde ich mein System hacken? Da findet sich dann durchaus die ein oder andere Schlamperei wieder im Fokus.

      "Gute" Zeichen zum Zumachen: " ' > < \0 / \ & bzw.
      <!--
      ">
      1 OR 1 = 1 -- (MySQL)
      "Mein Name ist Lohse, ich kaufe hier ein."

      Kommentar


      • #4
        Danke an Nikosch

        Ja danke dann auch!

        Das hat jetzt geklappt. Das schließende
        >
        hatte ich auch schon vorangestellt. Das mit dem
        "
        habe ich in keiner Anweisung gefunden, seltsam.

        Damit setze ich value auf
        Code:
        ""
        . Soweit so gut. Das name-Attribut wird dann in der Ausgabe mit angezeigt. Zerschießt also das HTML.

        Hast Du Lust noch ein, zwei erklärende Worte dazu zu schreiben?
        Es ist schon alles gesagt. Nur noch nicht von allen.

        Kommentar


        • #5
          Viel mehr als Du gesagt hast, gibts da nicht zu sagen. Entscheidend ist, vollständige Tags zu erzeugen (zumindest vor dem bösen Script). Sonst weiß man ja nicht, wie der Browser das interpretiert. XSS funktioniert ja nur, weil PHP etwas ausliefert, das valides HTML ist, ob das der ursprüngliche Code ist oder manipulierter, kann weder PHP noch Browser registrieren.

          Das name-Attribut
          Du kannst genauso auch zwei Tags draus machen

          Code:
          <input type="text" value="'.$_GET['tx_test'].'" name="tx_test" />
          Code:
          ?tx_test=HalloBallo"+/><input+type="text"+value="Eine+Muh+eine+Mäh
          --

          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


          --

          Kommentar


          • #6
            O.K., danke nochmal. Dann kann ich mich ja jetzt weglegen. Bis die Tage.
            Es ist schon alles gesagt. Nur noch nicht von allen.

            Kommentar


            • #7
              Jetzt doch noch mal. Das doppelte Input-Element ist interessant. Ich seh schon. XSS ist auch eine Wissenschaft für sich.

              Wofür denn die ganzen + Zeichen?
              Es ist schon alles gesagt. Nur noch nicht von allen.

              Kommentar


              • #8
                URL kodiert. Einen Zeilenumbruch oder einen Slash / bringst du in einer URL eben schlecht unter, brauchst ihn aber womoeglich fuer den Code, den du letztlich erzeugen willst. Gleiches eben fuer Leerzeichen (in der URL je nach Kodierung %20 oder +). Siehe
                PHP: urlencode - Manual
                PHP: rawurlencode - Manual
                "Mein Name ist Lohse, ich kaufe hier ein."

                Kommentar


                • #9
                  Url-Maskierung des Leerzeichens. Genauso könnte man auch alle anderen Zeichen encodieren und hätte damit den Angriff noch verschleiert.
                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar

                  Lädt...
                  X