CURL, um auf eine Seite zuzugreifen, für die eine Anmeldung von einer anderen Seite erforderlich ist

123

Ich habe 2 Seiten: xyz.com/aund xyz.com/b. Ich kann nur dann zugreifen, xyz.com/bwenn ich mich zuerst anmelde xyz.com/a. Wenn xyz.com/bich auf den anderen zugreife, ohne ihn zu durchlaufen, wird mir einfach der Zugriff verweigert (keine Weiterleitung zum Login) über den Browser. Sobald ich mich angemeldet habe xyz.com/a, kann ich auf den anderen zugreifen.

Mein Problem ist dies mit dem Befehl curl. Ich kann mich erfolgreich xyz.com/abei Curl anmelden , versuche es dann aber xyx.com/bund mir wird der Zugriff verweigert.

Ich benutze folgendes:

curl --user user:pass https://xyz.com/a  #works ok
curl https://xyz.com/b #doesn't work

Ich habe versucht, die zweite Zeile mit & ohne Benutzer- / Kennwortteil zu verwenden und funktioniert immer noch nicht. Beide Seiten verwenden dieselbe Zertifizierungsstelle, das ist also kein Problem. Irgendwelche Vorschläge? Vielen Dank

ms1013
quelle

Antworten:

145

Die Website verwendet wahrscheinlich Cookies , um Ihre Sitzungsinformationen zu speichern. Wenn du rennst

curl --user user:pass https://xyz.com/a  #works ok
curl https://xyz.com/b #doesn't work

curlwird zweimal in zwei getrennten Sitzungen ausgeführt. Wenn der zweite Befehl ausgeführt wird, sind die vom ersten Befehl gesetzten Cookies nicht verfügbar. Es ist so, als hätten Sie sich in aeiner Browsersitzung bei einer Seite angemeldet und versucht, auf eine Seite bin einer anderen zuzugreifen .

Sie müssen lediglich die mit dem ersten Befehl erstellten Cookies speichern :

curl --user user:pass --cookie-jar ./somefile https://xyz.com/a

und lesen Sie sie dann wieder ein, wenn Sie die zweite ausführen:

curl --cookie ./somefile https://xyz.com/b

Alternativ können Sie versuchen, beide Dateien mit demselben Befehl herunterzuladen, wobei meiner Meinung nach dieselben Cookies verwendet werden.

Mechanische Schnecke
quelle
Dies ist seltsam, da es beim Versuch nicht funktioniert, da das darin gespeicherte Cookie den Pfadparameter somefileenthält ( /ain diesem Fall) und nicht an den zweiten Aufruf weitergeleitet wird. Wenn ich das Cookie in der Datei bearbeite und nur einen Schrägstrich setze, funktioniert es (Cookie wird an den zweiten Aufruf weitergeleitet). Wissen Sie, ob es möglich ist, die Speicherung des Pfads in der Cookie-Datei zu verhindern?
рüффп
122

Möglicherweise möchten Sie sich auch über den Browser anmelden und den Befehl mit allen Headern einschließlich Cookies erhalten:

Öffnen Sie die Registerkarte Netzwerk der Entwicklertools, melden Sie sich an, navigieren Sie zur gewünschten Seite und verwenden Sie "Als cURL kopieren".

Bildschirmfoto

Benutzer
quelle
12
Dies ist eine tiefe Antwort! Die Frage wird nicht direkt beantwortet, da sie zeigt, wie sie zu beantworten ist.
bgStack15
5
Das ist eine der nützlichsten Antworten. Sie können damit sogar die mehrstufige Authentifizierung beobachten und verstehen.
Pierre D
Ich wusste nicht, dass diese Funktion in diesen fantastischen Tools enthalten ist. Super nützlich!
Timothy C. Quinn
52

Nach einigem googeln fand ich folgendes:

curl -c cookie.txt -d "LoginName=someuser" -d "password=somepass" https://oursite/a
curl -b cookie.txt https://oursite/b

Keine Ahnung, ob es funktioniert, aber es könnte Sie in die richtige Richtung führen.

Joe Mills
quelle
9
Dies funktioniert, wenn Sie eine Website haben, auf der erwartet wird, dass ein Formular gesendet wird. Sie müssen sich die Quelle ansehen und das <form> -Bild finden, um zu sehen, wie die Felder heißen und an welche URL gesendet werden muss. Sie können Ihren Webbrowser-Debugger verwenden, um nach der Post-Anfrage zu suchen, damit Sie sehen können, was gesendet wird. Das ist etwas einfacher.
Stonefury
0

Meine Antwort ist eine Modifikation einiger vorheriger Antworten von @JoeMills und @user.

  1. Holen Sie sich einen cURLBefehl zum Anmelden am Server:

    • Laden Sie die Anmeldeseite für die Website und öffnen Sie den Netzwerkbereich der Entwicklertools
      • Klicken Sie in Firefox mit der rechten Maustaste auf die Seite, wählen Sie "Inspect Element (Q)" und klicken Sie auf die Registerkarte "Network"
    • Gehen Sie zum Anmeldeformular, geben Sie den Benutzernamen und das Passwort ein und melden Sie sich an
    • Nachdem Sie sich angemeldet haben, kehren Sie zum Netzwerkbereich zurück und scrollen Sie nach oben, um den POST-Eintrag zu finden. Klicken Sie mit der rechten Maustaste und wählen Sie Kopieren -> Als CURL kopieren
    • Fügen Sie dies in einen Texteditor ein und versuchen Sie dies an der Eingabeaufforderung, um festzustellen, ob es funktioniert
      • Es ist möglich, dass einige Websites eine Verhärtung aufweisen, die diese Art von Login-Spoofing blockiert, für deren Umgehung weitere Schritte erforderlich wären.
  2. Ändern Sie den Befehl cURL, um das Sitzungscookie nach der Anmeldung speichern zu können

    • Entfernen Sie den Eintrag -H 'Cookie: <somestuff>'
    • Fügen Sie nach curlam Anfang hinzu-c login_cookie.txt
    • Versuchen Sie, diesen aktualisierten Curl-Befehl auszuführen, und Sie sollten eine neue Datei 'login_cookie.txt'im selben Ordner erhalten
  3. Rufen Sie mit diesem neuen Cookie eine neue Webseite auf, für die Sie angemeldet sein müssen

    • curl -b login_cookie.txt <url_that_requires_log_in>

Ich habe dies unter Ubuntu 20.04 versucht und es funktioniert wie ein Zauber.

Timothy C. Quinn
quelle