
解决php提权的时候因系统禁用函数导致无法执行命令的情况
bypass_disablefunc.php hat drei GET-Optionen: cmd, outpath und sopath.
Die Optionen sind sehr einfach:
cmd ist dein böser Befehl,
outpath ist der Dateipfad für die Befehlsausgabe (lesbar und beschreibbar),
sopath ist der absolute Pfad unseres Shared Objects bypass_disablefunc_x64.so. Zum Beispiel:
Erstens der cmd-Parameter, der auszuführende Systembefehl (z. B. pwd);
Zweitens der outpath-Parameter, der Dateipfad, in dem das Ausgabeergebnis der Befehlsausführung gespeichert wird (z. B. / tmp / xx), damit es auf der Seite angezeigt werden kann. Außerdem solltest du bei diesem Parameter darauf achten, ob das Web Lese-/Schreibrechte hat, ob das Web verzeichnisübergreifend zugreifen kann, ob die Datei überschrieben und gelöscht wird usw.;
Drittens der sopath-Parameter, der den absoluten Pfad des Shared Objects angibt, das Systemfunktionen kapert (z. B. /var/www/bypass_disablefunc_x64.so). Bei diesem Parameter solltest du außerdem darauf achten, ob das Web verzeichnisübergreifend darauf zugreifen kann.
Außerdem setzt bypass_disablefunc.php den Befehl und den Ausgabepfad zu einer vollständigen Befehlszeile zusammen, sodass du im cmd-Parameter keine Umleitung angeben musst.
bypass_disablefunc_x64.so ist das Shared Object zur Ausführung von Befehlen. Mit dem Befehl gcc -shared -fPIC bypass_disablefunc.c -o bypass_disablefunc_x64.so
wird bypass_disablefunc.c kompiliert. Wenn das Ziel eine x86-Architektur ist, muss die Option -m32 hinzugefügt werden, um bypass_disablefunc_x86.so neu zu kompilieren.
Schaffe es, bypass_disablefunc.php und bypass_disablefunc_x64.so auf das Ziel zu übertragen. Nachdem du die drei GET-Parameter festgelegt hast, kann bypass_disablefunc.php disable_functions umgehen.
Bekannte Probleme:
Unterschiedliche Zielumgebungen erfordern möglicherweise eine erneute Kompilierung des Shared Objects. Das in diesem Projekt enthaltene bypass_disablefunc_x64.so wurde unter Debian, x64, kompiliert; auf Nicht-Debian-Systemen muss es möglicherweise neu kompiliert werden;
bypass_disablefunc.php benötigt Lese-/Schreibrechte für den unter outpath angegebenen Pfad. Wenn SELinux auf dem Ziel aktiviert ist, kann es das Web-Konto am Schreiben von Dateien hindern. Wenn du zum Beispiel id mit der Apache-Identität ausführst und die Ausgabe uid=48(apache) gid=48(apache) groups=48(apache) context=system_u:system_r:httpd_t:s0 lautet – siehst du das context=system_u:system_r:httpd_t:s0 am Ende? Genau das ist SELinux, das sein Unwesen treibt.