[Q&A] Beveiliging algemeen
Pagina: « vorige 1 2 3 volgende »
Dit is gewoon een lijst met 20 methodes. SpyTunes gebruiken om een website te hacken op nummer 2?Daarin werd gesteld dat mijn pagina lek was. Ik betist dit niet maar zoek dan wel een oplossing.
ik controleer of er een 'sn' is meegegeven? of het eventueel niet leeg is. In beide gevallen doe ik onmiddellijk een die(), niet mooi dat weet ik maar hacken is dit ook niet). Verder gebruik ik mysqli_real_escape_string.
Toch zou het dus lek zijn. Kan je me zeggen waar? Gezien de code niet zo groot is. 90 lijntjes heb ik ze er maar eens volledig op gezet:)
Jan
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<!DOCTYPE HTML>
<html lang="NL-be">
<head>
<title>
Muziek
</title>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
<META NAME="AUTHOR" CONTENT="JanR">
<LINK id="style" HREF="tbl-2clr.css" rel="stylesheet" type="text/css">
<LINK id="style" HREF="tbl-2clr.css" rel="stylesheet" type="text/css">
<!-- Contact Form CSS files -->
<link type='text/css' href='css/basic.css' rel='stylesheet' media='screen' />
<!-- Bootstrap -->
<link href="/bootstrap/css/bootstrap.min.css" rel="stylesheet" media="screen">
<script src="http://code.jquery.com/jquery.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="/bootstrap/js/bootstrap.min.js"></script>
<!-- Optionally enable responsive features in IE8. Respond.js can be obtained from https://github.com/scottjehl/Respond -->
<script src="/bootstrap/js/respond.js"></script>
</head>
<body>
<?php
include ('../php/define.php');
include ('../php/functions.php');
$con = opendatabasei();
if (isset($_GET['sn'])){
if (($_GET['sn']=='')){
die ('Titel niet opgegeven!');
}else{
$sn = mysqli_real_escape_string($con, $_GET['sn']);
$sql = 'select titel from muziek_titels where serienr="'. $sn .'";';
$result = mysqli_query($con, $sql);
if (!$result)
{
die('<br>Fout: ' . mysqli_error($con) . '<br>' . $sql);
}
while(list($titel)= mysqli_fetch_row($result))
{
echo '<h1 style="text-align:center;">' . char($titel) . '</h1>';
}
}
}
else{
die('Geen titel geselecteerd!');
}
?>
<table>
<thead>
<tr>
<th>Zijde / Disk nr</th>
<th>NR</th>
<th>Lied</th>
<th>Uitvoerder</th>
<th>Duur</th>
<th>Jaar</th>
</tr>
</thead>
<tbody>
<?php
if (isset($_GET['sn'])){
$sql = 'select Lied, Uitvoerder, Zijde_diskNR, NR, DATE_FORMAT(tijd,"%H:%i:%S") as duur, Jaar from muziek_liedjes where serienr like "'. $sn .'" order by Zijde_diskNR, nr ;';
//"%H:%i:%S" voor tijd
$result = mysqli_query($con, $sql);
if (!$result)
{
die('<br>Fout: ' . mysqli_error($con) . '<br>' . $sql);
}
while(list($Lied, $Uitvoerder, $Zijde_diskNR, $nr, $tijd, $Jaar )= mysqli_fetch_row($result))
{
echo PHP_EOL.'<tr>';
echo PHP_EOL.'<td>' . $Zijde_diskNR . '</td>';
echo PHP_EOL.'<td>' . $nr . '</td>';
echo PHP_EOL.'<td>' . htmlentities ($Lied) . '</td>';
echo PHP_EOL.'<td>' . htmlentities ($Uitvoerder) . '</td>';
echo PHP_EOL.'<td>' . $tijd . '</td>';
echo PHP_EOL.'<td>' . $Jaar . '</td>';
echo '</tr>';
}
}
?>
</tbody>
</table>
</body>
</html>
<html lang="NL-be">
<head>
<title>
Muziek
</title>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
<META NAME="AUTHOR" CONTENT="JanR">
<LINK id="style" HREF="tbl-2clr.css" rel="stylesheet" type="text/css">
<LINK id="style" HREF="tbl-2clr.css" rel="stylesheet" type="text/css">
<!-- Contact Form CSS files -->
<link type='text/css' href='css/basic.css' rel='stylesheet' media='screen' />
<!-- Bootstrap -->
<link href="/bootstrap/css/bootstrap.min.css" rel="stylesheet" media="screen">
<script src="http://code.jquery.com/jquery.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="/bootstrap/js/bootstrap.min.js"></script>
<!-- Optionally enable responsive features in IE8. Respond.js can be obtained from https://github.com/scottjehl/Respond -->
<script src="/bootstrap/js/respond.js"></script>
</head>
<body>
<?php
include ('../php/define.php');
include ('../php/functions.php');
$con = opendatabasei();
if (isset($_GET['sn'])){
if (($_GET['sn']=='')){
die ('Titel niet opgegeven!');
}else{
$sn = mysqli_real_escape_string($con, $_GET['sn']);
$sql = 'select titel from muziek_titels where serienr="'. $sn .'";';
$result = mysqli_query($con, $sql);
if (!$result)
{
die('<br>Fout: ' . mysqli_error($con) . '<br>' . $sql);
}
while(list($titel)= mysqli_fetch_row($result))
{
echo '<h1 style="text-align:center;">' . char($titel) . '</h1>';
}
}
}
else{
die('Geen titel geselecteerd!');
}
?>
<table>
<thead>
<tr>
<th>Zijde / Disk nr</th>
<th>NR</th>
<th>Lied</th>
<th>Uitvoerder</th>
<th>Duur</th>
<th>Jaar</th>
</tr>
</thead>
<tbody>
<?php
if (isset($_GET['sn'])){
$sql = 'select Lied, Uitvoerder, Zijde_diskNR, NR, DATE_FORMAT(tijd,"%H:%i:%S") as duur, Jaar from muziek_liedjes where serienr like "'. $sn .'" order by Zijde_diskNR, nr ;';
//"%H:%i:%S" voor tijd
$result = mysqli_query($con, $sql);
if (!$result)
{
die('<br>Fout: ' . mysqli_error($con) . '<br>' . $sql);
}
while(list($Lied, $Uitvoerder, $Zijde_diskNR, $nr, $tijd, $Jaar )= mysqli_fetch_row($result))
{
echo PHP_EOL.'<tr>';
echo PHP_EOL.'<td>' . $Zijde_diskNR . '</td>';
echo PHP_EOL.'<td>' . $nr . '</td>';
echo PHP_EOL.'<td>' . htmlentities ($Lied) . '</td>';
echo PHP_EOL.'<td>' . htmlentities ($Uitvoerder) . '</td>';
echo PHP_EOL.'<td>' . $tijd . '</td>';
echo PHP_EOL.'<td>' . $Jaar . '</td>';
echo '</tr>';
}
}
?>
</tbody>
</table>
</body>
</html>
Gewijzigd op 06/08/2013 09:31:13 door Jan R
Nee dat was een top 20 met meest gebruikte methodes, niet een opsomming van methodes.
Toevoeging op 06/08/2013 09:50:09:
@Jan btw: http://www.php.net/manual/en/mysqli.real-escape-string.php#46339 Zie de comments :)
Chris - op 06/08/2013 09:19:02:
...SpyTunes gebruiken om een website te hacken op nummer 2?
https://www.owasp.org/index.php/Top_10_2013-Top_10
https://www.owasp.org/index.php/Top_10_2013-Top_10
De CSS van die website is precies zelf gehackt.
Die titels komen buiten hun kot
Wat is dat nou voor opmerking? Er staat toch duidelijk achter waarvoor het dient, wordt gebruikt om muziek uit itunes uit te lezen niet om webservers te hacken.
Tevens hack je met MySQL injections ook geen webservers, een webserver is meer dan alleen SQL.
Hier wat andere links.
SQL injection op 2
Top 10 2012
SQL injection op 10
Dit zijn dus 3 extra sources die aangeven dat SQL injection niet meer op 1 staat, opwegend tegen de source van jou.
Chris - op 06/08/2013 09:39:38:
@Jan btw: http://www.php.net/manual/en/mysqli.real-escape-string.php#46339 Zie de comments :)
Als ik je goed begrijp bedoel je dus dat ik geen % of _ mag toelaten.
Op de letter hack je dus de totale tabel. Of beter in dit geval je ziet de totale tabel.
Klopt dit?
Het is voor mij in elk geval nieuw dat dit niet opgevangen wordt.
Jan
Gewijzigd op 06/08/2013 10:02:50 door Jan R
Nogmaals, ik heb het over website beveiliging. Je kunt dan moeilijk 'algemene hacking' gaan vergelijken met 'website hacking'.
Buiten dat, zie privebericht. Ik baseer het op eigen ervaring, xxx-xxxx websites waarbij SQL-injecties ruim op nummer 1 staan.
Toevoeging op 06/08/2013 10:03:41:
@Jan: Inderdaad :) Je zou kunnen kijken naar PDO en de prepared statements!
Chris NVT op 06/08/2013 09:58:25:
Dit zijn dus 3 extra sources die aangeven dat SQL injection niet meer op 1 staat, opwegend tegen de source van jou.
Boeien! Alsof het het probleem minder groot of minder erg maakt.
Kijk liever hiernaar:
Chris - op 06/08/2013 09:39:38:
@Jan btw: http://www.php.net/manual/en/mysqli.real-escape-string.php#46339 Zie de comments :)
Hier wordt tenminste info gegeven die wel interessant is, want dit is dus ook nieuw voor mij. Het gaat er dus om dat de escape functies niet de % en _ karakters escapen. Dank Chris, weer iets geleerd.
Erwin H op 06/08/2013 10:21:14:
Boeien! Alsof het het probleem minder groot of minder erg maakt.
Met het verkeerde been uit bed gestapt ofwat?
Ik zeg nergens dat het niet belangrijk is, geef alleen aan dat het niet meer op nummer 1 staat naar mijn mening. Reageer normaal anders reageer niet, blijf fatsoen houden doen we allemaal hier.
En geldt dit alleen voor queries waar LIKE wordt gebruikt?
http://stackoverflow.com/questions/3683746/escaping-mysql-wild-cards
Om eerlijk te zijn zou dat ook nieuw zijn voor mij.
Chris - op 06/08/2013 10:02:48:
Uit die laatste, "1. DDOS ATTACK – DISTRIBUTED DENIAL OF SERVICE ATTACK". Dat is niet eens hack, dat is gewoon flooden..
Nogmaals, ik heb het over website beveiliging. Je kunt dan moeilijk 'algemene hacking' gaan vergelijken met 'website hacking'.
Nogmaals, ik heb het over website beveiliging. Je kunt dan moeilijk 'algemene hacking' gaan vergelijken met 'website hacking'.
Of het nu gaat om een aanval op een database (wat niet specifiek een website is) of de webserver zelf, dat maakt geen verschil dat betekend niet dat hierdoor de website niet gehacked kan worden.
Tevens kan met man-in-the-middle net zo makkelijk data buit gemaakt worden dan met SQL injectie. Of het nu client-server methode is of direct op de SQL maakt niet uit, data wordt buitgemaakt en dit valt onder hacken.
Chris NVT op 06/08/2013 10:29:27:
Met het verkeerde been uit bed gestapt ofwat?
Ik zeg nergens dat het niet belangrijk is, geef alleen aan dat het niet meer op nummer 1 staat naar mijn mening. Reageer normaal anders reageer niet, blijf fatsoen houden doen we allemaal hier.
Erwin H op 06/08/2013 10:21:14:
Boeien! Alsof het het probleem minder groot of minder erg maakt.
Met het verkeerde been uit bed gestapt ofwat?
Ik zeg nergens dat het niet belangrijk is, geef alleen aan dat het niet meer op nummer 1 staat naar mijn mening. Reageer normaal anders reageer niet, blijf fatsoen houden doen we allemaal hier.
En wat maakt het uit of het op nummer 1 of nummer 2 staat? NIETS, want je moet je website er nog steeds tegen wapenen. Dus laten we alsjeblieft over wel interessante dingen hebben, namelijk HOE je je er tegen kunt wapenen.
Toevoeging op 06/08/2013 10:43:20:
Bart V B op 06/08/2013 10:35:21:
Misschien kan iemand me dan ook uitleggen hoe je een sql injectie maakt met % en _?
Om eerlijk te zijn zou dat ook nieuw zijn voor mij.
Om eerlijk te zijn zou dat ook nieuw zijn voor mij.
Je kan er meer gegevens door ophalen dan de bouwer had gewild. Stel je hebt een query als dit:
Nu wordt alles opgehaald wat begint met abc. Maar als jij als gebruiker nu niet abc ingeeft, maar %abc, dan wordt alles waar abc in voor komt, waar dan ook, opgehaald. Of het een hack is waar je uiteindelijk veel mee kan weet ik niet, maar het is per definitie wel een hack (omdat je het script iets anders laat doen dan de bedoeling was).
Erwin H op 06/08/2013 10:40:25:
En wat maakt het uit of het op nummer 1 of nummer 2 staat? NIETS, want je moet je website er nog steeds tegen wapenen. Dus laten we alsjeblieft over wel interessante dingen hebben, namelijk HOE je je er tegen kunt wapenen.
Dit is een Discussie over SQL injectie, en er werd aangegeven dat dit nummer 1 is. Dus we moeten ons hier dom houden en alleen focussen op SQL injectie? Had meer van je verwacht.
Nogmaals ik zeg nergens dat het niet belangrijk is, en als je mij een beetje kent weet je dat ook, dus reageer normaal of blijf stil.
Toevoeging op 06/08/2013 10:55:29:
@Chris,
Even over je bevindingen die je op hebt gedaan door de ervaring. Kun jij wat opheldering geven over de volgende punten.
- Wat voor site's waren het die gevoelig waren voor injectie (CMS systemen of zelfbouw sites)
- Wat was er niet goed aan de beveiliging (geen escapes, root access op db, etc)
- Wat voor bedrijven/personen waren het die de site's gemaakt hebben (beginners, ervaren, professionals, etc)
Thnx
Gewijzigd op 06/08/2013 10:50:28 door Chris PHP
Chris:
Dus we moeten ons hier dom houden en alleen focussen op SQL injectie?
nou, dit specifieke topic gaat in die zin wel puur over sql-injectie.. titel veranderen naar beveiliging algemeen is misschien dan wat makkelijker?
- allerlei soorten websites. van intranetten tot wordpress/joomla/drupal/e107/magento/dure pakketten. het was heel divers
- net die ene query die niet werd escaped of waarvan de validatie niet voldoende was ;-) that's all it takes..
- heel divers. ene keer beginners, andere keer professionals. een externe audit doen voor een grotere applicatie is altijd een goed idee. als je zelf je code bekijkt en je laat het door iemand anders zien, word je op andere dingen gewezen en kan je weer wat leren :)
Klopt dit stuk is specifiek voor SQL injectie, echter betekent het niet dat we de leden niet op andere punten kunnen wijzen die ook van belang zijn. Deze hoeven natuurlijk niet in dit topic besproken te worden, maar mensen op de hoogte brengen van andere methodes is niets mis mee.
Wij doen dit ook wanneer jantje met probleem X komt, en wij geven aan dat buiten dat probleem er bijvoorbeeld ook geen goede foutafhandeling in zit en/of er geen escapes plaatsvinden. Dit is omdat wij mensen hier helpen, en niet alleen kijken naar wat er gevraagd wordt.
Dank je voor de opheldering, even over de CMS systemen, is dit dan een fout in het CMS of custom code die de gebruiker er zelf in gezet heeft?
Gewijzigd op 06/08/2013 11:06:33 door Chris PHP
Beide overigens Chris, zowel in de core als in de plugins van derden. WordPress en Joomla zijn daarin twee goede en grote voorbeelden. Beide hebben bugs in de core zitten, maar de plugins zijn de echte boosdoeners.
Jan R op 06/08/2013 10:01:57:
Als ik je goed begrijp bedoel je dus dat ik geen % of _ mag toelaten.
Op de letter hack je dus de totale tabel. Of beter in dit geval je ziet de totale tabel.
Klopt dit?
Op de letter hack je dus de totale tabel. Of beter in dit geval je ziet de totale tabel.
Klopt dit?
Jan, als jouw serienummer $sn een integer is, kun je strenger zijn en uitsluitend integers toelaten.
Zet een formulier (niet al te openbaar :) ); verwerk het onbeveiligd.
Probeer eens foute dingen te doen.
Zie dat je uit eigen ervaring hebt gezien wat mogelijk is.
Want vaak klinkt SQL injection als de "grote, boze wolf", iets mysterieus, waar hackers in donkere kamertjes samenzweren om ...
Terwijl het iets is wat in wezen heel gemakkelijk te begrijpen is; het perfect kan gedemonstreerd worden met simpele voorbeelden.
Misschien zouden die mensen de bescherming tegen injection wat beter appreciëren.