Cross-Site-Scripting "Persistentes" Beispiele: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „=Cross-Site-Scripting "Persistent"= =Um was geht es?= *Persistentes Cross-Site-Scripting/XSS ==Link== *http://opfer/xss-persistent.php“)
 
 
(8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 3: Zeile 3:
 
*[[Persistentes Cross-Site-Scripting/XSS]]
 
*[[Persistentes Cross-Site-Scripting/XSS]]
 
==Link==
 
==Link==
*http://opfer/xss-persistent.php
+
*http://opfer.secure.local/scripts/xss-persistent.php
 +
==Eingabe Skript==
 +
[[Datei:Cross-Site-Scripting-Persistent-11.png]]
 +
==Normale Verhaltensweise==
 +
[[Datei:Cross-Site-Scripting-Persistent-12.png]]
 +
==Einfügen und generieren des Schadcodes==
 +
<script>alert("Hacked by Xinux")</script>
 +
[[Datei:Cross-Site-Scripting-Persistent-13.png]]
 +
 
 +
==Dieses Popup Fenster geht nun auf==
 +
*Es wird auf jedem Rechner aufgehen der den generierten Link aufruft
 +
[[Datei:Cross-Site-Scripting-Persistent-14.png]]
 +
 
 +
=Von einem anderen Browser bekommt man nun den Java Script Code auch ausgeliefert=
 +
*http://opfer.secure.local/scripts/xss-persistent.php
 +
 
 +
=Hier nun der Code zu diesem Beispiel=
 +
<syntaxhighlight lang=html>
 +
  <?php
 +
    define('DB_SERVER', '127.0.0.1');
 +
    define('DB_USERNAME', 'xinux');
 +
    define('DB_PASSWORD', 'suxer');
 +
    define('DB_NAME', 'verwaltung');
 +
    $link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
 +
    mysqli_set_charset($link, "utf8");
 +
    if($link === false){
 +
    echo(mysqli_connect_error());
 +
    die("ERROR: Could not connect. " . mysqli_connect_error());
 +
}
 +
 
 +
 
 +
  //unsafe query
 +
    $search = $_POST['search'];
 +
    //Database search
 +
    $sql =" SELECT * FROM xss_stored ";
 +
    $result = mysqli_query($link, $sql);
 +
    if(isset($_POST['submit'])){
 +
          $message = trim( $_POST[ 'entry' ] );
 +
    $sql =" insert into xss_stored values('$message')";
 +
    $result = mysqli_query($link, $sql);
 +
  }
 +
    if(isset($_POST['clear'])){
 +
    $sql ="truncate table xss_stored";
 +
    $result = mysqli_query($link, $sql);
 +
  }
 +
?>
 +
 
 +
<!DOCTYPE html>
 +
<html>
 +
        <body>
 +
                <h1>XSS Stored</h1>
 +
                <form method="post">
 +
                  <label for="fname">Gästebuch</label><br>
 +
                  <textarea  name="entry"  rows="4" cols="50"></textarea><br>
 +
                  <input type="submit" name="submit" value="Eintragen">
 +
                  <input type="submit" name="clear" value="Alles löschen">
 +
                  <input type="submit" name="reload" value="Neuladen" onclick="window.reload()">
 +
                </form>
 +
                <br>
 +
                <table border = "1">
 +
                        <tr>
 +
                                <td>Einträge</td>
 +
                        </tr>
 +
<?php
 +
  while ($row = mysqli_fetch_row($result)) {
 +
    echo "<tr>";
 +
    echo "<td>".$row[0]." </td><br>";
 +
    echo "</tr>";
 +
  }
 +
?>
 +
                </table>
 +
        </body>
 +
</html>
 +
                   
 +
</syntaxhighlight>
 +
 
 +
=Wie können wir so etwas Vermeiden?=
 +
*Wir fügen der If Klausel ein weiteres Argument mit, nämlich das die Eingabe nur ausgeführt werden soll, wenn kein "<script" enthalten ist

Aktuelle Version vom 7. März 2023, 11:00 Uhr

Cross-Site-Scripting "Persistent"

Um was geht es?

Link

Eingabe Skript

Cross-Site-Scripting-Persistent-11.png

Normale Verhaltensweise

Cross-Site-Scripting-Persistent-12.png

Einfügen und generieren des Schadcodes

<script>alert("Hacked by Xinux")</script>

Cross-Site-Scripting-Persistent-13.png

Dieses Popup Fenster geht nun auf

  • Es wird auf jedem Rechner aufgehen der den generierten Link aufruft

Cross-Site-Scripting-Persistent-14.png

Von einem anderen Browser bekommt man nun den Java Script Code auch ausgeliefert

Hier nun der Code zu diesem Beispiel

  <?php
    define('DB_SERVER', '127.0.0.1');
    define('DB_USERNAME', 'xinux');
    define('DB_PASSWORD', 'suxer');
    define('DB_NAME', 'verwaltung');
    $link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
    mysqli_set_charset($link, "utf8");
     if($link === false){
    echo(mysqli_connect_error());
    die("ERROR: Could not connect. " . mysqli_connect_error());
}


   //unsafe query
    $search = $_POST['search'];
    //Database search
    $sql =" SELECT * FROM xss_stored ";
    $result = mysqli_query($link, $sql);
    if(isset($_POST['submit'])){
           $message = trim( $_POST[ 'entry' ] );
    $sql =" insert into xss_stored values('$message')";
    $result = mysqli_query($link, $sql);
  }
    if(isset($_POST['clear'])){
    $sql ="truncate table xss_stored";
    $result = mysqli_query($link, $sql);
  }
?>

<!DOCTYPE html>
<html>
        <body>
                <h1>XSS Stored</h1>
                <form method="post">
                  <label for="fname">Gästebuch</label><br>
                  <textarea   name="entry"  rows="4" cols="50"></textarea><br>
                  <input type="submit" name="submit" value="Eintragen">
                  <input type="submit" name="clear" value="Alles löschen">
                  <input type="submit" name="reload" value="Neuladen" onclick="window.reload()">
                </form> 
                <br>
                <table border = "1">
                        <tr>
                                <td>Einträge</td>
                        </tr>
<?php
  while ($row = mysqli_fetch_row($result)) {
    echo "<tr>";
    echo "<td>".$row[0]." </td><br>";
    echo "</tr>";
  }
?>
                </table>
        </body>
</html>

Wie können wir so etwas Vermeiden?

  • Wir fügen der If Klausel ein weiteres Argument mit, nämlich das die Eingabe nur ausgeführt werden soll, wenn kein "<script" enthalten ist