1
0

first commit

This commit is contained in:
Aymeric 2018-11-03 00:03:55 +01:00
commit 2b76bd949e
13 changed files with 11242 additions and 0 deletions

1
README.md Normal file
View File

@ -0,0 +1 @@
# Netrunner

32
table.sql Normal file
View File

@ -0,0 +1,32 @@
CREATE DATABASE `ctf-zetatech-inc`
CREATE USER 'cyber-zetatech-inc'@'localhost' IDENTIFIED BY 'wY7nhg7xnzmCcJbfz3Gf89qyU5cvpr';
GRANT SELECT ON `ctf-zetatech-inc`.* TO `cyber-zetatech-inc`@`localhost`;
FLUSH PRIVILEGES;
use ctf
CREATE TABLE `access` (
`id` int NOT NULL AUTO_INCREMENT,
`user` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `access` (`user`, `password`)
VALUES (
'admin',
'e6c2d84527c9f0af9b6d6fe33fd987b6ef47360e335e71220201e72c4ac5ccf9'
);
INSERT INTO `access` (`user`, `password`)
VALUES (
'puppet-master',
'31e2d9e7ee8279341dee46986670996145a699937616fd03fe362426b5b47c25'
);

0
webroot/css/global.css Normal file
View File

675
webroot/css/term.css Normal file
View File

@ -0,0 +1,675 @@
/* Source: https://codepen.io/remsrob/pen/ZRyqNx */
@import url(https://fonts.googleapis.com/css?family=Share+Tech+Mono);
.image-replacement {
text-indent: 100%;
white-space: nowrap;
overflow: hidden
}
span.amp {
font-family: Baskerville, 'Goudy Old Style', Palatino, 'Book Antiqua', serif !important;
font-style: italic
}
body,
html {
margin: 0;
padding: 0;
height: 100%;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none
}
body {
color: #db0e15;
font-family: 'Share Tech Mono', monospace;
font-size: 26px;
font-weight: 300;
text-shadow: 0 0 5px rgba(219, 14, 21, .8);
background: url(../img/bg.png) #000;
position: relative;
height: 100vh
}
.container {
left: 0;
right: 0;
position: absolute;
top: 50%;
-webkit-transform: translate(0, -50%);
transform: translate(0, -50%)
}
.container.is-success {
-webkit-filter: hue-rotate(180deg) brightness(2.7);
filter: hue-rotate(180deg) brightness(2.7)
}
.screen::after {
content: '';
display: block;
background: url(../img/bottom.png) no-repeat center;
margin: 0 auto;
width: 100%;
max-width: 500px;
height: 28px
}
.title {
text-transform: uppercase;
text-align: center;
font-size: 1em;
font-weight: 300
}
.title::after,
.title::before {
content: '';
display: inline-block;
background: url(../img/top_outer.png);
width: 144px;
height: 20px;
margin: 0 20px
}
.container:not(.is-success) .title.is-success {
color: #22edfc
}
.box--outer {
position: relative;
margin: 0 auto;
width: 90%;
max-width: 1080px;
border-top: #000 18px solid;
border-bottom: #000 18px solid;
-o-border-image: url(../img/hor_line.png) 17 11 17 round;
border-image: url(../img/hor_line.png) 17 11 17 round
}
.box {
display: inline-block;
text-transform: uppercase;
text-align: center;
width: 100%;
max-width: 1080px
}
.box--inner {
display: inline-block;
width: calc(100% - 105px);
max-width: 1010px
}
.box--inner::after,
.box--inner::before {
content: '';
display: inline-block;
background: url(../img/box_inner.png) no-repeat center;
max-width: 642px;
width: 100%;
height: 27px
}
.content {
position: relative;
display: block;
max-height: 600px;
min-height: 400px;
height: 100%
}
.content .holder {
left: 0;
right: 0;
position: absolute;
top: 50%;
-webkit-transform: translate(0, -50%);
transform: translate(0, -50%)
}
.col.col__center,
.col.col__left {
display: inline-block
}
.col.col__left {
width: 130px
}
.col.col__center {
width: 350px;
margin-right: 130px
}
.label::after {
content: ':';
margin-left: -15px;
display: inline-block
}
#email,
#username,
#password {
border: 2px solid #d7001e;
margin: 10px 0;
padding: 10px;
width: auto;
max-width: 100%;
overflow: visible;
outline: 0;
background: 0 0;
color: inherit;
font: inherit;
line-height: normal
}
#email::-moz-selection,
#username::-moz-selection,
#password::-moz-selection {
background: #000
}
#email::selection,
#username::selection,
#password::selection {
background: #000
}
#login {
border: none;
margin: 20px;
padding: 10px 40px;
width: auto;
overflow: visible;
outline: 0;
cursor: pointer;
background: 0 0;
color: inherit;
font: inherit;
line-height: normal;
-webkit-font-smoothing: inherit;
-moz-osx-font-smoothing: inherit;
-webkit-appearance: none;
background: rgba(219, 14, 21, .2);
text-transform: uppercase;
transition: .1s;
}
#login:hover,
#login:active {
background: rgba(219, 14, 21, .25);
}
#content em {
color: #c99c31;
}
@media only screen and (max-width:1260px) {
.title::after,
.title::before {
width: 42px;
height: 18px
}
.col.col__center,
.col.col__left {
display: block;
width: auto;
margin: 0
}
.box--outer::after,
.box--outer::before {
display: none
}
.title::after,
.title::before {
margin: 0 5px
}
.content {
height: 440px
}
.box::after,
.box::before {
height: 500px
}
#login {
margin-bottom: 0
}
}
@media only screen and (max-width:600px) {
.container {
font-size: .8em
}
.title::after,
.title::before {
width: 4%;
height: 18px
}
.box--outer {
-o-border-image: url(../img/hor_line.png) 17 330 17 round;
border-image: url(../img/hor_line.png) 17 330 17 round
}
.box::after,
.box::before {
width: 22px;
background: url(ver-line-mobile.png) no-repeat center;
background-size: contain
}
.box--inner {
width: calc(100% - 44px)
}
#email,
#username,
#password {
max-width: 70%
}
.screen::after {
max-width: 180px
}
}
.flash {
-webkit-animation: flashText 1s ease-out alternate infinite;
animation: flashText 1s ease-out alternate infinite
}
@-webkit-keyframes flashText {
0% {
opacity: .3
}
100% {
opacity: 1
}
}
@keyframes flashText {
0% {
opacity: .3
}
100% {
opacity: 1
}
}
.typewriter .typewriter-line {
visibility: hidden
}
@-webkit-keyframes flicker {
0% {
opacity: .86139
}
5% {
opacity: .12793
}
10% {
opacity: .36759
}
15% {
opacity: .9766
}
20% {
opacity: .61364
}
25% {
opacity: .94477
}
30% {
opacity: .57811
}
35% {
opacity: .03416
}
40% {
opacity: .21835
}
45% {
opacity: .62054
}
50% {
opacity: .89452
}
55% {
opacity: .89997
}
60% {
opacity: .37872
}
65% {
opacity: .04929
}
70% {
opacity: .14477
}
75% {
opacity: .27512
}
80% {
opacity: .84701
}
85% {
opacity: .85952
}
90% {
opacity: .76553
}
95% {
opacity: .91372
}
100% {
opacity: .05536
}
}
@keyframes flicker {
0% {
opacity: .86139
}
5% {
opacity: .12793
}
10% {
opacity: .36759
}
15% {
opacity: .9766
}
20% {
opacity: .61364
}
25% {
opacity: .94477
}
30% {
opacity: .57811
}
35% {
opacity: .03416
}
40% {
opacity: .21835
}
45% {
opacity: .62054
}
50% {
opacity: .89452
}
55% {
opacity: .89997
}
60% {
opacity: .37872
}
65% {
opacity: .04929
}
70% {
opacity: .14477
}
75% {
opacity: .27512
}
80% {
opacity: .84701
}
85% {
opacity: .85952
}
90% {
opacity: .76553
}
95% {
opacity: .91372
}
100% {
opacity: .05536
}
}
@-webkit-keyframes steady {
from {
background: rgba(255, 230, 230, .1)
}
to {
background: rgba(49, 45, 45, .1)
}
}
@keyframes steady {
from {
background: rgba(255, 230, 230, .1)
}
to {
background: rgba(49, 45, 45, .1)
}
}
body {
position: relative;
overflow: hidden
}
body::after {
content: " ";
display: block;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
z-index: 2;
pointer-events: none;
background: rgba(49, 45, 45, .1);
opacity: 0;
pointer-events: none;
-webkit-animation: flicker .15s infinite, steady 4s;
animation: flicker .15s infinite, steady 4s
}
body.off {
background: #000
}
body.off::after {
-webkit-animation: none;
animation: none
}
@-webkit-keyframes turn-on {
0% {
-webkit-transform: scale(1, .8) translate3d(0, 0, 0);
transform: scale(1, .8) translate3d(0, 0, 0);
opacity: 1
}
5% {
-webkit-transform: scale(1.09139, 1.34235) translate3d(0, 100%, 0);
transform: scale(1.09139, 1.34235) translate3d(0, 100%, 0)
}
10% {
-webkit-transform: scale(.63084, 1.40698) translate3d(0, -100%, 0);
transform: scale(.63084, 1.40698) translate3d(0, -100%, 0)
}
15% {
-webkit-transform: scale(.75142, 1.34118) translate3d(0, 100%, 0);
transform: scale(.75142, 1.34118) translate3d(0, 100%, 0)
}
20% {
-webkit-transform: scale(.96173, 1.36858) translate3d(0, -100%, 0);
transform: scale(.96173, 1.36858) translate3d(0, -100%, 0)
}
25% {
-webkit-transform: scale(1.1348, 1.02729) translate3d(0, 100%, 0);
transform: scale(1.1348, 1.02729) translate3d(0, 100%, 0)
}
30% {
-webkit-transform: scale(.97038, .71092) translate3d(0, -100%, 0);
transform: scale(.97038, .71092) translate3d(0, -100%, 0)
}
35% {
-webkit-transform: scale(.6067, 1.31101) translate3d(0, 100%, 0);
transform: scale(.6067, 1.31101) translate3d(0, 100%, 0)
}
40% {
-webkit-transform: scale(.786, .9326) translate3d(0, -100%, 0);
transform: scale(.786, .9326) translate3d(0, -100%, 0)
}
45% {
-webkit-transform: scale(1.38602, 1.14399) translate3d(0, 100%, 0);
transform: scale(1.38602, 1.14399) translate3d(0, 100%, 0)
}
50% {
-webkit-transform: scale(.69973, .90412) translate3d(0, -100%, 0);
transform: scale(.69973, .90412) translate3d(0, -100%, 0)
}
51% {
-webkit-transform: scale(1, 1) translate3d(0, 0, 0);
transform: scale(1, 1) translate3d(0, 0, 0);
-webkit-filter: brightness(1) saturate(1);
filter: brightness(1) saturate(1);
opacity: 0
}
100% {
-webkit-transform: scale(1, 1) translate3d(0, 0, 0);
transform: scale(1, 1) translate3d(0, 0, 0);
-webkit-filter: contrast(1) brightness(1.2) saturate(1.3);
filter: contrast(1) brightness(1.2) saturate(1.3);
opacity: 1
}
}
@keyframes turn-on {
0% {
-webkit-transform: scale(1, .8) translate3d(0, 0, 0);
transform: scale(1, .8) translate3d(0, 0, 0);
opacity: 1
}
5% {
-webkit-transform: scale(1.09139, 1.34235) translate3d(0, 100%, 0);
transform: scale(1.09139, 1.34235) translate3d(0, 100%, 0)
}
10% {
-webkit-transform: scale(.63084, 1.40698) translate3d(0, -100%, 0);
transform: scale(.63084, 1.40698) translate3d(0, -100%, 0)
}
15% {
-webkit-transform: scale(.75142, 1.34118) translate3d(0, 100%, 0);
transform: scale(.75142, 1.34118) translate3d(0, 100%, 0)
}
20% {
-webkit-transform: scale(.96173, 1.36858) translate3d(0, -100%, 0);
transform: scale(.96173, 1.36858) translate3d(0, -100%, 0)
}
25% {
-webkit-transform: scale(1.1348, 1.02729) translate3d(0, 100%, 0);
transform: scale(1.1348, 1.02729) translate3d(0, 100%, 0)
}
30% {
-webkit-transform: scale(.97038, .71092) translate3d(0, -100%, 0);
transform: scale(.97038, .71092) translate3d(0, -100%, 0)
}
35% {
-webkit-transform: scale(.6067, 1.31101) translate3d(0, 100%, 0);
transform: scale(.6067, 1.31101) translate3d(0, 100%, 0)
}
40% {
-webkit-transform: scale(.786, .9326) translate3d(0, -100%, 0);
transform: scale(.786, .9326) translate3d(0, -100%, 0)
}
45% {
-webkit-transform: scale(1.38602, 1.14399) translate3d(0, 100%, 0);
transform: scale(1.38602, 1.14399) translate3d(0, 100%, 0)
}
50% {
-webkit-transform: scale(.69973, .90412) translate3d(0, -100%, 0);
transform: scale(.69973, .90412) translate3d(0, -100%, 0)
}
51% {
-webkit-transform: scale(1, 1) translate3d(0, 0, 0);
transform: scale(1, 1) translate3d(0, 0, 0);
-webkit-filter: brightness(1) saturate(1);
filter: brightness(1) saturate(1);
opacity: 0
}
100% {
-webkit-transform: scale(1, 1) translate3d(0, 0, 0);
transform: scale(1, 1) translate3d(0, 0, 0);
-webkit-filter: contrast(1) brightness(1.2) saturate(1.3);
filter: contrast(1) brightness(1.2) saturate(1.3);
opacity: 1
}
}
@-webkit-keyframes turn-off {
0% {
-webkit-transform: scale(1, 1.3) translate3d(0, 0, 0);
transform: scale(1, 1.3) translate3d(0, 0, 0);
-webkit-filter: brightness(1);
filter: brightness(1);
opacity: 1
}
60% {
-webkit-transform: scale(1.3, .001) translate3d(0, 0, 0);
transform: scale(1.3, .001) translate3d(0, 0, 0);
-webkit-filter: brightness(10);
filter: brightness(10)
}
100% {
-webkit-animation-timing-function: cubic-bezier(.755, .05, .855, .06);
animation-timing-function: cubic-bezier(.755, .05, .855, .06);
-webkit-transform: scale(0, .0001) translate3d(0, 0, 0);
transform: scale(0, .0001) translate3d(0, 0, 0);
-webkit-filter: brightness(50);
filter: brightness(50)
}
}
@keyframes turn-off {
0% {
-webkit-transform: scale(1, 1.3) translate3d(0, 0, 0);
transform: scale(1, 1.3) translate3d(0, 0, 0);
-webkit-filter: brightness(1);
filter: brightness(1);
opacity: 1
}
60% {
-webkit-transform: scale(1.3, .001) translate3d(0, 0, 0);
transform: scale(1.3, .001) translate3d(0, 0, 0);
-webkit-filter: brightness(10);
filter: brightness(10)
}
100% {
-webkit-animation-timing-function: cubic-bezier(.755, .05, .855, .06);
animation-timing-function: cubic-bezier(.755, .05, .855, .06);
-webkit-transform: scale(0, .0001) translate3d(0, 0, 0);
transform: scale(0, .0001) translate3d(0, 0, 0);
-webkit-filter: brightness(50);
filter: brightness(50)
}
}
.screen {
width: 100%;
height: 100%;
border: none
}
.container.off>.screen {
-webkit-animation: turn-off .55s cubic-bezier(.23, 1, .32, 1);
animation: turn-off .55s cubic-bezier(.23, 1, .32, 1);
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards
}
.container.on>.screen {
-webkit-animation: turn-on 2s linear;
animation: turn-on 2s linear;
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards
}

BIN
webroot/img/bg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 961 B

BIN
webroot/img/bottom.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
webroot/img/box_inner.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

BIN
webroot/img/hor_line.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
webroot/img/top_outer.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 928 B

62
webroot/index.html Normal file
View File

@ -0,0 +1,62 @@
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Zetatech — Connection</title>
<link rel="stylesheet" type="text/css" href="css/term.css">
<script src="js/jquery.js"></script>
<script src="js/login.js" type="text/javascript"></script>
</head>
<body class="">
<div class="container on">
<div class="screen">
<h3 class="title">
CONNECTION ESTABLISHED
</h3>
<div class="box--outer">
<div class="box">
<div class="box--inner">
<div class="content">
<div class="holder" id="content">
<b>Welcome to Zetatech cybernetic prosthetics management interface.</b><br>
Please enter your credentials.
<br>
<br>
<div class="row">
<div class="col col__left label">
Login
</div>
<div class="col col__center">
<input type="text" id="username" maxlength="32" value="">
</div>
</div>
<form method="post" action=".">
<div class="row">
<div class="col col__left label">
Password
</div>
<div class="col col__center">
<input type="password" id="password" name="password" required="required" placeholder="" data-error="" maxlength="32" autocomplete="new-password"
autofocus="true" />
</div>
</div>
<b class="flash" id="error">ACCESS DENIED</b>
<div class="row">
<button type="submit" id="login" name="login" value="Login">[login]</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

10364
webroot/js/jquery.js vendored Normal file

File diff suppressed because it is too large Load Diff

36
webroot/js/login.js Normal file
View File

@ -0,0 +1,36 @@
$(document).ready(function(){
$("#error").css('display', 'inline', 'important');
$("#error").html("<br>");
$("#login").click(function(){
username=$("#username").val();
password=$("#password").val();
$.ajax({
type: "POST",
url: "login.php",
data: "username="+username+"&password="+password+"&login=Login",
success: function(response) {
var answer = JSON.parse(response);
if(answer.return == 'true') {
$("#content").html(answer.string);
}
else {
$("#error").html(answer.string);
}
},
beforeSend: function() {
$("#error").html("Loading...");
},
error: function() {
$("#error").html("Error");
}
});
return false;
});
});

72
webroot/login.php Normal file
View File

@ -0,0 +1,72 @@
<?php
if (isset($_POST['login']) && $_POST['login'] == 'Login') {
if ( isset($_POST['username']) && !empty($_POST['username']) ) {
if ( isset($_POST['password']) && !empty($_POST['password']) ) {
$bdd = new mysqli("localhost", "cyber-zetatech-inc", "wY7nhg7xnzmCcJbfz3Gf89qyU5cvpr", "ctf-zetatech-inc");
if ($bdd->connect_errno) {
//echo "Echec lors de la connexion à MySQL : (" . $bdd->connect_errno . ") " . $bdd->connect_error;
$state->return = 'error';
$state->string = 'Connection error';
$state_json = json_encode($state);
echo $state_json;
}
$real_user = "puppet-master";
$user = $_POST['username'];
$pass = hash("sha256", $_POST['password']);
$sql = "SELECT user,password FROM access WHERE user='".$user."' AND password='".$pass."'";
//$sql = "SELECT user,password FROM access WHERE user='admin' OR 1=1 LIMIT 1 OFFSET 1";// AND password='".$pass."'";;
// curl -X POST http://localhost/netrunner/login.php -d "password=admiefn&login=Login&username=admin' OR 1 LIMIT 1 OFFSET 1 #"
//echo "\n";
//echo $sql;
//echo "\n\n";
$res = mysqli_query($bdd, $sql);
$num_row = mysqli_num_rows($res);
$row=mysqli_fetch_assoc($res);
//print_r($row);
if ($_POST['username'] === "admin") {
$state->return = 'false';
$state->string = 'admin is desactivated. Use your login.';
} elseif ( $num_row == 1 && $row['user'] === $real_user) {
$state->return = 'true';
$html_login = "<b>Welcome to your admin board <em>".$row['user']."</em></b> <br> <br>
An error occurred while connecting to your implant <br> [Zetatech Neural Processor MK.II].
<br> <br>
Please approach a Zetatech center for an analysis.
<br> <br>
IMTLD{w3b_1nT3rf4ceS_4r3_3v1L}";
$state->string = $html_login;
} else {
$state->return = 'false';
$state->string = 'Access Denied';
}
} else {
$state->return = 'password';
$state->string = 'Password Missing';
}
}
else {
$state->return = 'username';
$state->string = 'Username Missing';
}
$state_json = json_encode($state);
echo $state_json;
} else { // DEBUG
$state->return = 'form';
$state->string = 'Submit form';
$state_json = json_encode($state);
echo $state_json;
}