Zum Inhalt wechseln

Als Gast hast du nur eingeschränkten Zugriff!


Anmelden 

Benutzerkonto erstellen

Du bist nicht angemeldet und hast somit nur einen sehr eingeschränkten Zugriff auf die Features unserer Community.
Um vollen Zugriff zu erlangen musst du dir einen Account erstellen. Der Vorgang sollte nicht länger als 1 Minute dauern.

  • Antworte auf Themen oder erstelle deine eigenen.
  • Schalte dir alle Downloads mit Highspeed & ohne Wartezeit frei.
  • Erhalte Zugriff auf alle Bereiche und entdecke interessante Inhalte.
  • Tausche dich mich anderen Usern in der Shoutbox oder via PN aus.
 

   

Foto

Frage zu Login per POST/GET Request

- - - - -

  • Bitte melde dich an um zu Antworten
7 Antworten in diesem Thema

#1
13asim37

13asim37

    Noob

  • Members
  • PIPPIP
  • Likes
    1
  • 6 Beiträge
  • 0 Bedankt

Hallo Community,

ich möchte mich bei einer Internetseite per POST Request einloggen und anhand des GET Requests entscheiden, ob der Login erfolgreich war.

Ich logge mich ein und schaue mir den entsprechenden POST/GET Request mit den Chrome Developer Tool an, jedoch weiß ich nicht, wie ich dieses Request mit C+ nachbilden kann.

 

Was wird da jetzt genau hingesendet?

Please Login HERE or Register HERE to see this link!

Please Login HERE or Register HERE to see this link!

 

Habe das ganze auch per HTTP Live Header getestet, da scheint man wenigstens einen String zu sehen, den er dann wohl hinschickt?

Gibt es nirgends eine ordentliche Dokumentation oder sowas, wie sowas genau funktioniert?

Please Login HERE or Register HERE to see this link!

 

Kann mir jemand weiterhelfen?

 



#2
B1nary

B1nary

    Samurai

  • Elite Member
  • Likes
    489
  • 506 Beiträge
  • 346 Bedankt

In welcher Scriptsprache möchtest du einen Post-Request absetzen?

Generell sind hier

Please Login HERE or Register HERE to see this link!

alle nötigen Parameter in der von dir geschwärzten Zeile vorgegeben. Anhand der Parameter kannst du dir nun den passenden Post-String zusammen basteln. Die Token lassen sich meist aus einem hidden Inputfield herauslesen.

 

Ob du danach den Login-Status via GET abfragen kannst, ist abhängig von der Website. Wenn diese auf domain.com/home.php oder ?login=true etc. weiterleitet, kannst du das machen. Ansonsten würde ich eher den Seitenquelltext parsen und schauen, ob gängige Schlagworte wie "Willkommen" oder "Logout/Abmelden" auftauchen.

 

Edit:

Eine Dokumentation zum Addon Live HTTP Headers bringt dir nicht viel. Im Endeffekt stellt es u.a. nur den Request/Response Traffic zwischen dir (Client) und der Website (Server) da. Diesbezüglich kannst du dich auf

Please Login HERE or Register HERE to see this link!

schlau machen


Bearbeitet von B1nary, 19 February 2017 - 20:06 Uhr.


#3
13asim37

13asim37

    Noob

  • Members
  • PIPPIP
  • Likes
    1
  • 6 Beiträge
  • 0 Bedankt

Danke für deine schnell Antwort. Ich möchte das ganze mit C# realisieren.

 

 

Die Token lassen sich meist aus einem hidden Inputfield herauslesen.

Meinst du damit den Quelltext der Seite einmal vor dem Senden des POST-Requests auslesen und das benötigte Token aus dem Quelltext extrahieren?

Ändert sich dieses pro Aufruf bzw. Session? Woran erkennt die Seite, dass ich das richtige schicke? Muss ich da noch einen Cookie oder sowas mitsenden?

Nehme ich dazu in C# die HttpRequest oder die WebClient Klasse.

 

Ich meinte nicht unbedingt eine Dokumentation für das Addon, sondern eher allgemein wie man Logins per POST/GET Requests macht. Ich suche jetzt schon mehrere Stunden und nirgends gibt es ein erklärtes Beispiel.

 

EDIT: Mir scheint mir fehlt allgemein das wissen für sowas, aber wo fange ich da an. Was POST/GET usw. ist weiß ich schon, aber man müsste ja für jede Seite dahintersteigen, wie deren Login funktioniert, aber die Requests sagen mir gar nichts.

So ähnlich wie in Live HTTP Headers sollte das, was man dann sendet (wie auch immer das funktioniert) wohl später aussehen, aber angenommen man geht nur vom Chrome aus, woher weiß man wie man das Request zusammenbaut?


Bearbeitet von 13asim37, 19 February 2017 - 20:22 Uhr.


#4
B1nary

B1nary

    Samurai

  • Elite Member
  • Likes
    489
  • 506 Beiträge
  • 346 Bedankt

Meinst du damit den Quelltext der Seite einmal vor dem Senden des POST-Requests auslesen und das benötigte Token aus dem Quelltext extrahieren?

 

Genau, du rufst die Seite auf, liest den Token aus und sendest diesen zusammen mit den restlichen Post-Werten an den Server. Der Token sollte sich natürlich je Aufruf ändern, sonst macht's keinen Sinn und du könntest das ganze mit dem Token hardcoden. Das Cookie wird nach dem erfolgreichen Login durch die Website erstellt und validiert deine Sitzung (= erfolgreicher Login).

 

Eine sehr simple Implementierung eines Logins via Post-Request könnte so aussehen (Python):

postval = {"token": "abc12345", "username": "jondoe", "password": "meh"}
loginurl = "http://www.website.com/login.php"
requests.post(loginurl, data=postval)


#5
13asim37

13asim37

    Noob

  • Members
  • PIPPIP
  • Likes
    1
  • 6 Beiträge
  • 0 Bedankt

So, das Gründgerüst steht:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

namespace cyberport
{
    class Program
    {
        static void Main(string[] args)
        {
            #region
            string result;
            string parameter, email = "xxx", password = "xxx";
            CookieContainer cookieJar = new CookieContainer();

            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("https://www.cyberport.de/");
            request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0";
            request.ContentType = "application/x-www-form-urlencoded";
            request.Referer = "https://www.cyberport.de/";
            request.CookieContainer = cookieJar;
            request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            request.Method = "POST";
            request.KeepAlive = true;
            request.AllowAutoRedirect = true;
            //request.Headers.Add("Accept-Language: de,en-US;q=0.7,en;q=0.3");
            //request.Headers.Add("Accept-Encoding: gzip, deflate, br");

            parameter = "nextscript=https%3A%2F%2Fwww.cyberport.de%2F&__POSTBACK=quickLogin&scriptMode=shop&token=" + getToken() + "&EMAIL="
                + email + "&password=" + password + "&submit.x=23&submit.y=10";

            byte[] byteArray = Encoding.ASCII.GetBytes(parameter);
            request.ContentLength = byteArray.Length;

            //using (Stream stream = request.GetRequestStream())
            //    stream.Write(byteArray, 0, byteArray.Length);

            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            result = new StreamReader(response.GetResponseStream()).ReadToEnd();
            //using (StreamReader sr = new StreamReader(response.GetResponseStream()))
            //    result = sr.ReadToEnd();

            File.WriteAllText(@"C:\Users\Admin\Desktop\yyy.txt", result);

            Console.WriteLine(result);
            Console.WriteLine("d0ne.");
            Console.ReadLine();
            Console.ReadLine();
            #endregion
        }

        private static string getToken()
        {
            string html;
            using (WebClient client = new WebClient())
                html = client.DownloadString("https://www.cyberport.de/");

            int position = html.IndexOf("id=\"loginform\"");
            html = html.Substring(position, html.Length - position);
            position = html.IndexOf("<input type=\"hidden\" name=\"token\" value=\"");
            return html.Substring(position + 41, 32);
        }
    }
}
 

Müssen alle Infos von Live HTTP Headers mit rein und falls nein, woher weiß ich, welche wirklich nötig sind?

Sobald man sich den Response Stream ausgeben lässt, erhält man einen nicht lesbaren Zeichensatz. Anfangs dachte ich, es wäre ein Encodingfehler, allerdings habe ich dem StreamReader jetzt schon einige Encodings mitgebenen, jedoch vergebens.

Ich denke, dass mein Request noch nicht korrekt ist. Brauche ich den CookieContainer?

Habe die Parameter erst als String übergeben, habe dann aber auf SO irgendwo gelesen, dass diese als byte Array übergeben werden, ist das korrekt so?

Im Quelltext sind mehrere Token vorhanden, wenn ich jedoch den Quelltext im FF anzeigen lasse, mich anschließend im Browser einlogge und dann den Request anschaue, handelt es sich um einen komplett anderes Token. Meine Funktion nimmt jetzt einfach mal den 2. Token, neben der LoginForm, dass erschien mir irgendwie am naheliegendsten.


Bearbeitet von 13asim37, 22 February 2017 - 22:07 Uhr.


#6
pi^2

pi^2

    Hacker

  • Premium Member
  • Likes
    273
  • 181 Beiträge
  • 46 Bedankt

Hab zwar grade erst mit C# angefangen lese aber nichts von der Verwendung der HTTPClient Klasse.

Die lässt sich viel unkomplizierter nutzen und du bekommst keinen (vermutlich) Bytestream zum entziffern:

using (var client = new HttpClient())
{
    var values = new Dictionary<string, string>
    {
       { "param1", "value1" },
       { "param2", "value2" }
    };

    var content = new FormUrlEncodedContent(values);
    var response = await client.PostAsync("http://www.example.com/post.php", content);
    var responseString = await response.Content.ReadAsStringAsync();
}


#7
13asim37

13asim37

    Noob

  • Members
  • PIPPIP
  • Likes
    1
  • 6 Beiträge
  • 0 Bedankt

Leider kann ich mit deiner Antwort nicht viel anfangen. Der HttpClient scheint zwar ein tolles neues Feature des .NET Framework 4.5 zu sein, jedoch hast du nicht kompilierbaren Code gepostet und zum anderen lese ich immer nur "bei Authentifizierung mit einer Web API". Es mag sein, dass man daduirch elegant Requests senden kann, allerdings kann ich es auf meinen Fall nicht anwenden.

 

Würde mich über spezifische Hilfe freuen.

 

EDIT: Ohne irgendwie ne vernünftige API Doc gefunden zu haben, mal folgendes, funktionert aber auch nicht.

        static async void Run()
        {
            // Create an HttpClient instance
            HttpClient client = new HttpClient();

            var content = new Dictionary<string, string>();
            content.Add("fgjisdgj@web.de", "sdfgsdgfASDF");
            var values = new FormUrlEncodedContent(content);
            var httpResponseMessage = await client.PostAsync("https://www.cyberport.de", values);
            var responseString = await httpResponseMessage.Content.ReadAsStringAsync();
            File.WriteAllText(@"C:\Users\Admin\Desktop\cyberport_result.txt", responseString);
        }

Bearbeitet von 13asim37, 20 February 2017 - 22:20 Uhr.


#8
Born2Hack

Born2Hack

    = B2H =

  • Elite Member
  • Likes
    369
  • 208 Beiträge
  • 416 Bedankt

Habe es gerade mal ausprobiert in VB.NET und es funktioniert perfekt !

Du kannst es ja in C# konvertieren z.B  [

Please Login HERE or Register HERE to see this link!

]
 

Imports System.IO
Imports System.Net
Imports System.Text

Public Class Form1

    Dim cookieCon As New CookieContainer
    Dim request As HttpWebRequest
    Dim response As HttpWebResponse
    Dim Mail As String = "xxxxxxxxxxx"
    Dim Password As String = "xxxxxxxxxx"

    Public Function POST_Request(ByVal url As String, ByVal post As String) As String
        request = CType(HttpWebRequest.Create(url), HttpWebRequest)
        request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0"
        request.ContentType = "application/x-www-form-urlencoded"
        request.Referer = "https://www.cyberport.de/"
        request.CookieContainer = cookieCon
        request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
        request.Host = "www.cyberport.de"
        request.Method = "POST"
        request.KeepAlive = True
        request.AllowAutoRedirect = True
        Dim byteArr() As Byte = Encoding.Default.GetBytes(post)
        request.ContentLength = byteArr.Length
        Dim dataStream As Stream = request.GetRequestStream()
        dataStream.Write(byteArr, 0, byteArr.Length)
        response = CType(request.GetResponse(), HttpWebResponse)
        Return New StreamReader(response.GetResponseStream()).ReadToEnd()
    End Function

    Public Function GetBetween(ByRef strSource As String, ByRef strStart As String, ByRef strEnd As String, Optional ByRef startPos As Integer = 0) As String
        Dim iPos As Integer, iEnd As Integer, lenStart As Integer = strStart.Length
        Dim strResult As String
        strResult = String.Empty
        iPos = strSource.IndexOf(strStart, startPos)
        iEnd = strSource.IndexOf(strEnd, iPos + lenStart)
        If iPos <> -1 AndAlso iEnd <> -1 Then
            strResult = strSource.Substring(iPos + lenStart, iEnd - (iPos + lenStart))
        End If
        Return strResult
    End Function

    Private Sub Login()
       
        Dim Quellcode As String = POST_Request("https://www.cyberport.de/", "")
        Dim token As String = GetBetween(Quellcode, "passwordlostlayer?token=", "'")
        
        If POST_Request("https://www.cyberport.de/", "nextscript=https%3A%2F%2Fwww.cyberport.de%2F&__POSTBACK=quickLogin&scriptMode=shop&token=" & token & "&EMAIL=" & Mail & "&password=" & Password & "&submit.x=0&submit.y=0").Contains("https://www.cyberport.de/logout.html") Then
            MsgBox("Account Daten sind gültig ;)")
        Else
            MsgBox("Zugangsdaten inkorrekt!")
        End If

    End Sub

End Class

 


Bearbeitet von Born2Hack, 21 February 2017 - 00:10 Uhr.

  • JohnR, Hansiberg und cubik gefällt das

q8t3oz6o.png

 

 




  Thema Forum Themenstarter Statistik Letzter Beitrag

Dieses Thema wurde von 36 Mitglied(ern) gelesen


    13asim37, Alsuna, B1nary, Babo187, Blackhook, bones, Born2Hack, Bot4ng, Bypass, cubik, Derik, dos, easysurfer, Framerater, Franziskaner, Freshpolak, hacke2010, Hansiberg, Jackdaniels, JohnR, Juri, Kaase, KartRazer, keyb0ardz, kiwitone, n1nja, o0o, PadX18, pi^2, pwcca, rat123, SecurityFlaw, smc2014, Smn, Vutra, ZeroC00L
Die besten Hacking Tools zum downloaden : Released, Leaked, Cracked. Größte deutschsprachige Hacker Sammlung.