Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[vb.net]Inloggen dmv HttpWebrequest

Pagina: 1
Acties:

  • compufreak88
  • Registratie: November 2001
  • Laatst online: 02-05 17:51
Ik probeer dmv Een HttpWebrequest in te loggen op een forum.

Het probleem is dat het inloggen zelf niet werkt. Wat ik doe is een post stuur naar member.php. Maar de response laat zien dat ik gewoon niet ben ingelogged.

De code:

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim req As HttpWebRequest = WebRequest.Create("http://ep2.nl/member.php")
        req.Method = "POST"
        req.ContentType = "application/x-www-form-urlencoded"
        req.CookieContainer = New CookieContainer()

        Dim loginForm As New loginPostForm("ikke", "****")
        Dim postData As Byte() = loginForm.getData

        req.ContentLength = postData.Length


        Dim reqStream As System.IO.Stream = req.GetRequestStream

        reqStream.Write(postData, 0, postData.Length)
        reqStream.Close()

        Dim res As HttpWebResponse = req.GetResponse
        RichTextBox1.Text = New IO.StreamReader(res.GetResponseStream).ReadToEnd


loginPostForm is een simpele class die de postString samenstelt:

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Public Class loginPostForm
    Dim username As String
    Dim password As String
    Dim action As String = "do_login"
    Dim url As String = "http://ep2.nl/index.php"
    Sub New(ByVal username As String, ByVal password As String)
        Me.username = username
        Me.password = password
    End Sub

    Function getData() As Byte()
        Dim enc As New System.Text.ASCIIEncoding
        Dim data As String

        data = "username=" & username
        data &= "&password=" & password
        data &= "&action=" & action
        data &= "&url=" & url

        Dim encData As Byte() = enc.GetBytes(data)
        Return encData
    End Function
End Class


Ik heb al overal gezocht op google, maar er wordt niet duidelijk uitgelegd wat er precies moet gebeuren. Heeft iemand hier een idee wat ik verkeerd doe?

  • Cousin Boneless
  • Registratie: Juni 2008
  • Laatst online: 28-02 12:55
Misschien zit er een controle op de referrer in dat member.php (dat er alleen vanaf dezelfde website gepost mag worden)

1) Probeer eens of het lukt met een html form vanaf een andere site.
2) Gebruik een network sniffer om je dataverkeer te monitoren. (bijv. CommView). Je kan daarmee makkelijk de verschillen in kaart brengen tussen de beoogde manier van inloggen en jouw benadering daarvan in vb.net.

[ Voor 58% gewijzigd door Cousin Boneless op 04-08-2008 23:36 ]


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 13-12-2024
wordt er niet toevallig een redirect header terug gestuurd? (waar jij dus op moet reageren)

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • compufreak88
  • Registratie: November 2001
  • Laatst online: 02-05 17:51
Ik heb een twee testpagina's gemaakt, om te testen of daarop inloggen lukt.

Het zijn twee simpele pagina's. 1 die het de postwaarden controleert, de sessie set, en een locationheader stuurt, en de andere die die sessie controleert.

De vbcode die ik gebruik is:

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Dim req As HttpWebRequest = WebRequest.Create("http://localhost/php/test.php")
        Dim cookieJar As New CookieContainer
        req.Method = "POST"
        req.ContentType = "application/x-www-form-urlencoded"
        req.Referer = "http://ep2.nl/member.php?action=login"
        req.CookieContainer = cookieJar
        req.AllowAutoRedirect = False

        Dim loginForm As New loginPostForm("test", "test1", "") 'get_post_key())
        Dim postData As Byte() = loginForm.getData

        req.ContentLength = postData.Length


        Dim reqStream As System.IO.Stream = req.GetRequestStream

        reqStream.Write(postData, 0, postData.Length)
        reqStream.Close()


        Dim res As HttpWebResponse = req.GetResponse

        Dim newLocation As String = "http://localhost/php/" & res.GetResponseHeader("location")
        req = WebRequest.Create(newLocation)
        req.CookieContainer = cookieJar

        res = req.GetResponse

        RichTextBox1.Text = New IO.StreamReader(res.GetResponseStream).ReadToEnd


Ik ga dus zelf naar de pagina meegeven in de locationheader, en geef de cookiecontainer mee. Maar alsnog zegt hij dat ik niet ben ingelogd.

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Cousin Boneless schreef op maandag 04 augustus 2008 @ 22:50:
2) Gebruik een network sniffer om je dataverkeer te monitoren. (bijv. CommView). Je kan daarmee makkelijk de verschillen in kaart brengen tussen de beoogde manier van inloggen en jouw benadering daarvan in vb.net.
Wat je ook kunt proberen is een lokale proxy, zoals Proxomitron. Deze biedt een lokale proxy die reclamebanners e.d. uit je pagina stript alvorens ze door te geven aan je browser, maar het heeft ook een logwindow dat alle HTTP requests van je browser / responses van de server kan tonen.

Toegegeven, dit tooltje is lang niet zo flexibel (voor dit doeleinde) als een echte sniffer, maar het kan net genoeg zijn voor dit doeleinde.

  • Cousin Boneless
  • Registratie: Juni 2008
  • Laatst online: 28-02 12:55
En als je dan een proxy inzet (Fiddler is ook bruikbaar en gratis) zie je meteen dat er meer en andere data verzonden wordt:

my_post_key=e73a5a5e400537f1524843c1a1259433&username=test+user&password=test+password&submit=Aanmelden&action=do_login&url=

Edit: ik zie dat het een MyBB forum is.. dus is het dan niet eenvoudiger om de source van dat forum er eens bij te pakken en na te gaan waarop gecontroleerd wordt?

[ Voor 24% gewijzigd door Cousin Boneless op 06-08-2008 10:04 ]


  • compufreak88
  • Registratie: November 2001
  • Laatst online: 02-05 17:51
Ik heb de source er al bij gehad (dacht dat ik dat hier al gepost had), en er vind geen bijzondere controle plaats.

Ik zal is kijken naar proxomitron.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Moet je regel 25 van je voorbeeld niet gewoon uitvoeren voordat je je data naar de client stuurt? Het lijkt me namenlijk dat dat request in zijn response een cookie zet die je bij een volgende request weer mee moet sturen zodat de webserver weet welke user je bent.
O ik heb niet goed gelezen. Maar zie je in CookieContainer wel dat er een cookie gezet is?

[ Voor 15% gewijzigd door Woy op 06-08-2008 14:17 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • compufreak88
  • Registratie: November 2001
  • Laatst online: 02-05 17:51
Als ik de count property uitlees, zegt hij dat er in mijn testvoorbeeld 1 cookie inzit, en op het forum zitten er 3 cookies in.

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Zitten er toevallig vreemde tekens in de username/wachtwoord/action/url? Die methode getData() ziet er gek en ongeescaped uit.

Dit lijkt me een relevante link, dan kun je gewoon uploadvalues gebruiken denk ik.

[ Voor 67% gewijzigd door pedorus op 06-08-2008 16:28 ]

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Pagina: 1