Hoe beveilig je je website nou goed?

Gestart doorSmiegles31 reacties448 weergaven

32 berichten · pagina 1 van 3

Smiegles

Lid · Topicstarter

Berichten
4.912
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Hallo One2xs,

Ik ga een aantal veelgemaakte fouten uitleggen tijdens het beveiligen van websites.
  • Cross site scripting
  • Mysql injections
  • lfi & rfi
  • CSRF

1.) Cross site scripting.

Een voorbeeld van een stuk javascript code dat lek is is bijvoorbeeld :

<script>
var Website = {
    "Contact" : function() 
    {
        this.id = [COLOR= #0000BB]<?php[/COLOR] [URL="http://www.php.net/echo"]echo[/URL] [COLOR= #0000BB]$_GET[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]id[/COLOR][COLOR= #007700]];[/COLOR] ?>;
    }
}
Website.Contact();
</script>


Want ja zoals je waarschijnlijk al ziet is de $_GET niet beveiligd, een PHP programmeur zou nu denken BAM htmlentities maar nee dat klopt dus niet...

Hieronder een voorbeeld hoe je htmlentities omzeilt.

<script>
var Website = {
    "Contact" : function() 
    {
        this.id = [COLOR= #0000BB]<?php[/COLOR] [URL="http://www.php.net/echo"]echo[/URL] htmlentities[COLOR= #007700]([/COLOR][COLOR= #0000BB]$_GET[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]id[/COLOR][COLOR= #007700]]);[/COLOR] ?>;
    }
}
Website.Contact();
</script>


Als je nu naar index.php?id=1;alert(1) gaat krijg je jawel een alert met een 1!
een ander voorbeeld is bijvoorbeeld :

<input value=[COLOR= #0000BB]<?php[/COLOR] [URL="http://www.php.net/echo"]echo[/URL] htmlentities[COLOR= #007700]([/COLOR][COLOR= #0000BB]$_GET[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]id[/COLOR][COLOR= #007700]]);[/COLOR] ?>>


want htmlentities escaped alleen de double qoute, je kunt bijvoorbeeld dit doen : index.php?id=1+onclick=alert(1)

Allemaal leuk maar hoe kom je nou van die vervelende Cross site scriptings af?

hiervoor gebruik je de volgende functie

[COLOR= #0000BB]<?php[/COLOR] [URL="http://www.php.net/echo"]echo[/URL] htmlentities[COLOR= #007700]([/COLOR][COLOR= #0000BB]$_GET[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]id[/COLOR][COLOR= #007700]],[/COLOR]ENT_QUOTES[COLOR= #007700]);[/COLOR] ?>


dan worden ook de quotes escaped.

2.) Mysql injections

OOk hier is een belangrijk puntje voor SQL injections die vaak over het hoofd wordt gezien.

Voorbeeld :

mysqli_query("select * from `users` where `id` = ".$_GET[id].");


Dit is enorm lek, ik ga er niet verder op in hoe je deze injectie uitvoert maar het is beter om het maar te beveiligen.

dat doe je via mysqli_real_escape_string
maar ook hier worden fouten gemaakt :
Voorbeeld :

mysqli_query("select * from `users` where `id` = ".mysqli_real_escape_string($_GET[id]));


Hier word het einde niet afgesloten waardoor je nogsteeds bijvoorbeeld "OR sleep(1)" kunt invoegen en de database een "true" terug stuurd (heel handig bij inlog systemen)

een goede query ziet er dus zo uit :

mysqli_query("select * from `users` where `id` = ".mysqli_real_escape_string($_GET[id]).");


lfi en rfi
Lfi staat voor Local file inclusion en RFI voor Remote File inclusion

Een voorbeeld van een LFI lek is :

[COLOR= #0000BB]<?php
$page[/COLOR] [COLOR= #007700]= ([/COLOR][URL="http://www.php.net/isset"]isset[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_GET[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]p[/COLOR][COLOR= #007700]]) ?[/COLOR] [COLOR= #0000BB]$_GET[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]p[/COLOR][COLOR= #007700]] :[/COLOR] [COLOR= #DD0000]home[/COLOR][COLOR= #007700]);[/COLOR]
[URL="http://www.php.net/include"]include[/URL] [COLOR= #DD0000]pages/[/COLOR][COLOR= #007700].[/COLOR][COLOR= #0000BB]$page[/COLOR][COLOR= #007700].[/COLOR][COLOR= #DD0000].php[/COLOR][COLOR= #007700];[/COLOR]
?>


Een voorbeeld om dit te misbruiken is als je mensen hun eigen avatar laat uploaden.
dan is mijn avatar inhoud bijvoorbeeld :
[COLOR= #0000BB]<?php[/COLOR] [URL="http://www.php.net/eval"]eval[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_GET[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]a[/COLOR][COLOR= #007700]]);[/COLOR] ?>


en ga ik naar
?p=../images/smiegles.png%00

bij RFI halen mensen de hele pagina op bijvoorbeeld :?page=http://www.nu.nl/news.php?id=1
dan krijg je de inhoud van die pagina.

de LFI kun je zo beveiligen de RFI die moet je gewoon helemaal niet gebruiken.

[COLOR= #0000BB]<?php
$files[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/array"]array[/URL][COLOR= #007700]();[/COLOR]
[URL="http://www.php.net/foreach"]foreach[/URL][COLOR= #007700]([/COLOR][URL="http://www.php.net/glob"]glob[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]pages/*.*[/COLOR][COLOR= #007700]) AS[/COLOR] [COLOR= #0000BB]$file[/COLOR][COLOR= #007700]) {[/COLOR]
    [COLOR= #0000BB]$files[/COLOR][COLOR= #007700][] =[/COLOR] [COLOR= #0000BB]$file[/COLOR][COLOR= #007700];
}[/COLOR]
[COLOR= #0000BB]$page[/COLOR] [COLOR= #007700]= ([/COLOR][URL="http://www.php.net/isset"]isset[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_GET[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]p[/COLOR][COLOR= #007700]]) ?[/COLOR] [COLOR= #0000BB]$_GET[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]p[/COLOR][COLOR= #007700]] :[/COLOR] [COLOR= #DD0000]home[/COLOR][COLOR= #007700]);[/COLOR]

[URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][URL="http://www.php.net/in_array"]in_array[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$page[/COLOR][COLOR= #007700],[/COLOR][COLOR= #0000BB]$files[/COLOR][COLOR= #007700])) {[/COLOR]
[URL="http://www.php.net/include"]include[/URL] [COLOR= #DD0000]pages/[/COLOR][COLOR= #007700].[/COLOR][COLOR= #0000BB]$page[/COLOR][COLOR= #007700].[/COLOR][COLOR= #DD0000].php[/COLOR][COLOR= #007700];
}[/COLOR]


CSRF
doe ik later ik heb jeuk
0
Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Is er meer dan?
0
Smiegles

Lid · Topicstarter

Berichten
4.912
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Dylanh schreef:
Is er meer dan?
veel meer..
0
Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Smiegles schreef:
Eerdere citaten tonen
Dylanh schreef:
Is er meer dan?
veel meer..
Ik kan niet wachten.
0
Berichten
6.485
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
XSS is een veelvoorkomende fout tegenwoordig.

Ik heb laatst voor school een project over XSS gehad, heb o.a. XSS lekken gevonden in snsbank.nl, overheid.nl, wehkamp.nl, mediamarkt.nl, microsoft.com, sony.com. lg.com (nog steeds...), philipsstore.com en minstens 30 meer. Heb nog een hoop cadeaubonnen liggen hier.

Sommige XSS lekken zijn erg dan andere, bij philips werd het bijvoorbeeld bij reviews geplaats, hierdoor kon ik javascript plaatsen en zo de prijs van een product voor het oog aanpassen. Terwijl bij wehkamp het gewoon in een GET url zat. Deze vorm van reflected XSS injection is een stuk minder erg. Echter is het wel mogelijk om paginas te creeren d.m.v. javascript injectie. (hoewel Crome tegenwoordig een erg sterke beveiliging tegen reflected xss heeft)

SQLi komt ook veel voor, vaak in de vorm van blind sql injection. Bij blind SQL injection is het al een stuk lastiger om ergens binnen te komen, je kan namelijk niet d.m.v. errors de juiste tabbellen en kollommen vinden.

SQLi heeft mij nog VIP kaartjes voor soldaat van oranje opgeleverd, ik kon op het admin paneel inloggen met OR id=1;# en wachwoord leeg. De site van RTV utrecht was ook lek voor SQLi waarmee het mogelijk was om berichten op de homepage te plaatsen.

Overigens is SQL niet de enige taal die je kan injecteren, je hebt bijvoorbeeld ook XPath injection.

Let trouwens ook heel erg op met het includen van files die txt zijn en via get worden opgeroepen. Het css bestand op http://whear.net/ werd ingeladen via ?iets=style.css waar je gewoon van kon maken ?iets=../includes/db.php. Gevolg db wachtwoord e.d. allemaal gevonden.

edit: LET trouwens SOWIESO op bij het includen van files via een GET parameter.

Overigens wil ik iedereen die zelf nu een beetje gaat testen erop wijzen dat je altijd open in je communicatie moet zijn als je een lek gevonden hebt. Je moet niks eisen en ja moet ervan uitgaan dat je geen vergoeding krijgt. Dat lek bij philips was behoorlijk groot en daar kreeg ik niks voor, een veel kleinere lek bij de NCOI kreeg ik €50 bol.com voor. Als je niks verwacht ben je ook niet telleurgesteld. Overigens zijn de reacties altijd wel heel erg leuk hoor. De Bijenkorf had me een enorme bos bloemen gestuurd, en de v&d koffiebonnen voor laplace. Maar de bedankbriefjes waren veel leuker.
0
Smiegles

Lid · Topicstarter

Berichten
4.912
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Rogier schreef:
XSS is een veelvoorkomende fout tegenwoordig.

Ik heb laatst voor school een project over XSS gehad, heb o.a. XSS lekken gevonden in snsbank.nl, overheid.nl, wehkamp.nl, mediamarkt.nl, microsoft.com, sony.com. lg.com (nog steeds...), philipsstore.com en minstens 30 meer. Heb nog een hoop cadeaubonnen liggen hier.

Sommige XSS lekken zijn erg dan andere, bij philips werd het bijvoorbeeld bij reviews geplaats, hierdoor kon ik javascript plaatsen en zo de prijs van een product voor het oog aanpassen. Terwijl bij wehkamp het gewoon in een GET url zat. Deze vorm van reflected XSS injection is een stuk minder erg. Echter is het wel mogelijk om paginas te creeren d.m.v. javascript injectie. (hoewel Crome tegenwoordig een erg sterke beveiliging tegen reflected xss heeft)
SQLi komt ook veel voor, vaak in de vorm van blind sql injection. Bij blind SQL injection is het al een stuk lastiger om ergens binnen te komen, je kan namelijk niet d.m.v. errors de juiste tabbellen en kollommen vinden.

SQLi heeft mij nog VIP kaartjes voor soldaat van oranje opgeleverd, ik kon op het admin paneel inloggen met OR id=1;# en wachwoord leeg. De site van RTV utrecht was ook lek voor SQLi waarmee het mogelijk was om berichten op de homepage te plaatsen.

Overigens is SQL niet de enige taal die je kan injecteren, je hebt bijvoorbeeld ook XPath injection.

Let trouwens ook heel erg op met het includen van files die txt zijn en via get worden opgeroepen. Het css bestand op http://whear.net/ werd ingeladen via ?iets=style.css waar je gewoon van kon maken ?iets=../includes/db.php. Gevolg db wachtwoord e.d. allemaal gevonden.

edit: LET trouwens SOWIESO op bij het includen van files via een GET parameter.

Overigens wil ik iedereen die zelf nu een beetje gaat testen erop wijzen dat je altijd open in je communicatie moet zijn als je een lek gevonden hebt. Je moet niks eisen en ja moet ervan uitgaan dat je geen vergoeding krijgt. Dat lek bij philips was behoorlijk groot en daar kreeg ik niks voor, een veel kleinere lek bij de NCOI kreeg ik €50 bol.com voor. Als je niks verwacht ben je ook niet telleurgesteld. Overigens zijn de reacties altijd wel heel erg leuk hoor. De Bijenkorf had me een enorme bos bloemen gestuurd, en de v&d koffiebonnen voor laplace. Maar de bedankbriefjes waren veel leuker.

Ook wel belangrijk, je hebt ook bedrijven die de bitch uithangen en aangifte doen bij de politie..
0
Berichten
6.485
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Smiegles schreef:
Eerdere citaten tonen
Rogier schreef:
XSS is een veelvoorkomende fout tegenwoordig.
Ik heb laatst voor school een project over XSS gehad, heb o.a. XSS lekken gevonden in snsbank.nl, overheid.nl, wehkamp.nl, mediamarkt.nl, microsoft.com, sony.com. lg.com (nog steeds...), philipsstore.com en minstens 30 meer. Heb nog een hoop cadeaubonnen liggen hier.

Sommige XSS lekken zijn erg dan andere, bij philips werd het bijvoorbeeld bij reviews geplaats, hierdoor kon ik javascript plaatsen en zo de prijs van een product voor het oog aanpassen. Terwijl bij wehkamp het gewoon in een GET url zat. Deze vorm van reflected XSS injection is een stuk minder erg. Echter is het wel mogelijk om paginas te creeren d.m.v. javascript injectie. (hoewel Crome tegenwoordig een erg sterke beveiliging tegen reflected xss heeft)

SQLi komt ook veel voor, vaak in de vorm van blind sql injection. Bij blind SQL injection is het al een stuk lastiger om ergens binnen te komen, je kan namelijk niet d.m.v. errors de juiste tabbellen en kollommen vinden.

SQLi heeft mij nog VIP kaartjes voor soldaat van oranje opgeleverd, ik kon op het admin paneel inloggen met OR id=1;# en wachwoord leeg. De site van RTV utrecht was ook lek voor SQLi waarmee het mogelijk was om berichten op de homepage te plaatsen.

Overigens is SQL niet de enige taal die je kan injecteren, je hebt bijvoorbeeld ook XPath injection.

Let trouwens ook heel erg op met het includen van files die txt zijn en via get worden opgeroepen. Het css bestand op http://whear.net/ werd ingeladen via ?iets=style.css waar je gewoon van kon maken ?iets=../includes/db.php. Gevolg db wachtwoord e.d. allemaal gevonden.

edit: LET trouwens SOWIESO op bij het includen van files via een GET parameter.

Overigens wil ik iedereen die zelf nu een beetje gaat testen erop wijzen dat je altijd open in je communicatie moet zijn als je een lek gevonden hebt. Je moet niks eisen en ja moet ervan uitgaan dat je geen vergoeding krijgt. Dat lek bij philips was behoorlijk groot en daar kreeg ik niks voor, een veel kleinere lek bij de NCOI kreeg ik €50 bol.com voor. Als je niks verwacht ben je ook niet telleurgesteld. Overigens zijn de reacties altijd wel heel erg leuk hoor. De Bijenkorf had me een enorme bos bloemen gestuurd, en de v&d koffiebonnen voor laplace. Maar de bedankbriefjes waren veel leuker.

Ook wel belangrijk, je hebt ook bedrijven die de bitch uithangen en aangifte doen bij de politie..
Je moet bedrijven als wilde dieren zien, als je ze bedreigt vallen ze aan. Als je open en zorgvuldig overkomt zijn ze alleen maar blij.

Ik heb inmiddels echt meer te tellen meldingen gedaan en geen één negatieve. Van de snsbank heb ik zelfs een geschreven brief. (ja dus met een pen!)

Dus bedrijven gaan alleen de bitch uithangen als ze zich bedreigt voelen. Het is dus ook not-done om met dit soort dingen naar de media te gaan. Dan is het ook terecht dat bedrijven aangifte doen vind ik.

Overigens zijn er ook bedrijven/overheden die het niet fixen willen. Zo kan ik nog steeds paginas maken op overheid.nl dmv een XSS injectie. Dit moet je gewoon negeren, als je hier weer achteraan gaat voelt een bedrijf zich weer aangevallen.
0
Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
Smiegles schreef:
CSRF
doe ik later ik heb jeuk
Ik moest lachen biggrin
Verder een goede basis-tutorial over de veiligheid. Nu maar hopen dat het goed wordt toegepast.
0
Berichten
20.364
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Rogier schreef:
XSS is een veelvoorkomende fout tegenwoordig.

Ik heb laatst voor school een project over XSS gehad, heb o.a. XSS lekken gevonden in snsbank.nl, overheid.nl, wehkamp.nl, mediamarkt.nl, microsoft.com, sony.com. lg.com (nog steeds...), philipsstore.com en minstens 30 meer. Heb nog een hoop cadeaubonnen liggen hier.

Sommige XSS lekken zijn erg dan andere, bij philips werd het bijvoorbeeld bij reviews geplaats, hierdoor kon ik javascript plaatsen en zo de prijs van een product voor het oog aanpassen. Terwijl bij wehkamp het gewoon in een GET url zat. Deze vorm van reflected XSS injection is een stuk minder erg. Echter is het wel mogelijk om paginas te creeren d.m.v. javascript injectie. (hoewel Crome tegenwoordig een erg sterke beveiliging tegen reflected xss heeft)
SQLi komt ook veel voor, vaak in de vorm van blind sql injection. Bij blind SQL injection is het al een stuk lastiger om ergens binnen te komen, je kan namelijk niet d.m.v. errors de juiste tabbellen en kollommen vinden.

SQLi heeft mij nog VIP kaartjes voor soldaat van oranje opgeleverd, ik kon op het admin paneel inloggen met OR id=1;# en wachwoord leeg. De site van RTV utrecht was ook lek voor SQLi waarmee het mogelijk was om berichten op de homepage te plaatsen.

Overigens is SQL niet de enige taal die je kan injecteren, je hebt bijvoorbeeld ook XPath injection.

Let trouwens ook heel erg op met het includen van files die txt zijn en via get worden opgeroepen. Het css bestand op http://whear.net/ werd ingeladen via ?iets=style.css waar je gewoon van kon maken ?iets=../includes/db.php. Gevolg db wachtwoord e.d. allemaal gevonden.

edit: LET trouwens SOWIESO op bij het includen van files via een GET parameter.

Overigens wil ik iedereen die zelf nu een beetje gaat testen erop wijzen dat je altijd open in je communicatie moet zijn als je een lek gevonden hebt. Je moet niks eisen en ja moet ervan uitgaan dat je geen vergoeding krijgt. Dat lek bij philips was behoorlijk groot en daar kreeg ik niks voor, een veel kleinere lek bij de NCOI kreeg ik €50 bol.com voor. Als je niks verwacht ben je ook niet telleurgesteld. Overigens zijn de reacties altijd wel heel erg leuk hoor. De Bijenkorf had me een enorme bos bloemen gestuurd, en de v&d koffiebonnen voor laplace. Maar de bedankbriefjes waren veel leuker.

Goede uitleg Rogier smile
0
Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Word het nog afgemaakt?
0
Sam

Lid

Berichten
398
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Ik gebruik Cloudflare. Is dit ook goed of raad je dit af?
0
Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Sam schreef:
Ik gebruik Cloudflare. Is dit ook goed of raad je dit af?
Serieus? Dit noem je een offtopic bericht heeft hier dus niets mee te maken.

Maar cloudflare gebruikt one2xs ook, dus ga maar na of het goed is wink
0
Smiegles

Lid · Topicstarter

Berichten
4.912
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
ik raad cloudflare aan omdat het gebruik maakt van een CDN waardoor de snelheid van de site geoptimaliseerd word en natuurlijk omdat het aanvallen tegenhoud.

@Jellesch dit is helemaal niet offtopic dit is een hele goede vraag.
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren