Tisztelt Kollégák!
PHP szkriptben szeretnék system("akarmilyen_parancs")-ot végrehajtani, azonban valami oknál fogva a szerver nem hajtja végre. Nincs hibaüzenet, nincs semmi, csak a nagy csend...
Ugyanez a szkript más szerveren (teszt szerver) működik...
A kérdés: hogyan bírjam rá a működésre, valamint mit kell beállítani (ha van ilyen...)?
A szerver nem safe mode-ban fut, az apache juzer sudo-zhat, suexec be van töltve, stb. látszólag minden feltétele megvan a működésre...
- 1342 megtekintés
Hozzászólások
phpverzió?
milyen error_reporting beállítással fut?
könyvtár jogosultságok?
mi az utasítás? (ha titkos akkor nagyjából :) )
a futtatandó prog/srcipt/mittomen jogosultságai?
egyébb ami még nem jutott eszembe?
- A hozzászóláshoz be kell jelentkezni
logban valami?
- A hozzászóláshoz be kell jelentkezni
PHP 5.0.4.
Error_reporting E_ALL ~ E_NOTICE
utasítás: akármi, tökmindegy... semmi se megy...
script jogosultság rendben van.
- A hozzászóláshoz be kell jelentkezni
ez se?
<?php
system("/bin/ls /tmp",$retval);
print $retval;
?>
ha 127, akkor nem ott van az ls (esetleg /usr/bin/ls)
- A hozzászóláshoz be kell jelentkezni
disabled_functions -ben nincs ott? Egyébként ezeket csípőből tiltom énis a gépeimen, lásd a sok phpnuke és egyéb okosságot.
- A hozzászóláshoz be kell jelentkezni
Valóban nagyon nagy biztonsági rést jelentenek ezek a funkciók az alapértelmezett konfigurációban.
Én viszont mégsem tiltanám le ezeket, mivel én használom, viszont be van állítva egy könyvtár(safe_mode_exec_dir), és a PHP csak onnan futtathat. De mintha már írtam volna egy (pár) hozzászólást ezzel kapcsolatban itt a HUPon. Ráadásul lehet mahinálni pl. Apache konfigban is, hogy kinek milyen opciókkal fusson PHP.
- A hozzászóláshoz be kell jelentkezni
Hát én a safemodeexecben sem bízom és egyáltalán figyelembe veszi? Ha meghivsz egy scriptet amiben ez az van, az mar nem PHP.
Egyébként kiváncsi vagyok azokra a dolgokra, amihez normális weboldal esetén mindenképpen shell futtatás kell. :) Az is rendben van, hogy pervhost belövöd a PHP-t, de 250+ vhostnál kissé problémás lehet.
- A hozzászóláshoz be kell jelentkezni
Semmi sincs a disabled_functions -ban.
- A hozzászóláshoz be kell jelentkezni
ez se?
system("/bin/ls /tmp",$retval);
print $retval;
?>
ha 127, akkor nem ott van az ls (esetleg /usr/bin/ls)
- A hozzászóláshoz be kell jelentkezni
system("/usr/bin/mysqldump --opt -h $host -u $user --password=$pass $db | gzip > $savefile",$retval);
print $retval;
$retval értéke 127. Mi a fene ez?
- A hozzászóláshoz be kell jelentkezni
a gzip-edet is mond meg hol van
- A hozzászóláshoz be kell jelentkezni
system("/usr/bin/mysqldump --opt -h $host -u $user --password=$pass $db | /usr/bin/gzip > $savefile",$retval);
print $retval;
Ugyanúgy: 127. Ez amúgy mit jelent?
- A hozzászóláshoz be kell jelentkezni
Itt a 127 a no such file or directory-t jelenti szerintem. Amúgy valahol megnézető, mikor dobja a bash, de már nem emlékszem.
Ha kiadod kézzel ezt az utasítást a shellből (lehet hogy su apache kell, azt nem tom), akkor mit ír ki?
Nálam amúgy a gzip a /bin-ben van.
- A hozzászóláshoz be kell jelentkezni
su apache
This account is currently not available.
Más:
sudo -u apache ls
ls: .: Hozzáférés megtagadva
??????????????
Ez meg mi a fene?
- A hozzászóláshoz be kell jelentkezni
De a gzipped a helyén van? which gzip?
Amúgy biztos false-ra vagy nologin-ra van állítva a shellje. Szóval akkor nem kell ilyet kipróbálni! :)
- A hozzászóláshoz be kell jelentkezni
gzip a helyén... amúgy teszt szerveren sima system("ls") -t próbáltam, az is megy, meg minden... nincs valami modul, amely ezért felelős, és az nincs a szerveren?
- A hozzászóláshoz be kell jelentkezni
Én úgy tudom, hogy valahol be lehet állítani a bináris útvonalakat a php-nek, de ne kérdezd hol. A php.net-en biztos találsz rá utalást a megjegyzések között, ha rákeresel a system függvényre.
- A hozzászóláshoz be kell jelentkezni
Lassan feladom... :( max crontabba kerül az adatbázis mentés... Pedig így akkor készülhetett volna, amikor én akarom.
- A hozzászóláshoz be kell jelentkezni
Ezt alaphangon oda kéne tenni mondjuk. Egyébként van SELECT INTO OUTFILE és tsai is a MySQL-ben.
Az apache pedig johogy nemtud sudo -zni, szépen nézne ki a helyzet. A lényeg az hogy a login le van tiltva, viszont setgid() es setuid() rootkent mukodik, ezert tud www juzerrel futni peldul.
- A hozzászóláshoz be kell jelentkezni
Nem igazán értem ezt az egészet... átnéztem mindkét szervert... semmi gyanús különbséget nem látok... :(
- A hozzászóláshoz be kell jelentkezni
Vagy /bin/false -ra... Akkor sem tudsz semmit su-zni/exec-eltetni...
- A hozzászóláshoz be kell jelentkezni