Cross-Site-Scripting "Persistentes" Beispiele: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| Zeile 20: | Zeile 20: | ||
=Hier nun der Code zu diesem Beispiel= | =Hier nun der Code zu diesem Beispiel= | ||
| − | |||
<syntaxhighlight lang=html> | <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> | <!DOCTYPE html> | ||
| − | + | <html> | |
<body> | <body> | ||
| − | + | <h1>XSS Stored</h1> | |
| − | <form name=" | + | <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 | <?php | ||
| − | + | while ($row = mysqli_fetch_row($result)) { | |
| − | echo | + | echo "<tr>"; |
| + | echo "<td>".$row[0]." </td><br>"; | ||
| + | echo "</tr>"; | ||
| + | } | ||
| + | ?> | ||
| + | </table> | ||
| + | <style> | ||
| + | .fp { | ||
| + | padding-bottom: 50px; | ||
| + | padding-right: 80px; | ||
} | } | ||
| − | + | </style> | |
| − | + | ||
| − | + | ||
| + | |||
| + | </body> | ||
| + | </html> | ||
| + | ~ | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| + | |||
=Wie können wir so etwas Vermeiden?= | =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 | *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 | ||
Version vom 7. März 2023, 10:58 Uhr
Cross-Site-Scripting "Persistent"
Um was geht es?
Link
Eingabe Skript
Normale Verhaltensweise
Einfügen und generieren des Schadcodes
<script>alert("Hacked by Xinux")</script>
Dieses Popup Fenster geht nun auf
- Es wird auf jedem Rechner aufgehen der den generierten Link aufruft
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>
<style>
.fp {
padding-bottom: 50px;
padding-right: 80px;
}
</style>
</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
<!DOCTYPE html>
<html>
<body>
<h1>Vulnerability: Reflected Cross Site Scripting (XSS)</h1>
<form name="XSS" action="#" method="GET">
<p>
What's your name?
<input type="text" name="name">
<input type="submit" value="Submit">
==Link==
*http://opfer.secure.local/scripts/xss-reflected.php
==Eingabe Skript==
[[Datei:Cross-Site-Scripting-Reflected-11.png]]
==Normale Verhaltensweise==
[[Datei:Cross-Site-Scripting-Reflected-12.png]]
==Einfügen und generieren des Schadcodes==
<script>alert("Hacked by Xinux")</script>
[[Datei:Cross-Site-Scripting-Reflected-13.png]]
==Dieses Popup Fenster geht nun auf==
*Es wird auf jedem Rechner aufgehen der den generierten Link aufruft
[[Datei:Cross-Site-Scripting-Reflected-14.png]]
=Dieser generierter Link können wir nun an die Opfer versenden=
*http://opfer.secure.local/scripts/xss-reflected.php?name=%3Cscript%3Ealert%28%22Hacked%20by%20Xinux%22%29%3C%2Fscript%3E#
=Hier nun der Code zu diesem Beispiel=
*Bei diesem Eingabeformular wird der eingegebene Text unterhalb des Eingabefeldes wieder ausgegeben.
<syntaxhighlight lang=html>
<!DOCTYPE html>
<html>
<body>
<h1>Vulnerability: Reflected Cross Site Scripting (XSS)</h1>
<form name="XSS" action="#" method="GET">
<p>
What's your name?
<input type="text" name="name">
<input type="submit" value="Submit">
</p>
</form>
<?php
if( $_GET[ 'name' ] != NULL ) {
echo 'Hello ' . $_GET[ 'name' ] ;
}
?>
</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
<!DOCTYPE html>
<html>
<body>
<h1>Vulnerability: Reflected Cross Site Scripting (XSS)</h1>
<form name="XSS" action="#" method="GET">
<p>
What's your name?
<input type="text" name="name">
<input type="submit" value="Submit">
</p>
</form>
<?php
if( $_GET[ 'name' ] != NULL && stripos($_GET['name'], "<script") !== 0 ) {
echo 'Hello ' . $_GET[ 'name' ] ;
}
?>
</body>
</html>
</form>
<?php if( $_GET[ 'name' ] != NULL && stripos($_GET['name'], "<script") !== 0 ) { echo 'Hello ' . $_GET[ 'name' ] ; } ?>
</body> </html>
</syntaxhighlight>
</form>
<?php if( $_GET[ 'name' ] != NULL ) {
echo 'Hello ' . $_GET[ 'name' ] ;
} ?>
</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
<!DOCTYPE html>
<html>
<body>
<h1>Vulnerability: Reflected Cross Site Scripting (XSS)</h1>
<form name="XSS" action="#" method="GET">
<p>
What's your name?
<input type="text" name="name">
<input type="submit" value="Submit">
</p>
</form>
<?php
if( $_GET[ 'name' ] != NULL && stripos($_GET['name'], "<script") !== 0 ) {
echo 'Hello ' . $_GET[ 'name' ] ;
}
?>
</body>
</html>



