Per PHP Login, SessionID bekommen?!

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Per PHP Login, SessionID bekommen?!

    Servus,...

    kurz vorweg:...ich probier meine ehr mittelmäßigen Programmier-Künste an einem PHP Script welches sich bei dem bekannten Browsergame ogame.de einloggen soll und Informationen herauslesen soll... ich weiß es verstöhst gegen die Regeln, manche werdens mir vielleicht nicht glauben aber ich selbst spiele das Spiel nicht mehr und versuche mich an dem Script außer reiner Interesse an PHP und was damit möglich ist. Trotzdessen hoffe ich hier auf Hilfe ;-)

    Nun zum Problem....

    Ich hab mit einem Firefox Addon die genauen HTTP Header & Co beim einloggen ausgelesen.
    Wenn ich meine Cookies davor lösche sende ich dies:
    (meine Daten sind mit "#" zensiert)

    POST /game/reg/login2.php HTTP/1.1
    Host: uni##.ogame.de
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    Connection: keep-alive
    Referer: OGame.de
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 76
    uni_id=1&v=2&is_utf8=0&uni_url=uni##.ogame.de&login=######&pass=#####

    was ich dabei zurück bekomme ist:

    HTTP/1.x 200 OK
    Date: Thu, 14 May 2009 22:24:39 GMT
    Server: Apache
    [COLOR=Red]Set-Cookie: PHPSESSID=642c352e43783e281adff981d43a934e; path=/
    Set-Cookie: prsess_12##66=c46636f5344af36f603324b794fd328a; expires=Fri, 15-May-2009 22:24:39 GMT; path=/
    Set-Cookie: login_12##66=U_de##%3A######%3A67a7fe8299cebf3f8e8##0f16fdd623a; expires=Fri, 15-May-2009 22:24:39 GMT; path=/
    Expires: Thu, 19 Nov 1981 08:52:00 GMT[/COLOR]

    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma: no-cache
    Vary: Accept-Encoding
    Content-Encoding: gzip
    Content-Length: 118
    Keep-Alive: timeout=2, max=100
    Connection: Keep-Alive
    Content-Type: text/html; charset=utf-8



    ..... das nächste was dann von mir aus gesendet wird ist:

    GET /game/index.php?page=overview&[COLOR=RoyalBlue]session=543f0fa533d8[/COLOR]&lgn=1 HTTP/1.1
    Host: uni77.ogame.de
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    Connection: keep-alive [COLOR=Red]Cookie: PHPSESSID=642c352e43783e281adff981d43a934e; prsess_12##66=c46636f5344af36f603324b794fd328a; login_12##66=U_de77%3A######%3A67a7fe8299cebf3f8e8780f16fdd623a
    [/COLOR]


    Jetzt meine Fragen dazu:

    [COLOR=Red]1.) Wie kann ich auf die Cookies die beim ersten Empfangen gespeichert werden in meine Script zugreifen? ...meine Befürchtung: Gar nicht?! Lieg ich da richtig? Aber andere Bots loggen sich doch bestimmt auch auf die Weise ein oder?
    Und wenn ich das POST Request mit meinem Script genau so losschicke bekomme ich als antwort zwar das gleiche nur beinhaltet das NUR die PHPSESSID,... aber die press_12.. und login_12... fehlen. Aber brauchen tu ich die doch bestimmt beim dem GET Request richtig?! Denn wenn nicht könnte ich auch über die vom POST Request empfangene PHPSESSID einloggen...

    [/COLOR][COLOR=RoyalBlue]2.) Wie schliess ich bei dem GET aufruf auch diese blau makierte Session?!... das ist mir total unschlüssig.

    [COLOR=Black]Fragen über Fragen.... )
    Wär klasse wenn mir dabei jmd weiterhelfen könnte.
    Und nochmal, ich werde dieses Script dann nur testweise ausprobieren und nicht weiter in hoher Punktzahl nutzen, da ich keine Interesse mehr an dem Spiel habe. Und weiter geben werd ich das Script erst recht nicht.

    Wär mir vllt nicht hier im Forum helfen will kann mir auch gerne eine PM schicken.

    Bin dankbar für jeden auch nur kleinsten hilfreichen Beitrag...

    Gruß Nucular ;-)
    [/COLOR][/COLOR]
    Zuletzt geändert von Nucular; 15.05.2009, 02:13.

  • #2
    Cookies werden immer lokal gespeichert und sind sofern du IE benutzt sogar leicht auf deinem rechner zu finden ...

    aber wenn du jetzt meinst das du nen script hast das via inet auf fremdserver cookies zugreifen soll ... denn würde ich einfach mal .... öhm Nö sagen...

    Kommentar


    • #3
      Nene es warn schon meine Cookies gemeint... aber wo genau find ich die?!... und wie gesagt wenn ich die HTTP Headers mitschneide im Firefox und ganz normal den Login button drücke werden in dem GET Request von MEINER seite schon PHSESSID, prsesss_12bla und login_12bla übergeben,... aber mach ichs mit meinem Script hab ich zu dem Zeitpunkt der dem POST Request nur die PHPSESSID übergeben bekommen.

      und meine andere Frage,.. woher kommt das blaue (siehe erster Post) in der GET Methode..

      Tschuldigung dass ich mich wiederhole ;-)
      ,.. aber das bereitet mir so Kopfzerbrechen dass ich heute nacht schon davon geträumt habe :-D

      Kommentar


      • #4
        Der HttpClient vom Zend Framework bietet für sowas zum Beispiel die CookieJar.

        Kommentar


        • #5
          Danke, das Zend Framework werd ich mir mal anschauen. Aber geh ich recht in der Annahme dass das nur auf einem eigenen Server benutzbar ist?

          Aber anderstrum gesehen, eigentlich müsste es doch auch mit den Standartfunktionen realisierbar sein..?

          Kommentar


          • #6
            Natürlich geht es auch mit Standardfunktionen, schließlich besteht HTTP inhaltlich doch nur aus Text. Du kannst die Cookies aus dem Response rauspopeln und in den nächsten Request mit einbauen.

            Zu deinem zweiten Problem, der oben blau gefärbten Session: Schau dir den Link mal an, bevor du draufklickst. Scheinbar verwendet die Seite keine Session-Cookies sondern hängt die SID an jede URL an.

            Kommentar


            • #7
              Danke für deine Antwort @onemorenerd...

              Zwei Gegenfragen hab ich da aber:

              Du kannst die Cookies aus dem Response rauspopeln und in den nächsten Request mit einbauen.
              Wenn ich aber den POST-Request per Script genau so absende als würde ich auf den Link klicken bekomm ich statt dem hier:
              PHP-Code:
              Set-CookiePHPSESSID=642c352e4#######81d43a934e; path=/
              Set-Cookieprsess_12##66=c46636f5344af36f603#####94fd328a; expires=Fri, 15-May-2009 22:24:39 GMT; path=/
              Set-Cookielogin_12##66=U_de##%3A######%3A67a7fe8299cebf3f8e8##0f16fdd623a; expires=Fri, 15-May-2009 22:24:39 GMT; path=/
              ExpiresThu19 Nov 1981 08:52:00 GMT 
              bekomm ich leider nur:

              PHP-Code:
              Set-CookiePHPSESSID=0d89702bccf2ef28b6c2ac74c5c8b0adpath=/ ExpiresThu19 Nov 1981 08:52:00 
              ... d.h. die prsess_12blabla und login_12blabla bekomm ich nicht zurück übergeben. Oder brauch ich die womöglich gar nicht?!

              ------------------------
              andere Frage wäre:

              Schau dir den Link mal an, bevor du draufklickst. Scheinbar verwendet die Seite keine Session-Cookies sondern hängt die SID an jede URL an.
              Das ich die SID über ein GET Request senden muss war mir bereits klar, nur stellt sich mir die Frage wo ich die SID herbekomme. Denn sie ist ja nicht die gleiche die mir beim vorigen POST Request als PHPSESSID zurückgegeben wurde. Also zwei komplett verschiedene IDs sind das...


              Tut mir leid falls ich immer und immer das gleiche frage, nur steh ich irgendwie ziemlich aufm Schlauch :-P

              Gruß Nuc


              edit: Was mit gerade auffällt was wohl die Ursache dafür ist dass nur die PHPSESSID zurück kommt, der Response ist nur ein HTTP/1.1 302 Found...

              PHP-Code:
              HTTP/1.1 302 Found DateFri15 May 2009 09:13:06 GMT ServerApache Set-CookiePHPSESSID=52d02c7e194a9####faa1f791d7adfe2; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache location: /game/reg/errorpage.php?errorcode=2&arg1=77&arg2=0 Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 20 Keep-Alive: timeout=2, max=100 Connection: Keep-Alive Content-Type: text/html; charset=utf-8 
              Hab das grade mal gegooglet und in anderen Foren sagte man dem jenige er soll der Weiterleitung einfach mal folgen. Ok 302 Found ist eine Weiterleitung,... nur wie folgt man dieser? Dachte erst ich hätte das HTTP Protokoll zum größten Teil durchschaut,... aber dann kommt sowas :-P
              Zuletzt geändert von Nucular; 15.05.2009, 11:17.

              Kommentar


              • #8
                Als kleiner Hinweis am Rande, für solche und ähnliche Zwecke eignet sich das Firefox Addon "greasemonkey" sehr gut
                https://addons.mozilla.org/de/firefox/addon/748

                Ausserdem schau mal ob du damit was anfangen kannst:

                PHP-Code:
                $params "username=".$user."&password=".$pass;
                $url "https://login.yourpage.com/login.php?".$params;
                if (
                $result file_get_contents($url)) {
                  foreach (
                $http_response_header as $httpline) {
                     @list(
                $header,$parameters) = explode(";",$httpline,2);
                     @list(
                $attr,$value) = explode(":",$header,2);
                     if (
                strtolower(trim($attr)) == "set-cookie") {
                        
                $cookies explode("&"trim($value));
                        foreach(
                $cookies as $cookie) {
                          list(
                $cookie_name$cookie_value) = explode("="$cookie);
                          
                $this->cookies[$cookie_name] = $cookie_value;
                        }
                        
                $_SESSION['cookies'] = $this->cookies;
                     }
                  }

                Das hab ich grad noch in meinen unfertigen Projekten gefunden
                Für alle weiteren Seiten die du abrufst kannst du die Cookies per http://www.php.net/manual/de/functio...ext-create.php mit versenden.
                Zuletzt geändert von Forsaken; 15.05.2009, 12:02.
                IM: Pidgin | Browser: Chromium Firefox | HTML: SelfHTML | PHP: PHP.net SelfPHP | Linux: GnomeDo



                And remember, respect is everything!

                Kommentar


                • #9
                  Zitat von Nucular Beitrag anzeigen
                  Ok 302 Found ist eine Weiterleitung,... nur wie folgt man dieser?
                  In dem man als nächstes die Adresse abruft, die im Location-Header angegeben ist.
                  (Die in dem Response, den du angegeben hast, übrigens fehlerhaft ist - ein Location-Header erfordert per Definition einen vollständigen, absoluten URL. Der Server in diesem Beispiel verlässt sich darauf, dass der Client aus der relativen Angabe und dem aktuellen Pfad selber eine solche zusammenbastelt.)
                  Dachte erst ich hätte das HTTP Protokoll zum größten Teil durchschaut,... aber dann kommt sowas :-P
                  Es bietet sich wirklich an, eine fertige Klasse oder sowas für HTTP-Requests zu nutzen - anstatt sich alles selber zusammenzubasteln.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    Servus,... erst mal danke für die neuen Antworten ;-)

                    ...aber ich glaub ich hab mein Problem jetzt "eingekreist"... kann also (zumindest glaube ich das :-P) sagen wo genau sich der Fehler versteckt,... nur erkennen tu ich ihn nicht.


                    Habe alle meine Cookies gelöscht und den http verkehr mitgeschnitten...

                    Beim Login über die Seite regulär wie jeder andere auch :

                    Code:
                    POST /game/reg/login2.php HTTP/1.1
                    Host: uni##.ogame.de
                    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)
                    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
                    Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
                    Accept-Encoding: gzip,deflate
                    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
                    Keep-Alive: 300
                    Connection: keep-alive
                    Referer: http://ogame.de/
                    Content-Type: application/x-www-form-urlencoded
                    Content-Length: 76
                    uni_id=1&v=2&is_utf8=0&uni_url=uni##.ogame.de&login=#####&pass=#####
                    +-+-+-+-+-+-+-+-
                    -+-+-+-+-+-+-+-+
                    HTTP/1.x 200 OK
                    Date: Fri, 15 May 2009 15:32:58 GMT
                    Server: Apache
                    [COLOR=DarkRed]Set-Cookie: PHPSESSID=e3e61bfa9538###292dfba9b575d; path=/
                    Set-Cookie: prsess_12####=9e5361f8####aed810edaa0892; expires=Sat, 16-May-2009 15:32:58 GMT; path=/
                    Set-Cookie: login_12##=U_de##%3A####%3A67a7fe8299c####8780f16fdd623a; expires=Sat, 16-May-2009 15:32:58 GMT; path=/
                    Expires: Thu, 19 Nov 1981 08:52:00 GMT[/COLOR]
                    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
                    Pragma: no-cache
                    Vary: Accept-Encoding
                    Content-Encoding: gzip
                    Content-Length: 118
                    Keep-Alive: timeout=2, max=100
                    Connection: Keep-Alive
                    Content-Type: text/html; charset=utf-8
                    Er setzt also nach dem POST Request ganz easy die 3 notwendigen Cookies...

                    danach wir automatisch der GET-Request gesendet:

                    Code:
                    GET /game/index.php?page=overview&session=6dfa###6526&lgn=1 HTTP/1.1
                    So,... aber mit MEINEM SCRIPT sende ich nun also das hier:

                    Code:
                    POST /game/reg/login2.php HTTP/1.1 
                    Host: uni##.ogame.de 
                    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 
                    Keep-Alive: 300 
                    Connection: keep-alive 
                    Refer: http://ogame.de/ 
                    Content-Type: application/x-www-form-urlencoded 
                    Content-Length: 76 
                    uni_id=1&v=2&is_utf8=0&uni_url=uni##.ogame.de&login=####&pass=####
                    Wenn ich davon aber den HTTP Header mit schneide bekomm ich das dabei raus:

                    Code:
                    GET / HTTP/1.1
                    Host: localhost
                    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)
                    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
                    Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
                    Accept-Encoding: gzip,deflate
                    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
                    Keep-Alive: 300
                    Connection: keep-alive
                    
                    HTTP/1.x 200 OK
                    Date: Fri, 15 May 2009 16:00:17 GMT
                    Server: Apache/2.2.11 (Win32) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i PHP/5.2.9
                    X-Powered-By: PHP/5.2.9
                    Content-Length: 469
                    Keep-Alive: timeout=5, max=100
                    Connection: Keep-Alive
                    Content-Type: text/html
                    wenn ich mir von dem Response den Body ausgeben lasse, werde ich weiter geleitet ... (kommt ein neuer Request von mir):

                    Code:
                    http://localhost/game/index.php?page=overview&session=28f281db93b4&lgn=1
                    
                    GET /game/index.php?page=overview&session=28f28###b93b4&lgn=1 HTTP/1.1
                    Host: localhost
                    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)
                    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
                    Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
                    Accept-Encoding: gzip,deflate
                    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
                    Keep-Alive: 300
                    Connection: keep-alive
                    
                    HTTP/1.x 404 Not Found
                    Date: Fri, 15 May 2009 16:02:07 GMT
                    Server: Apache/2.2.11 (Win32) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i PHP/5.2.9
                    Vary: accept-language,accept-charset
                    Accept-Ranges: bytes
                    Keep-Alive: timeout=5, max=97
                    Connection: Keep-Alive
                    Transfer-Encoding: chunked
                    Content-Type: text/html; charset=iso-8859-1
                    Content-Language: de
                    .... also wieder der GET-Request der erst nach dem Cookies setzen kommen sollte... da die Cookies ja aber nach dem POST-Request gar nicht gesetzt werden, werde ich deshalb auf eine "Error404 - Objekt nicht gefunden" weiter geleitet....

                    Frage also: Warum werden die set-cookies von ogame.de nur dann gesendet wenn ich mich normal über den Browser einlogge, aber nicht wenn ich den gleichen POST-Request per PHP-Script schicke????

                    Wenn ich übrigens die "Accept:"-zusätze in dem POST-Request mit schicke bekomm ich nur Hieroglyphen zurück...

                    Ich hoffe ich geh mit meinen ständig wiederholenden Fragen niemandem auf den Keks aber solangsam vergeht mir irgendwie die Lust :-((

                    Bin supiiiii dankbar für jeden weiteren Tip...
                    Zuletzt geändert von wahsaga; 15.05.2009, 18:24.

                    Kommentar


                    • #11
                      Hab' mal dein Passwort noch rauseditiert, das hattest du noch drinstehen bei den Parametern des ersten POST-Requests.

                      Zitat von Nucular Beitrag anzeigen
                      Wenn ich davon aber den HTTP Header mit schneide bekomm ich das dabei raus:

                      Code:
                      GET / HTTP/1.1
                      ...
                      Wieso steht da GET, wenn du angeblich einen POST-Request absendest?


                      Frage also: Warum werden die set-cookies von ogame.de nur dann gesendet wenn ich mich normal über den Browser einlogge, aber nicht wenn ich den gleichen POST-Request per PHP-Script schicke????
                      Vielleicht, weil die Requests doch nicht so gleich sind - und deren Script das erkennt. (Soll es ja auch, die geben sich ja schliesslich Muhe, die Teilnahme von Bots zu unterbinden.)

                      Wenn ich übrigens die "Accept:"-zusätze in dem POST-Request mit schicke bekomm ich nur Hieroglyphen zurück...
                      Wenn du angibst, per gzip oder deflate komprimierte Daten zu akzeptieren, musst du dich nicht wundern, wenn du dann auch komprimierte Daten bekommst ...
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        Refer != Referer

                        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                        Wie man Fragen richtig stellt

                        Kommentar


                        • #13
                          Hab' mal dein Passwort noch rauseditiert, das hattest du noch drinstehen bei den Parametern des ersten POST-Requests.
                          Dank dir ;-) bins extra 5mal durchgegangen und habs wohl trotzdem nicht gesehen...

                          Wieso steht da GET, wenn du angeblich einen POST-Request absendest?
                          Genau das! ist ja eine meiner Fragen... ist aber nicht falsch kopiert oder so. Ich start den HTTP-Header-sniffer führe mein Script aus, welches ganz sicher ein POST-Request sendet und mitgeschnitten wird aber tatsächlich genau dieser GET-Request... :-((

                          Vielleicht, weil die Requests doch nicht so gleich sind - und deren Script das erkennt. (Soll es ja auch, die geben sich ja schliesslich Muhe, die Teilnahme von Bots zu unterbinden.)
                          Klar versteh ich, dass heisst die Accepts sollten auch rein... gibt es den dann eine möglichkeit den Response wieder zu dekomprimieren?!?!

                          Refer != Referer
                          ^^... das ist natürlich Fatal... danke ;-)

                          Kommentar


                          • #14
                            Zitat von Nucular Beitrag anzeigen
                            Genau das! ist ja eine meiner Fragen... ist aber nicht falsch kopiert oder so. Ich start den HTTP-Header-sniffer führe mein Script aus, welches ganz sicher ein POST-Request sendet und mitgeschnitten wird aber tatsächlich genau dieser GET-Request... :-((
                            Moment, du schaust dir die Header über ein Browser-Plugin an?
                            Dabei bekommst du natürlich die Header-Kommunikation zwischen deinem Browser und deinem Script mit - aber doch nicht die zwischen deinem Script und dem anderen Server ...

                            Klar versteh ich, dass heisst die Accepts sollten auch rein... gibt es den dann eine möglichkeit den Response wieder zu dekomprimieren?!?!
                            Siehe Zlib-Funktionen im Manual.
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #15
                              Moment, du schaust dir die Header über ein Browser-Plugin an?
                              Dabei bekommst du natürlich die Header-Kommunikation zwischen deinem Browser und deinem Script mit - aber doch nicht die zwischen deinem Script und dem anderen Server ...
                              Ok wieder was gelernt,... gibts den ein Weg den Verkehr zwischen script und dem anderen server mitzuschneiden?


                              Siehe Zlib-Funktionen im Manual.
                              Das hab ich mir gerade mal angeschaut,... ich müsste also nur das was ankommt mit gzdecode dekomprimieren richtig?!...

                              Dann kommt aber bei mir der Fehler dass die Funktion nicht gefunden wird. Aber bei phpinfo() steht unter "Registered PHP Streams" --> "compress.zlib" was laut google zlib ist nur dass es umbenannt wurde...

                              Kommentar

                              Lädt...
                              X