Nee, dat staat er dus niet. Ik las het verkeerdquote:
Dan houd ik me er wel buiten voor de rest; ik blijk te veel onzin te verkopen.quote:.oisyn schreef op vrijdag 16 mei 2008 @ 17:48:
[...]
Nee, dat staat er dus niet. Ik las het verkeerd
' Knowledge Beats Power.
C:
1 | #include <stdio.h>
|
Heb nu een Animated PNG icon. Werkt in alle moderne browsers (Firefox en Opera).
hee, dat wou ik ook zeggenquote:Sebazzz schreef op vrijdag 16 mei 2008 @ 18:03:
Als je een naam invoert met meer dan 256 tekens heb je de mogelijkheid om kwaadaardige code uit te voeren (in MS termen).
elTigro wijzigde dit bericht 16-05-2008 18:05 (37%)
Lazlo's Chinese Relativity Axiom:No matter how great your triumphs or how tragic your defeats --approximately one billion Chinese couldn't care less.
@elTigro: idd. Je zou kunnen denken aan een system("format c:"), door na de 256 bytes van de naam 4 bytes te gebruiken om de eindFunctie pointer naar system() te wijzen, daarna nog wat ruimte reserveren voor de referentie naar en de string "format c:" zelf. Of gewoon simpelweg wat assembly code waar je 'eindFunctiePtr' weer naar laat wijzen.
.oisyn wijzigde dit bericht 16-05-2008 18:12 (75%)
juist, spuit '0xb' dus
/edit2:
ik was naar een recent voorbeeld van hier gebruikte code met 'gaatjes' aan het zoeken, maar ik kan het niet meer vinden.
Als iemand al een goed voorbeeld weet, voel je vrij het alvast te posten, ik moet namelijk nodig ervandoor
elTigro wijzigde dit bericht 16-05-2008 18:22 (28%)
Lazlo's Chinese Relativity Axiom:No matter how great your triumphs or how tragic your defeats --approximately one billion Chinese couldn't care less.
PHP:
| <?php
|
Bovenstaande code bevat 2 fouten.
Sorry, maar ze zijn misschien wel een beetje simpel... $PHP_SELF bewijst al gelijk dat je register_globals verkeerd hebt ingesteld, en verder hoor je een check op !== false te doen bij strpos.quote:xos schreef op vrijdag 16 mei 2008 @ 20:10:
Dan doe ik ook een poging, onderstaande functie wordt geinclude & aangeroepen op iedere php pagina om te controleren of de gebruiker de pagina mag bekijken onder de huidige credentials.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12<?php
function authenticate( $user, $passwd )
{
// pagina's waar geen authenticatie nodig is
if( strpos( $PHP_SELF, "index.php" ) !== 0 ) return;
// pagina's waar wel authenticatie vereist voor is,
// dus controleer gebruikersnaam/wachtwoord combinatie
if( !checkCredentials( $user, $passwd ) )
{
header( "Location: /login.php" );
}
}
?>
Bovenstaande code bevat 2 fouten.
Dan hebben we het natuurlijk verder even helemaal niet over het feit dat zo'n security check als deze überhaupt best omslachtig is
SchizoDuckie wijzigde dit bericht 16-05-2008 20:20 (5%)
• PHP_SELF is een member van de $_SERVER superglobal, geen variabele.
• PHP_SELF bevat het volledige pad naar het huidige script relatief ten opzichte van de document root. Dit zal dus voor http://www.bier.com/index.php in principe /index.php zijn. Omdat je niet op de slash checkt failt je self-test in regel 4.
• PHP_SELF schijnt nogal wat eigenaardigheden te hebben onder verschillende omgevingen waardoor je beter af bent met intelligentere logica.
• Na een header 'Location' dien je processing van het script te stoppen om de redirect in te zetten.
• Een location header dient volgens de HTTP-specificaties een volledig URL inclusief protocol en FQDN te bevatten.
Door het vergeten van de 'die' na het zetten van de location header wordt de rest van het script volledig uitgevoerd alvorens de redirect wordt ingezet. Hierdoor kun je dus postbacks uitvoeren die je niet zou mogen uitvoeren, of data zien die je niet zou mogen zien (moet je wel een custom browser hebben die 3xx responses negeert of telnetten).quote:SchizoDuckie schreef op vrijdag 16 mei 2008 @ 20:18:
[...]
maar verder zie ik nou niet zo 123 wat hier dan erg exploitable aan zou moeten zijn zoals gedefinieerd in de TS
curry684 wijzigde dit bericht 16-05-2008 20:23 (30%)
Curlio.com Music News For You!
Y! Celebrate Life!
Edit:
@dusty:
Nee toch, want PHP_SELF bevat toch alleen de scriptnaam, en niet de GET vars?
stereohead wijzigde dit bericht 16-05-2008 20:34 (46%)
xos wijzigde dit bericht 16-05-2008 20:45 (39%)
Ah, afhangend van je webserver kan je http://domein.tld/secured.php/index.php?blaat doen.. de secured.php wordt uitgevoerd, en $PHP_SELF kan dan wel eens de "/secured.php/index.php" weergeven..
dusty wijzigde dit bericht 16-05-2008 20:49 (33%)
Curlio.com Music News For You!
Y! Celebrate Life!
Bezoek eens een willekeurige pagina
Ik wili minder Kb's
PHP:
| <?php
|
jij ook?
Direct een post sturen (vanaf lokale pagina bijvoorbeeld) voordat een sessie gestart wordt. Op die manier is $_SESSION['validlogin'] undefined. Dit wordt bij de vergelijking gezien als een lege string.quote:GlowMouse schreef op vrijdag 16 mei 2008 @ 21:15:
Het is lastig om zonder langere stukjes code toch kwetsbaarheden in te bouwen die niet gelijk zichtbaar zijn. Hier een scriptje om te voorkomen dat eenmaal sniffen volstaat om iemands wachtwoord af te pakken: js is ongetest
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19<?php
define('PASSWORD', 'henkpwnz');
session_start();
if(isset($_GET['login'])) {
if(isset($_POST['password']) && $_SESSION['validlogin'] == $_POST['password']) {
// glory
} else {
die('Henk gaat jou opeten!');
}
} else {
$hash = md5( microtime() . rand(1,10000) );
$_SESSION['validlogin'] = md5($hash . PASSWORD);
echo '<script language="JavaScript" src="js/md5.js">
<form method="post" action="' . $_SERVER['PHP_SELF'] . '?login" onSubmit="javascript:password.value=md5(' . $hash . ' + password.value )">
<input type="password" name="password">
<input type="submit" value="ogog!">
</form>';
}
?>
De $_POST['password'] een lege string laten zijn is ook niet zo moeilijk.
// Ik ben bezig met iets in elkaar te zetten, mocht iemand anders een leuk stukje hebben, plaats die dan gerust.
EdwinG wijzigde dit bericht 16-05-2008 21:33 (4%)
Bezoek eens een willekeurige pagina
Ik wili minder Kb's
Correct! Volgende?quote:EdwinG schreef op vrijdag 16 mei 2008 @ 21:30:
[...]
Direct een post sturen (vanaf lokale pagina bijvoorbeeld) voordat een sessie gestart wordt. Op die manier is $_SESSION['validlogin'] undefined. Dit wordt bij de vergelijking gezien als een lege string.
De $_POST['password'] een lege string laten zijn is ook niet zo moeilijk.
jij ook?
edit: gewoon niet goed zitten kijken, dat was em niet en tevens is het goede antwoord al gepost =)
Nieuwe:
PHP:
| <?php
|
Lijkt me niet al te moeilijk wat hier verkeerd kan gaan maar toch zie ik collega's t weleens doen
Cartman! wijzigde dit bericht 16-05-2008 21:34 (10%)
• Bij een insert doe je naar mijn weten geen set maar (.<fields>.) VALUES ( .<values>. ) (Of is dit weer een of ander vaag SQL dialect? )
• Is HASH() niet toevallig een interne mysql functie? ( backticks )
• Never trust user input, ik hoop dan ook dat een addslashes of escape oid al over je vars zit.
en $strThis, $strThat is ook best loos in een loose typed taal
SchizoDuckie wijzigde dit bericht 16-05-2008 23:16 (141%)
Volgende puzzel dan maar
PHP:
| <?php
|
Dit script is geplaatst in een directory waarvan de bestanden (en die in subdirectory's) door iedereen bekeken mogen worden.
EdwinG wijzigde dit bericht 16-05-2008 22:13 (35%)
Bezoek eens een willekeurige pagina
Ik wili minder Kb's
EdwinG: nee slimmert, dat er geen db call wordt gedaan boeit in het voorbeeld niet, zie je me wel connecten dan?
Cartman! wijzigde dit bericht 16-05-2008 22:23 (32%)
readfile() accepteert URLs wanneer url_fopen_wrappers aanstaat. Op die manier kun je file:///etc/passwd (bijvoorbeeld) opgeven en op die manier elke willekeurige file op het systeem uitlezen. Dit pas vanaf PHP5, in PHP4 kon dit nog niet.quote:EdwinG schreef op vrijdag 16 mei 2008 @ 22:03:
PHP:
1
2
3<?php
...
readfile($gevraagd);
...
?>
Dit script is geplaatst in een directory waarvan de bestanden (en die in subdirectory's) door iedereen bekeken mogen worden.
Gerco wijzigde dit bericht 16-05-2008 22:26 (4%)
- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!"
- Steun Mepukori, gebruik geen DRM!
Ok, even serieus dan:quote:Cartman! schreef op vrijdag 16 mei 2008 @ 22:20:
SchizoDuckie : nee, dat is niet alles waar ik op doelde, denk verder... en $str in een loosetyped taal is juist erg handig. zo weet je toch nog wat het is achteraf.
EdwinG: nee slimmert, dat er geen db call wordt gedaan boeit in het voorbeeld niet, zie je me wel connecten dan?
1: Persoonlijk zou ik de " en ' omwisselen
2: Ik hoop dat de hash kolom geen unieke waarde hoeft te hebben, dan zou twee gelijktijdige inserts problemen op gaan leveren
3: Inderdaad escapen van de filename
Bezoek eens een willekeurige pagina
Ik wili minder Kb's


