Hoofdcategorieën

Nieuwe reactie in topic: [Forumgame] Vind de kwetsbaarheid!

Let op:
  • Reageer ontopic, plaats geen onzinnige berichten en ga niet flamen of uitlokken (trollen).
  • Zie je iets dat niet door de beugel kan, attendeer dan een moderator via een topicreport maar post hierover niet in het topic, dat werkt alleen averechts. Zie ook de policy die wij op dit forum hanteren.
  • Lees je eigen bericht even door voor je het post.

Insert message
 

Let op! Het laatste bericht in deze discussie is meer dan 2 weken oud!

 

Smilies: :) :( ;) >:) :> :P :9 :o :*) :'( 8) :+ :D _/-\o_ :9~ O+ :O }:O :/ :| :X :? 8)7 |:( O-) :z ;( meer »

Page navigation

Laatste reacties:

 
quote:
ChessSpider schreef op woensdag 21 mei 2008 @ 11:16:
[...]
Je snapt dat dit net zo goed geld als voor POST he? Je moet GET hetzelfde beschouwen als POST wat het je applicatie betreft. Cookie gegevens beveilig je toch ook goed?
Inderdaad, op zich maakt het niet veel verschil al zal een simpele eindgebruiker eerder geneigd zijn om op die manier dingen aan je request te wijzigen dan een POST te spoofen. Uiteraard moet er nog altijd geverifieerd worden of deze user input toegelaten is op de server.

Wat ik dan soms ook nog wel eens tegen durf komen is dat ontwikkelaars dergelijke ID's gaan encoderen tot iets onleesbaars.. maar uiteindelijk blijf je dan nog altijd met hetzelfde probleem zitten.
 
 
quote:
YopY schreef op woensdag 21 mei 2008 @ 11:13:
[...]


Bbbbbaaaaahhhh, al die ifs zijn ten eerste redundant en ten tweede kunnen ze gecombineerd worden. Wat is er mis met

[...]
Klopt helemaal. :)
Helaas programmeer ik op m'n werk ook andere programmeertalen waarbij de compiler de variabelen in een if-statement soms van plaats wisselt zodat controles in een andere volgorde langs komen dan je eigenlijk wil.

In de regel if ( isset($Donation) && is_numeric($Donation) && is_int(intval($Donation)) && ( $Donation <= $AccountThisUser ))
wordt dan bijvoorbeeld eerst van $Donation een nummeric getal gemaakt, en daarna gaat hij kijken of $Donation is geset.

Om verwarring en dit soort fouten te voorkomen werk ik daarom eigenlijk altijd met losse if-statements. :Y)


Zoals ik de reacties zo lees zit er, zoals ik al had verwacht, geen veiligheidsverschillen tussen POST en GET. Afhankelijk van de toepassing wordt voor een GET of juist voor een POST gekozen, en voor mijn codevoorbeeld had ik daarom een GET gekozen omdat je dan gemakkelijk het resultaat kan testen. :)
 
 
quote:
Onbekend schreef op woensdag 21 mei 2008 @ 23:09:
Helaas programmeer ik op m'n werk ook andere programmeertalen waarbij de compiler de variabelen in een if-statement soms van plaats wisselt zodat controles in een andere volgorde langs komen dan je eigenlijk wil.
Mijn god :X Welke programmeertaal is dat?
 
 
Voor id's gebruik ik (in PHP) altijd ctype_digit(), wat volgens mij echt garandeert dat je alleen maar numerieke tekens in je ID hebt.
 
 
Waarom alles in PHP? :r :X
 
 
quote:
Omdat PHP zo is ontwikkeld dat het ontzettend veel toelaat, het is ontzettend makkelijk om er mee te werken. Het nadeel daarvan is dus dat er veel exploits mogelijk zijn.
 
 
quote:
Doe er wat aan zou ik zeggen ;) .oisyn heeft ook al een C++ voorbeeld gepost.
 
 

code:
1
2
3
:start
echo %1
goto start

geen php ;)

En inderdaad interessant topic :)
 
 
Waar zit de kwestbaarheid, en wat is het doel van het script? Voor de goede orde, het gaat hier om normale applicaties die fouten in hun code hebben die uitgebuit kunnen worden door 'hackers' om zo dingen te doen die eigenlijk niet zouden mogen (zoals een systeem overnemen, gegevens opvragen die ze niet zouden mogen opvragen, etc.).

Jouw script doet niets anders dan in een oneindige loop dezelfde regel uitvoeren. Hoe kan dat uitgebuit worden?
 
 
quote:
Onbekend schreef op woensdag 21 mei 2008 @ 23:09:
[...]
is_int(intval($Donation))
Dit returned toch altijd true? wat de inhoud van $Donation ook is.
quote:
Onbekend schreef op woensdag 21 mei 2008 @ 23:09:
[...]
In de regel if ( isset($Donation) && is_numeric($Donation) && is_int(intval($Donation)) && ( $Donation <= $AccountThisUser ))
wordt dan bijvoorbeeld eerst van $Donation een nummeric getal gemaakt, en daarna gaat hij kijken of $Donation is geset.
Maar $Donation word toch helemaal geen numeric getal gemaakt? Ik zie nergens dat $Donation geset word en in de documentatie zie ik ook niet staan dat de functie iets aan de waarde veranderd die je meegeeft. Dus IMHO zou de volgorde van uitvoeren hier niet zoveel uitmoeten halen.
 
 
quote:
.oisyn schreef op donderdag 22 mei 2008 @ 13:48:
Waar zit de kwestbaarheid, en wat is het doel van het script? Voor de goede orde, het gaat hier om normale applicaties die fouten in hun code hebben die uitgebuit kunnen worden door 'hackers' om zo dingen te doen die eigenlijk niet zouden mogen (zoals een systeem overnemen, gegevens opvragen die ze niet zouden mogen opvragen, etc.).

Jouw script doet niets anders dan in een oneindige loop dezelfde regel uitvoeren. Hoe kan dat uitgebuit worden?
zucht .... :z
@hydra: het was als grapje bedoeld op de post boven mij. Zal ik niet weer doen. Sorry, ga maar weer ontopic, das veel interessanter dan zo over een geintje tussendoor te vallen...
 
 
quote:
Euh? Geef anders antwoord op z'n vraag?
 
 
quote:
Guillome schreef op donderdag 22 mei 2008 @ 15:02:
[...]

zucht .... :z
@hydra: het was als grapje bedoeld op de post boven mij. Zal ik niet weer doen. Sorry, ga maar weer ontopic, das veel interessanter dan zo over een geintje tussendoor te vallen...
Waarom quote je .oisyn dan? Natuurlijk denkt iedereen dan dat het daar een reactie op is..

Ik snap overigens ook niet helemaal wat de exploit in dat script is. Overigens maakt het ook weinig uit, want ik denk dat hier wel wat dingen mogen komen te staan die in de praktijk ook voorkomen.
 
 
:? :? eh juist ja :? ga aub door met het topic, je maakt van de mug alleen maar een grote vage olifant
 
 
quote:
Cartman! schreef op zaterdag 17 mei 2008 @ 11:41:
PHP:

1
2
3
4
5
6
7
<?php
$strSql = '
    INSERT INTO
        video
    SET
        filename = "'
 . $strFilename . '",
        hash = "'
 . sha1(time()) . '"
    '
;
?>

Over het dubbele hashes, je kan natuurlijk het veld op PRIMARY zetten zodat er enkel unique strings in mogen staan. Het haalt de bug er niet 100% uit, maar het is al iets beter aangezien de dubbele string niet in de database komt.
 
 
quote:
Cartman! schreef op dinsdag 20 mei 2008 @ 21:10:
Het is sowieso niet handig om in de rechtentabel de naam te gebruiken ipv. het userid, is dat wat je bedoeld?
Al ben ik het wel met je eens, maar waarom?
Waarom precies wil je een id gebruiken, ipv een naam?
 
 
quote:
CyCloneNL schreef op vrijdag 23 mei 2008 @ 10:11:
[...]


Al ben ik het wel met je eens, maar waarom?
Waarom precies wil je een id gebruiken, ipv een naam?
Naast dat het een gevoelskwestie is, scheelt het ruimte. Bovendien weet je zeker dat je geen rare dingen krijgt i.v.m. bepaalde encoding etc. van de naam.

EDIT: En wat dacht je als de naam veranderd? Dan moet je dat in alle tabellen gaan doen.
 
 
Plus dat een dergelijke synthetische key gewoon constant kan blijven, ook al wil jij je username veranderen en ga zo maar door met alle standaard datamodel argumenten.
Maar goed, dit is wel offtopic allemaal...
edit:
spuit 11 na bovenstaande edit :'( Maar dan nog zijn dit toch echt wel standaard puntjes uit datamodel 101)
 
 
Ok, thanks.

Zelf zou ik ook een ID gebruiken, maar alleen voor de 'gevoelskwestie'. Nu weet ik dus waarom :)
 
 
En 't is gewoon sneller, een index van integers tov een index van varchars ;)
 
 
Ok, nog eentje, niet echt een kwetsbaarheid maar wel een fout.

Een nieuws systeem, waar de tekst na 100 karakters wordt afgekapt en er een 'Lees meer' link wordt gegeven.
PHP:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
$maxLength = 100//Maximum tekst length.

$result = (Haal data uit MYSQL database)

while($row = mysql_fetch_array($result))
{
   $titel = $row['titel'];
   $text = strlen($row['tekst']) > $maxLength ? $row['tekst'] : substr($row['tekst'],0,$maxLength) . "<a href='news.php?id=$row[id]'>Lees meer!</a>";

   echo "<h1>$titel</h1> 
            $text"
;
}
?>

 
 
De substring zal altijd in de fout gaan, aangezien de text in die case altijd kleiner zal zijn dan 100?
 
 
Hij kapt hard op 100 karakters, niet netjes einde woord etc, geen tags afsluitend. Alleen jammer dat ie daar niet komt, alleen wanneer de tekst niet groter is als $max, wat dus loos kapwerk is.


:w Voutloos, ik was nog aan het editen :P
 
 
offtopic:
Je kan voor PHP code [php][/php] tags gebruiken. ;)

En dit is wel een heel suf foutje. :P Je kan hier wellicht gewoon altijd substr() doen, lekker boeiend als je een handjevol calls hebt waarbij de tekst reeds binnen length viel, 't leest wel een stuk eenvoudiger. :)
quote:
MueR schreef op donderdag 29 mei 2008 @ 14:22:
Hij kapt hard op 100 karakters, niet netjes einde woord etc, geen tags afsluitend.
Zat ik eerst ook aan te denken, maar het is idd vooral verkeerd om. ;)
quote:
:w Voutloos, ik was nog aan het editen :P
Yeah right. :+ :w
 

Acties: [quote]


Door: PrisonerOfPain
 
Tenzij de titel en de tekst al escaped (htmlentities / htmlspecialchar) in de database staan heb je last van XSS.
 

VNU Media logo Powered by True

© 1998 - 2009 Tweakers.net - Alle rechten voorbehouden

Uitgever van: