Merge branch 'xss'

Paul Wagener 11 years ago
commit cd0c233db6
  1. 63
      bank/index_xss.php
  2. 52
      bank/message.php
  3. 19
      build-vm/database.sql
  4. 6
      index.php
  5. 6
      nieuws/admincheck.js
  6. 57
      nieuws/admincheck.php
  7. 105
      nieuws/index.php
  8. 41
      nieuws/login.php
  9. 9
      nieuws/reset.php
  10. 122
      themes/css/nieuws.css
  11. BIN
      themes/images/nieuws.png
  12. BIN
      themes/images/school.jpg
  13. 61
      webshop/image_zoom escapehtml.php
  14. 61
      webshop/image_zoom.php
  15. 2
      webshop/product_detail.php

@ -0,0 +1,63 @@
<?php
if($_POST) {
header('Location: /bank/message.php?m=Wegens recente hack pogingen is de inlogpagina tijdelijk uitgeschakeld.');
return;
}
?><html lang="en">
<head>
<meta charset="utf-8">
<title>Poespas Bank</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="Paul Wagener">
<link id="callCss" rel="stylesheet" href="/themes/bank/bank.css" media="screen"/>
<link id="callCss" rel="stylesheet" href="/themes/css/bootstrap.min.css" media="screen"/>
<link href="/themes/css/bootstrap-responsive.min.css" rel="stylesheet"/>
</head>
<!-- De code in dit bestand is met opzet slecht en zeer onveilig opgezet.
GEBRUIK DEZE CODE NIET als referentiemateriaal voor je eigen PHP projecten! -->
<body>
<div id="header">
<div class="container">
<!-- Navbar ================================================== -->
<div id="logoArea" class="navbar">
<a class="brand" href="/bank"><img src="/themes/images/poespas.png" title="De bank die u kunt vertrouwen"></a>
</div>
</div>
</div>
<!-- Header End====================================================================== -->
<div id="mainBody">
<div class="container">
<div class="row">
<p>Welkom bij de Poespas Bank. De bank die u kunt vertrouwen.</p>
<p>Vul alleen uw gegevens in als u zeker weet dat u zich op de echte Poespas site bevind. </p>
<hr />
<div class="span4 signin-container">
<form class="form-signin" method="POST">
<h3 class="form-signin-heading">Inloggen Mijn Poespas</h3>
<input type="text" name="gebruikersnaam" class="input-block-level" placeholder="Gebruikersnaam">
<input type="text" name="wachtwoord" class="input-block-level" placeholder="Wachtwoord">
<button class="btn btn-primary" type="submit">Inloggen</button>
</form>
</div>
<hr class="soft"/>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- MainBody End ============================= -->
</body>
</html>

@ -0,0 +1,52 @@
<?php header('X-XSS-Protection: 0'); // Disable XSS protection in modern browsers to allow the exercises to work?><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Poespas Bank</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="Paul Wagener">
<link id="callCss" rel="stylesheet" href="/themes/bank/bank.css" media="screen"/>
<link id="callCss" rel="stylesheet" href="/themes/css/bootstrap.min.css" media="screen"/>
<link href="/themes/css/bootstrap-responsive.min.css" rel="stylesheet"/>
</head>
<!-- De code in dit bestand is met opzet slecht en zeer onveilig opgezet.
GEBRUIK DEZE CODE NIET als referentiemateriaal voor je eigen PHP projecten! -->
<body>
<div id="header">
<div class="container">
<!-- Navbar ================================================== -->
<div id="logoArea" class="navbar">
<a class="brand" href="/bank"><img src="/themes/images/poespas.png" title="De bank die u kunt vertrouwen"></a>
</div>
</div>
</div>
<!-- Header End====================================================================== -->
<div id="mainBody">
<div class="container">
<div class="row">
<hr />
<div class="alert alert-info">
<?php
echo $_GET['m'];
?>
</div>
</ul>
<hr class="soft"/>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- MainBody End ============================= -->
</body>
</html>

@ -1,4 +1,4 @@
-- Don't look here for answers you cheater. -- Don't look here for answers you cheater.
-- Go out there and actually hack those sites! -- Go out there and actually hack those sites!
@ -26,6 +26,7 @@ END ;$$
DELIMITER ; DELIMITER ;
CALL `temp`.`drop_user_if_exists`('webshop') ; CALL `temp`.`drop_user_if_exists`('webshop') ;
CALL `temp`.`drop_user_if_exists`('bank') ; CALL `temp`.`drop_user_if_exists`('bank') ;
CALL `temp`.`drop_user_if_exists`('nieuws') ;
DROP DATABASE temp; DROP DATABASE temp;
CREATE USER 'webshop'@'localhost' IDENTIFIED BY 'pass'; CREATE USER 'webshop'@'localhost' IDENTIFIED BY 'pass';
@ -86,3 +87,19 @@ INSERT INTO `gebruikers` (`gebruikersnaam`, `wachtwoord`, `balans`) VALUES
('Bob', '123456', 10.00), ('Bob', '123456', 10.00),
('Carol', 'cuteasabuttonintheeyes', 42.00); ('Carol', 'cuteasabuttonintheeyes', 42.00);
CREATE USER 'nieuws'@'localhost' IDENTIFIED BY 'pass';
GRANT ALL PRIVILEGES ON `nieuws`.* TO 'nieuws'@'localhost';
DROP DATABASE IF EXISTS nieuws;
CREATE DATABASE nieuws;
USE nieuws;
CREATE TABLE `commentaar` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`auteur` varchar(255) NOT NULL,
`bericht` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
INSERT INTO `commentaar` (`id`, `auteur`, `bericht`) VALUES
(1, 'Paul', 'Hoera!');

@ -1,10 +1,10 @@
De virtuele machine werkt! Lees de opgave om te beginnen met hacken. De virtuele machine werkt! Lees de opgave om te beginnen met hacken.
<h1>SQL Injection</h1>
<h2><a href="/bank/">Bank</a></h2> <h2><a href="/bank/">Bank</a></h2>
<a href="/bank/index_multi.php">Bank (multi_query)</a> <a href="/bank/index_multi.php">Bank (multi_query)</a><br />
<a href="/bank/index_xss.php">Bank (xss)</a>
<h2><a href="/webshop/">Webshop</a></h2> <h2><a href="/webshop/">Webshop</a></h2>
<a href="/webshop/product_detail_replace.php?id=1">Webshop (replace)</a> <a href="/webshop/product_detail_replace.php?id=1">Webshop (replace)</a>
<h2><a href="/nieuws/">Nieuws</a></h2>

@ -0,0 +1,6 @@
var page = require('webpage').create();
page.open('http://localhost/nieuws/', 'post', 'email=admin@nieuws.nl&password=sesame', function() {
setTimeout(function(){
phantom.exit();
}, 1000);
});

@ -0,0 +1,57 @@
<?php
header('X-XSS-Protection: 0');
session_start();
// Check if admin logged in
if(@$_POST['email'] == 'admin@nieuws.nl' && @$_POST['password'] == 'sesame') {
$_SESSION['admin'] = true;
}
$connection = new mysqli('localhost', 'nieuws', 'pass', 'nieuws')
or die('Kan geen verbinding maken met MySQL');
// Add a comment
if(isset($_POST['addcomment'])) {
$connection->query("INSERT INTO commentaar SET auteur='anoniem', bericht='".$connection->real_escape_string($_POST['comment'])."'");
}
?><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>NIEUWS.nl</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="Paul Wagener">
<link id="callCss" rel="stylesheet" href="/themes/css/bootstrap.min.css" media="screen"/>
<link href="/themes/css/bootstrap-responsive.min.css" rel="stylesheet"/>
<link rel="stylesheet" href="/themes/css/nieuws.css" media="screen"/>
<!-- De code in dit bestand is met opzet slecht en zeer onveilig opgezet.
GEBRUIK DEZE CODE NIET als referentiemateriaal voor je eigen PHP projecten! -->
</head>
<body>
<img src="/themes/images/nieuws.png" id="logo">
<section id="middle">
<div id="datum"><?php setlocale(LC_ALL, 'nl_NL'); echo strftime("%A %e %B %Y"); ?>. Het laatste nieuws het eerst op NIEUWS.nl</div>
<div id="admincheck">
<?php
if($_POST) {
shell_exec('phantomjs admincheck.js');
echo '<div class="alert alert-warning">De administrator heeft op '.date('r').' een kijkje op de reactie pagina genomen</div>';
}
?>
Problemen met de website? Laat het de administrator weten en hij komt een kijkje nemen op de <a href="/nieuws/">reactie pagina</a>.
<form method="POST">
<button type="submit" name="submit" class="btn btn-primary">Stuur <?php if($_POST)echo 'nog';?> een berichtje naar de administrator</button>
</form>
</div>
</section>
</body>
</html>

@ -0,0 +1,105 @@
<?php
header('X-XSS-Protection: 0');
session_start();
// Check if admin logged in
if(@$_POST['email'] == 'admin@nieuws.nl' && @$_POST['password'] == 'sesame') {
$_SESSION['admin'] = true;
}
$connection = new mysqli('localhost', 'nieuws', 'pass', 'nieuws')
or die('Kan geen verbinding maken met MySQL');
// Add a comment
if(isset($_POST['addcomment'])) {
$connection->query("INSERT INTO commentaar SET auteur='anoniem', bericht='".$connection->real_escape_string($_POST['comment'])."'");
}
?><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>NIEUWS.nl</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="Paul Wagener">
<link id="callCss" rel="stylesheet" href="/themes/css/bootstrap.min.css" media="screen"/>
<link href="/themes/css/bootstrap-responsive.min.css" rel="stylesheet"/>
<link rel="stylesheet" href="/themes/css/nieuws.css" media="screen"/>
<!-- De code in dit bestand is met opzet slecht en zeer onveilig opgezet.
GEBRUIK DEZE CODE NIET als referentiemateriaal voor je eigen PHP projecten! -->
</head>
<body>
<img src="/themes/images/nieuws.png" id="logo">
<section id="middle">
<div id="datum"><?php setlocale(LC_ALL, 'nl_NL'); echo strftime("%A %e %B %Y"); ?>. Het laatste nieuws het eerst op NIEUWS.nl</div>
<?php
if(@$_SESSION['admin']) {
?>
<div class="alert alert-warning">
Welkom terug administrator! De geheime code is: "Setec Astronomy".
</div>
<?php }?>
<div id="category">Algemeen / Binnenland</div>
<article>
<div id="published">Gepubliceerd: 23 oktober 2012 06:35</div>
<div id="update">Laatste update: 23 oktober 2012 06:35</div>
<h1>Avans opnieuw beste hogeschool</h1>
<h2 class="summary">LEIDEN - Hogeschool Avans in Noord-Brabant is opnieuw de beste grote hbo-instelling van Nederland.</h2>
<img width="132" height="132" src="/themes/images/school.jpg" alt="">
<p>Dat staat in de dinsdag verschenen <a target="_blank" href="http://www.keuzegids.org/hbovoltijd">Keuzegids Hbo Voltijd 2013</a>. Deze gids vergelijkt hogescholen op basis van statistieken over studiesucces, oordeel van deskundigen uit de accreditatie en het oordeel van studenten.</p>
<p>Avans krijgt 71 punten, evenveel als vorig jaar. Ook de nummer 2 is onveranderd: Hogeschool Zeeland in Vlissingen. De NHTV in Breda is de nieuwe nummer 3. Hogeschool InHolland is net als vorig jaar de hekkensluiter van de lijst met 51 punten.</p>
<p>Bij de middelgrote hogescholen met gemiddeld ongeveer 2000 studenten moet de Christelijke Hogeschool Ede (81 punten) voor het eerst in jaren de bovenste plaats afstaan aan een ander.</p>
<p>De Gereformeerde Hogeschool uit Zwolle wordt met 85,5 punten beter beoordeeld. De Hotelschool Den Haag is een opvallende stijger, mede door een bijzonder gunstig deskundigenoordeel klommen zij van de tiende naar de vijfde plaats.</p><p>De hoogste scores zijn nog steeds te vinden bij de kleinste scholen. De Katholieke Pabo Zwolle en het IVA in Driebergen voeren al jaren de ranglijst aan met respectievelijk 92 en 88 punten. In de Keuzegids staat dat dat met name te danken is aan het feit dat zij slechts één hbo-opleiding aanbieden, die ook nog eens uitstekend verzorgd is. ''Eigen identiteit en - daardoor - een sterke binding met de studenten zijn belangrijke troeven",' zo valt te lezen in de gids.</p>
<span class="smallprint">Door:&nbsp;ANP</span>
</article>
<div id="comments">
<strong>Jouw reactie:</strong>
<form method="POST">
<textarea name="comment"></textarea><br />
<button type="submit" name="addcomment">Reageer op dit bericht</button>
</form>
<?php
$result = $connection->query("SELECT * FROM commentaar ORDER BY id DESC")
or die('Query error: ' . $connection->error);
while ($row = $result->fetch_array()) {
?>
<div class="comment">
<div class="comment-header">
door <span class="author"><?php echo $row['auteur']; ?></span>
</div>
<p><?php echo $row['bericht']; ?></p>
</div>
<?php
}
$connection->close();
?>
</div>
<hr>
<div id="admincheck">
<a href="admincheck.php">Meld een probleem met deze website</a>
</div>
</section>
</body>
</html>

@ -0,0 +1,41 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>NIEUWS.nl</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="Paul Wagener">
<link id="callCss" rel="stylesheet" href="/themes/css/bootstrap.min.css" media="screen"/>
<link href="/themes/css/bootstrap-responsive.min.css" rel="stylesheet"/>
<link rel="stylesheet" href="/themes/css/nieuws.css" media="screen"/>
<!-- De code in dit bestand is met opzet slecht en zeer onveilig opgezet.
GEBRUIK DEZE CODE NIET als referentiemateriaal voor je eigen PHP projecten! -->
<style>
input {
margin-bottom: 5px;
width: 50% !important;
}
</style>
</head>
<body>
<img src="/themes/images/nieuws.png" id="logo">
<section id="middle">
<div id="datum"><?php setlocale(LC_ALL, 'nl_NL'); echo strftime("%A %e %B %Y"); ?>. Het laatste nieuws het eerst op NIEUWS.nl</div>
<form method="POST" action="index.php" class="form-signin">
<input name="email" class="input-block-level" placeholder="E-mail adres">
<input name="password" type="pasword" class="input-block-level" placeholder="Wachtwoord">
<button type="submit" class="btn btn-primary">Inloggen</button>
</form>
</section>
</body>
</html>

@ -0,0 +1,9 @@
<?php
$connection = new mysqli('localhost', 'nieuws', 'pass', 'nieuws')
or die('Kan geen verbinding maken met MySQL');
$connection->query("TRUNCATE commentaar");
?>
Alle reacties weggehaald.

@ -0,0 +1,122 @@
body {
font-family: Arial,helvetica,sans-serif;
}
img {
float: left;
}
img#logo {
margin: 30px;
}
article img {
margin-right: 15px;
}
section#middle {
float: left;
width: 600px;
}
#datum {
height: 30px;
font-size: 11px;
line-height: 28px;
color: #05054c;
border-top: 1px dotted black;
border-bottom: 1px dotted black;
margin-bottom: 10px;
margin-top: 20px;
}
#category {
height: 24px;
line-height: 24px;
color: white;
font-size: 15px;
font-weight: bold;
padding-left: 5px;
background-image: -webkit-gradient(
linear,
left top,
left bottom,
color-stop(0, #98C4E5),
color-stop(1, #7AA2C1)
);
background-image: -o-linear-gradient(bottom, #98C4E5 0%, #7AA2C1 100%);
background-image: -moz-linear-gradient(bottom, #98C4E5 0%, #7AA2C1 100%);
background-image: -webkit-linear-gradient(bottom, #98C4E5 0%, #7AA2C1 100%);
background-image: -ms-linear-gradient(bottom, #98C4E5 0%, #7AA2C1 100%);
background-image: linear-gradient(to bottom, #98C4E5 0%, #7AA2C1 100%);
}
textarea {
width: 60%;
height: 100px;
}
article {
background-color: #eaf0fa;
margin-top: 5px;
padding: 5px;
margin-bottom: 20px;
}
#published, #update {
color: #445774;
line-height: 1.5em;
font-size: 10px;
}
h1 {
font-size: 30px;
color: #020051;
margin-bottom: 8px;
}
h2.summary {
font-size: 13px;
line-height: 18px;
color: rgb(68, 87, 117);
}
p {
color: rgb(2, 0, 81);
font-size: 13px;
line-height: 18px;
padding-bottom: 10px;
}
a {
color: rgb(2, 0, 81);
text-decoration: underline;
}
.comment {
border: 1px solid rgb(217, 226, 240);
margin-bottom: 10px;
}
.comment-header {
background-color: rgb(217, 226, 240);
color: rgb(71, 91, 117);
font-size: 11px;
padding: 2px;
padding-left: 20px;
}
.comment-header .author {
color: rgb(57, 73, 95);
font-weight: bold;
}
.comment p {
margin: 0;
padding: 10px;
}
#admincheck {
margin-top: 20px;
margin-bottom: 30px;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

@ -0,0 +1,61 @@
<?php
header('X-XSS-Protection: 0'); // Disable XSS protection in modern browsers to allow the exercises to work
setcookie('session', md5('123456'));
?><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Lekkende Kranen Empirium</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="Paul Wagener">
<link id="callCss" rel="stylesheet" href="/themes/bootshop/bootstrap.min.css" media="screen"/>
<link href="/themes/css/base.css" rel="stylesheet" media="screen"/>
<link href="/themes/css/bootstrap-responsive.min.css" rel="stylesheet"/>
<link href="/themes/css/font-awesome.css" rel="stylesheet" type="text/css">
<!-- De code in dit bestand is met opzet slecht en zeer onveilig opgezet.
GEBRUIK DEZE CODE NIET als referentiemateriaal voor je eigen PHP projecten! -->
</head>
<body>
<div id="header">
<div class="container">
<div id="welcomeLine" class="row">
</div>
<!-- Navbar ================================================== -->
<div id="logoArea" class="navbar">
<a id="smallScreen" data-target="#topMenu" data-toggle="collapse" class="btn btn-navbar">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<div class="navbar-inner">
<a class="brand" href="/webshop"><img src="/themes/images/logo.png" alt="Leaky's Kranen Emporium"/></a>
<form class="form-inline navbar-search" method="post" action="products.html" >
</form>
<ul id="topMenu" class="nav pull-right">
</ul>
</div>
</div>
</div>
</div>
<!-- Header End====================================================================== -->
<div id="mainBody">
<div class="container">
<div class="row">
<div class="span12">
<img src='/themes/images/products/<?php echo htmlspecialchars($_GET['image']) ?>' style="width:50%; margin: 0 auto;"/>
</div>
</div>
<!-- MainBody End ============================= -->
</body>
</html>

@ -0,0 +1,61 @@
<?php
header('X-XSS-Protection: 0'); // Disable XSS protection in modern browsers to allow the exercises to work
session_start(); // Start a fake session
?><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Lekkende Kranen Empirium</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="Paul Wagener">
<link id="callCss" rel="stylesheet" href="/themes/bootshop/bootstrap.min.css" media="screen"/>
<link href="/themes/css/base.css" rel="stylesheet" media="screen"/>
<link href="/themes/css/bootstrap-responsive.min.css" rel="stylesheet"/>
<link href="/themes/css/font-awesome.css" rel="stylesheet" type="text/css">
<!-- De code in dit bestand is met opzet slecht en zeer onveilig opgezet.
GEBRUIK DEZE CODE NIET als referentiemateriaal voor je eigen PHP projecten! -->
</head>
<body>
<div id="header">
<div class="container">
<div id="welcomeLine" class="row">
</div>
<!-- Navbar ================================================== -->
<div id="logoArea" class="navbar">
<a id="smallScreen" data-target="#topMenu" data-toggle="collapse" class="btn btn-navbar">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<div class="navbar-inner">
<a class="brand" href="/webshop"><img src="/themes/images/logo.png" alt="Leaky's Kranen Emporium"/></a>
<form class="form-inline navbar-search" method="post" action="products.html" >
</form>
<ul id="topMenu" class="nav pull-right">
</ul>
</div>
</div>
</div>
</div>
<!-- Header End====================================================================== -->
<div id="mainBody">
<div class="container">
<div class="row">
<div class="span12">
<img src="/themes/images/products/<?php echo $_GET['image'] ?>" style="width:50%; margin: 0 auto;"/>
</div>
</div>
<!-- MainBody End ============================= -->
</body>
</html>

@ -72,7 +72,9 @@ $connection->close();
<div class="row"> <div class="row">
<div id="gallery" class="span3"> <div id="gallery" class="span3">
<a href="/webshop/image_zoom.php?image=<?php echo $row['afbeelding'] ?>">
<img src="/themes/images/products/<?php echo $row['afbeelding'] ?>" style="width:100%"/> <img src="/themes/images/products/<?php echo $row['afbeelding'] ?>" style="width:100%"/>
</a>
</div> </div>
<div class="span6"> <div class="span6">
<h3><?php echo $row['naam'] ?></h3> <h3><?php echo $row['naam'] ?></h3>

Loading…
Cancel
Save