mod_security: Benutzer verfolgen, um zu prüfen, ob bei fehlgeschlagener Anmeldung eine Weiterleitung auf die Seite erfolgt

mod_security: Benutzer verfolgen, um zu prüfen, ob bei fehlgeschlagener Anmeldung eine Weiterleitung auf die Seite erfolgt

Ich muss mich anmelden, wenn sich ein Benutzer nicht bei einer Webanwendung anmelden kann. Leider ist diese Webanwendung dazu nicht von Haus aus in der Lage und ich kann es nicht ändern.

Jetzt experimentiere ich mit mod_security. Meine Idee ist, die POST-Anfrage zu verfolgen, den Benutzernamen zu extrahieren und dann zu prüfen, ob der Benutzer auf die Seite „Anmeldung fehlgeschlagen“ umgeleitet wird.

Ich habe:

<Location /login.php>
       # Sanitize password variable value
       SecAction nolog,phase:2,sanitiseArg:password

       SecRule REQUEST_BODY "username=(.*)&password" "capture,log,logdata:'login submitted: user %{TX.1}'"
</Location>

Und

<Location /loginfailed.php>
       # Filter und log redirects to loginfailed
       SecRule RESPONSE_BODY "loginfailed.php" "phase:4,t:none,log,logdata:'login failed: %{TX.1}'"
</Location>

Aber natürlich ist „TX.1“ schon nicht mehr gesetzt, wenn ich es das zweite Mal brauche.

Kann mir jemand einen Tipp geben, wie ich das lösen kann?

Danke!

Antwort1

Sofern die Webanwendung keine Informationen zum Benutzernamen in die Umleitung einschließt (z. B. in die Abfragezeichenfolge /loginfiled.php?username=foobaroder in ein Cookie), gibt es keine Möglichkeit, den Benutzernamen aus der /loginfailed.phpAnfrage zu extrahieren. Die Informationen sind einfach nicht vorhanden, um sie zu extrahieren. HTTP ist zustandslos. Wenn also ein Client username=fooden Text einer POST-Anfrage sendet und dies zu einer 302-Umleitung führt, weiß die Folgeanfrage /loginfailed.phpnichts über die vorherige Anfrage.

Wenn diese Webanwendung eine 307-Umleitung statt einer 302- oder 303-Umleitung verwendet, ist die Folgeanforderung /loginfailed.phpeine POST-Anforderung mit denselben Daten. Ich würde dies als ziemlich unwahrscheinlich erachten.

Sehen Sie sich die Cookies oder den Sitzungsspeicher an und prüfen Sie, ob der Benutzername dort ist. (Ich bin nicht sicher, ob ich den mod_securitySitzungsspeicher lesen kann, aber wenn Sie wissen, dass er da ist, können Sie sicher etwas herausfinden.)

Möglicherweise haben Sie mehr Erfolg, CustomLogwenn Sie bei der ursprünglichen Anfrage protokollieren, ob der Anmeldeversuch erfolgreich war oder fehlgeschlagen ist, und nicht bei der Folgeanfrage:

LogFormat "%h %t \"%r\" %>s %{Location}o %{PHPSESSID}C %{UNIQUE_ID}e" loginslog
CustomLog "/var/log/apache2/logins.log" loginslog

oder Sie fügen einfach den Location:Header und die eindeutige ID zu Ihren normalen Protokollen hinzu, indem Sie %{Location}o %{UNIQUE_ID}e. mod_securitydie eindeutige ID in alle seine Protokolle einschließen, sodass Sie sie leicht miteinander abgleichen können.

Um ein zusammenhängendes Protokoll aller Benutzernamen zu erstellen, bei denen die Anmeldung fehlgeschlagen ist, müssen Sie alle Location:.*/loginfailed.phpZeilen heraussuchen logins.logund dann die eindeutigen IDs den Benutzernamen in Ihrem vorhandenen, auf mod_security basierenden Protokoll zuordnen.

verwandte Informationen