[PHP] Willekeurige bestand kunnen inlezen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Goedemorgen :)

Ik zit met een vraagje

Hoe kan ik met php een string inlezen (die ik dus zelf type) en dat hij hem dan uitvoert...?
Ik wil namelijk hetvolgende proberen te maken.

Je hebt een map "/proc" op je pc, daar staan allemal informatie over van je pc.

Ik kan het wel standaard inlezen met bijvoorbeeld

system("cat /proc/meminfo");

Maar dat wil ik nu juist niet...
ik wil dus dat die
system("cat ................");
Dat moet allemaal vast staan, ik wil dus zelf de proc inkunnen vullen op dat moment.
hoe zou ik dat eventueel kunnen doen?

Als het kan met zo'n soort link

www.mo-corp.nl/proc.php?proc={bijvoorbeeld "meminfo"}

Ik heb zelf geen informatie hierover kunnen vinden...

Acties:
  • 0 Henk 'm!

Verwijderd

wat dacht je van
PHP:
1
2
3
$proc=$_GET["proc"];
$command="cat /proc/" . $proc;
system($command);


Overigens mag je hier nog wel wat beveiliging aan toevoegen want anders werkt
http://www.site.nl/proc.php?proc=../etc/passwd ook...

[ Voor 6% gewijzigd door Verwijderd op 11-11-2003 13:34 . Reden: Dollartje vergeten ]


Acties:
  • 0 Henk 'm!

  • DiLDoG
  • Registratie: Oktober 2002
  • Laatst online: 18-09 08:45
hm dan heb je neit echt goed gezocht: http://www.php.net

maar anyways:

somefunction("cat " . $_GET['somevar']);

met somepage.php?somevar=meminfo

zal resuleren in

somefunction("cat meminfo");

edit:
hmm poo. te laat :P

[ Voor 17% gewijzigd door DiLDoG op 11-11-2003 07:45 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@Jeroenr.

Ik krijg dan een parse error op de 2de regel, als ik dat script gebruik...

Acties:
  • 0 Henk 'm!

  • coubertin119
  • Registratie: Augustus 2002
  • Laatst online: 15-09 17:06
Kan je zelf wel dan PHP? Er ontbreekt $ voor, zodat 't $_GET moet worden en het normaal gezien wel werkt. Maar volgens mij is het makkelijker om eens een PHP tutorial er bij te pakken, want willekeurige bestanden inlezen kàn gevaarlijk zijn voor hackers.

Skat! Skat! Skat!


Acties:
  • 0 Henk 'm!

  • cavey
  • Registratie: Augustus 2000
  • Laatst online: 29-05 01:29
nah, niet gevaarlijk voor hackers... hooguit een flinke snoeppot voor crackers ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
echt goed php, kan ik niet neej, ben het daarom nu aan het leren.

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Voor cat /etc/passwd hoef je je weinig zorgen te maken omdat er altijd nog een shadow file is. Safe mode aanzetten is meestal genoeg beveiliging.

Acties:
  • 0 Henk 'm!

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 08-09 13:47
Uh huh. Probleem is dat je hier ongechecked code uit aan het voeren bent. Als je alleen een bestand uit ging lezen dan zou er niet zo heel veel mis kunnen gaan. Probleem is dat je in je system call ook redirects kan gooien en volgensmij werkt iets als

cat /proc/bla ; rm -rf /

ook :D _erg_ slecht idee om je argumenten niet grondig te checken voor je ze richting je OS gooit ;)

Acties:
  • 0 Henk 'm!

Verwijderd

GlowMouse schreef op 11 november 2003 @ 10:51:
Voor cat /etc/passwd hoef je je weinig zorgen te maken omdat er altijd nog een shadow file is. Safe mode aanzetten is meestal genoeg beveiliging.
Dan nog, je wilt niet dat iemand je usernamen kan inzien. Daarnaast /home/finance/creditcards.txt kan ook erg interessant zijn en zo zijn er nog een heleboel andere files waarvan je niet wilt dat ze via je webinterface te bekijken zijn. Het is gewoon een feit dat je heel erg goed moet weten waar je mee bezig bent als je parameters direct aan je OS gaat voeren.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
maar dat kun je toch eigenlijk alleen beveiligen, door in het systeem zelf de nodige restircties te zetten (chmod, chown).

Of kun je het in php zelf wel (zonder member(systeem)).

En hoe kan ik eventueel tegen gaan dat ze een 'map' omhoog gaan, want ze mogen nu bijvoorbeeld alleen in de map 'proc' rondkijken.

Dus het truckje van ../blaat/blaat dat je in de map blaat komt mag dus niet meer...

[ Voor 39% gewijzigd door Verwijderd op 11-11-2003 15:10 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb wel een id, hoe ik dat kan doen van die php code.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
$proc=$_GET["info"];
if ($proc = ../etc/passwd);
{
("cat /proc/magniet");
}
else
{
echo $blaat;
}
$command="cat /proc/" . $proc;
$blaat = system($command);
echo $blaat;
?>


Maar deze werkt niet.

De fout zit in lijn 3 zegt ie..maar ik zie echt niets.

[ Voor 13% gewijzigd door Verwijderd op 11-11-2003 15:39 ]


Acties:
  • 0 Henk 'm!

  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
Dit is echt basic PHP. Leer eerst eens wat over syntax etc, voordat je je server gaat openzetten met domme fouten.

PHP:
1
2
3
4
5
6
if ($proc == "../etc/passwd")
{
   // iets
}else{
   //iets anders
}


En je kan beter je beveiliging baseren op files die iemand wel mag zien, ipv files die je niet mag zien.

Koop of verkoop je webshop: ecquisition.com


Acties:
  • 0 Henk 'm!

  • Mayco
  • Registratie: Augustus 2002
  • Laatst online: 13-08 08:00
je kan dit beter met regexp's doen, en blokeer dingen als ; & | > <
als je enkel de etc/passwd doet heeft het niet zoveel zin: je kan evengoed dit doen: /var/../etc/passwd

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
$proc=$_GET["info"];
$command="cat /proc/" . $proc;
if
($proc == "../etc/passwd" || $proc == "../etc/group")
{
system("cat /usr/magniet");
}
else
{
echo $blaat=system($command);
}
?>

Dit heb ik ervan gemaakt, en werkt wel goed..
Dus zo zou het opzich toch wel goed beveiligd moeten zijn??

Acties:
  • 0 Henk 'm!

  • Apache
  • Registratie: Juli 2000
  • Laatst online: 16-09 10:29

Apache

amateur software devver

nee ...

volgens mij kan je best ff recursief /proc uitlezen naar een array en dan wat binnenkomt met in_array() checken of het wel degelijk in proc staat.

Hiermee gooi je je deuren echt al wel veel te ver open, als je begint te php'en moet je een guestbook maken oid wat toch aanzienlijk lagere security risks inhoud dan wat je nu van plan bent :)

If it ain't broken it doesn't have enough features


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 11 november 2003 @ 16:25:
PHP:
1
2
3
4
5
6
7
8
9
<?
$proc = $_GET["info"];
$command = "cat /proc/" . $proc;
if ($proc == "../etc/passwd" || $proc == "../etc/group") {
   system("cat /usr/magniet");
} else {
   echo $blaat=system($command);
}
?>

Dit heb ik ervan gemaakt, en werkt wel goed..
Dus zo zou het opzich toch wel goed beveiligd moeten zijn??
Ja dat is een fantastische beveiliging :+
Geef maar eens info=../../etc/passwd op ;)
En zo kan je dus tot het oneindige doorgaan :)

Sterker nog, iemand die de manier van includen opvalt zal hoogstwaarschijnlijk niet ../etc/passwd gebruiken maar iets als ../../../../../etc/passwd, omdat hij niet weet in welke dir hij zit en dus gewoon telkens omhoog probeert te gaan tot de rootdir.

Een veel betere oplossing is het uitsluiten van 2 punten in de info string of het opzetten van een array van toegestande waardes voor info :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
[qoute]
Sterker nog, iemand die de manier van includen opvalt zal hoogstwaarschijnlijk niet ../etc/passwd gebruiken maar iets als ../../../../../etc/passwd, omdat hij niet weet in welke dir hij zit en dus gewoon telkens omhoog probeert te gaan tot de rootdir.[/qoute]

En beetje Unix ervaren persoon, weet dat de meminfo en dergelijke in de map /proc staat..maar dat in het midden gelaten.

Ik ga proberen nog wat meer te proberen te beveiligen..

In ieder geval, hartstikke bedankt iedereen

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Verwijderd schreef op 11 november 2003 @ 16:25:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
$proc=$_GET["info"];
$command="cat /proc/" . $proc;
if
($proc == "../etc/passwd" || $proc == "../etc/group")
{
system("cat /usr/magniet");
}
else
{
echo $blaat=system($command);
}
?>

Dit heb ik ervan gemaakt, en werkt wel goed..
Dus zo zou het opzich toch wel goed beveiligd moeten zijn??
Gedachte is redelijk, uitvoering is alleen verkeerd om.
Je zou iets moeten hebben van
PHP:
1
2
3
4
5
6
7
8
if ($proc == "../prog/meminfo")
{
echo $blaat=system($command);
}
else
{
echo "<H1>MAG NIET!!!</H1>"
}

opzet is hetzelfde, uitvoering is alleen dat mensen nu een ding goed kunnen doen en bij jouw opzet kunnen ze maar 2 dingen fout doen.

Hint zie ook help onder switch etc.

Mensen zelf dingen laten invullen die uitgevoerd worden is zowieso een slecht idee.

[ Voor 15% gewijzigd door Gomez12 op 12-11-2003 09:25 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 12 november 2003 @ 09:17:

En beetje Unix ervaren persoon, weet dat de meminfo en dergelijke in de map /proc staat..maar dat in het midden gelaten.
Hmzz moet ik me toch eens wat in Unix gaan verdiepen :+ misschien dat er nog een vacture voor mod NOS vrij is :+

Zoals je misschien wel weet bestaat proc ook uit dirs en staat niets mij in de weg om proc ergens anders te mounten ;) Daarnaast is het lang niet altijd duidelijk dat de info die je weergeeft uit proc komt, het zou ook van een programma'tje kunnen komen dat je aanroept via php ;)
Pagina: 1