[gelöst] HTTPMOD - Website hat login-Verfahren geändert

Begonnen von Vize, 05 März 2017, 11:49:32

Vorheriges Thema - Nächstes Thema

Vize

Hallo zusammen,

vor ein paar Tagen hat der Betreiber des online-Monitorings meiner PV-Anlage mit Batteriespeicher die Seite im größeren Stile geändert.
Auch das login-Prozedere wurde dabei umgestellt (JSON -> HTML oder so).
Seit dem funktioniert das Abholen der aktuellen Monitoring-Werte per HTTPMOD nicht mehr.

Zuvor klappte es mit einem HTTPMOD-Device mit folgenden Atrributen (für den login):

sid1Data, sid1Header1, sid1Header2, sid1URL, reAuthRegex, extractAllJSON

In sid1Data steckten die Angaben für user und Passwort, in sid1URL stand der link zur Login-seite.
Per reAuthRegex wurde dann der login durchgeführt, und mit extractAllJSON wurden dann die entsprechenden Readings angelegt und kontinuierlich aktualisiert.

Folgendes habe ich bereits über die Entwickler-Werkzeuge im Firefox herausgefunden (mit burp kann ich die Seite aus irgendwelchen Gründen nicht aufrufen):

"Hauptlink": https://mein-senec.de


Die gewünschten Daten stecken nun hier: https://mein-senec.de/endkunde/api/status/getstatusoverview.php?anlageNummer=0

Der "login-Durchlauf" sieht so aus:
Nach Eingabe der login-Daten wird diese Unterseite aufgerufen: https://mein-senec.de/endkunde/auth/authenticate
Dort erscheinen dann unter Parameter die login-Daten als Formulardaten in dieser Form: username=email@email.de&passwort=geheim bzw. wie im beigefügten screenshot
Dann werden diverse scripte und andere Unterseiten verarbeitet, und man gelangt auf die Seite mit den aktuellen Monitoring-Daten, s.o..

Ich habe die einzelnen Seiten, die mir dabei aufgefallen sind, mit den jeweiligen Daten der Kopfzeilen, Cookies, Parameter und Antworten aus den Firefox-Entwicklerwerkzeugen mal als zip-Datei beigefügt, da es sehr viele screenshots geworden sind.

Dabei folgende Nummerierung der Seiten in den screenshots:
Nr.   Unterseite
1   authenticate
2   /endkunde/
3   getEndkunde
4   getAnlage?anlageNummer=0
5   getstatusoverview.php?anlageNummer=0

Ich habe zur Zeit leider keinen Plan, wie ich nun ein entsprechendes HTTPMOD-Device aufbauen muss, um wieder an die Daten zu kommen, bzw. ich weiß nicht, ob es überhaupt noch per HTTPMOD funktioniert.
Ein einfaches Austauschen der login-Daten und URLs im "alten" HTTPMOD-Device bringt keinen Erfolg.

So, ich hoffe, ich habe jetzt nicht zuviel Verwirrung gestiftet, und vielleicht kann ja jemand helfen oder mir ein paar Tipps dazu geben.

Vielen Dank schonmal!

Gruß
Andreas

Vize

Moin,

dies habe ich noch zusätzlich herausgefunden:

Beim ersten Aufruf der homepage erhält man beim login von der Unterseite "https://mein-senec.de/auth/authenticate" folgendes als Antworttext in den Entwicklertools des browsers:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <link rel="shortcut icon" type="image/vnd.microsoft.icon"
          href="/VAADIN/themes/meinsenec/favicon.ico"/>
    <link rel="icon" type="image/vnd.microsoft.icon" href="/VAADIN/themes/meinsenec/favicon.ico"/>
    <link rel="stylesheet" href="/VAADIN/themes/meinsenec/styles.css" type="text/css">
    <base href="">

    <title>Login Portal</title>
</head>
<body>

<script type="text/javascript">

    // The rest of this code assumes you are not using a library.
    // It can be made less wordy if you use one.
    var form = document.createElement("form");
    form.setAttribute("method", "post");
    form.setAttribute("action", "/endkunde/auth/authenticate");

    var usernameField = document.createElement("input");
    usernameField.setAttribute("type", "hidden");
    usernameField.setAttribute("name", "username");
    usernameField.setAttribute("value", "user@email.de");

    form.appendChild(usernameField);

    var passwortField = document.createElement("input");
    passwortField.setAttribute("type", "hidden");
    passwortField.setAttribute("name", "passwort");
    passwortField.setAttribute("value", "geheim");

    form.appendChild(passwortField);

    document.body.appendChild(form);
    form.submit();

</script>

<div class="loginform-wrapper">

    <div class="title-area">
        <div class="logo"></div>
    </div>

    <div id="loginContainer" class="login-form-area">
        TEST
    </div>

    <div class="title-row">Login Portal</div>
    <div class="status-text">
        <span>Version 2.0.0-SNAPSHOT-
            201703061646</span>
    </div>
</div>
</body>
</html>


mit username und passwort.

Vielleicht weiß jemand damit was anzufangen...ich komme leider mit dem login-Prozedere per HTTPMOD noch nicht weiter...

Gruß
Andreas

ch.eick

Hallo.
helfen kann ich leider nicht, jedoch habe ich ein ähnliches Problem. Ich möchte mich auf der https://cloud.vallox.com Seite anmelden und scheitere bei der Übergabe von username und passwort. Laut trace im Browser soll es als username=user@email.de&passwort=yyyy übergeben werden.
Kannst Du mir Deine bisherige Konfiguration mal als Beispiel geben?

sid1Data username=user@email.de&passwort=yyyy
sid1Header1 ???
sid1Header2 ???
sid1URL https://cloud.vallox.com/
reAuthRegex
extractAllJSON <== vallox stellt die Daten auch als json liste dar, was ich über einen curl Aufruf (mit offener session) bereits lesen kann

In der Hoffnung, dass Dein Beispiel bei mir passen könnte :-)

Gruß
  Christian

P.S. Am Anfang ist ja sooooo viel zu lernen

FHEM 5.8; Rpi 2b; Jessie

RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Vize

Hi,

klar, hier mein Versuch, aber klappt wie gesagt nicht...
Komme beim login nicht weiter.
Weiß auch nicht genau, ob die Header-Daten passen...

Die gewünschten Daten liegen dort ebenfalls als json-Liste vor.

Gruß
Andreas

DEF
https://mein-senec.de/endkunde/api/status/getstatusoverview.php?anlageNummer=0 60

Attribute
   enableCookies 1
   extractAllJSON 1
   reAuthRegex .*
   sid1Data   username=e@mail.de&passwort=geheim
   sid1Header1 Content-Type: text/html
   sid1Header2 Accept: */*
   sid1URL    https://mein-senec.de/auth/authenticate

ch.eick

Hallo Anreas.

viele Dank erst ein mal. Ich hatte es so verstanden, dass eine Verbindung schon mal funktionierte und diese Konfiguration wollte ich dann als Muster für meine Verbindung verwenden.

Bei mir ist es momentan so, dass ich über den Browser ein Login machen kann und anschließend z.B. einen get Request mit curl von der Shell aus machen kann.
Dabei wird die komplette Session Autorisierung von mir kopier und mit keep-alive offen gehalten.

In diesem Zustand kann ich mit get oder post kommunizieren und meine KWL zuhause reagiert auch darauf. Die Daten werden hierbei mit json übertragen und ich kann die modbus Felder mit der Dokumentation entsprechend zuordnen.

Nun versuche ich gerade mit httpmod über das Login hinweg zu kommen. War Dein Beispiel nun das alte, was funktioniert hat oder das neue ohne Funktion?

Viele Grüße
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Vize

Hi Christian,

das ist schon das neue, nicht funktionierende.

Das alte habe ich damit überschrieben, so dass ich die kompletten Daten von damals wohl nicht mehr zusammen bekomme...sorry.

Gruß
Andreas

ch.eick

#6
Hi Andreas,

die werden in der fhem.cfg abgelegt und sind dann in Deiner Datensicherung ;-)
Oder in der alten Log Datei, als Du das device eingerichtet hast.

Ansonsten schade, schade, funktionierende Beispiele sind immer Gold wert.

Gruß und Danke
     Christian


Ich bin dann jetzt zu https://forum.fhem.de/index.php/topic,45176.msg600969.html#msg600969 gewechselt. Da steht alles noch umfangreicher und mit Konfiguration
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Vize

Bei mir sieht es jetzt so aus, funktioniert aber noch nicht.

Einiges wird in das login-Formular schon übertragen, aber dann geht's nicht weiter...siehe Anmerkungen im zweiten code.
Im Moment hab ich auch keine Idee mehr...  :-\

Gruß
Andreas

DEF und Attribute
https://mein-senec.de/endkunde/api/status/getstatusoverview.php?anlageNummer=0 60

enableCookies 1
extractAllJSON 1
reAuthRegex .*Error.*
sid1Data   username=e%40mail.de&passwort=geheim
sid1Header1 Content-Type: application/x-www-form-urlencoded
sid1Header2 Accept: */*
sid1URL    https://mein-senec.de/auth/authenticate


im log erscheint dann mit verbose 4

2017.03.07 18:18:29 4: httpmod_senec_neu_login: GetUpdate called (update)
2017.03.07 18:18:29 4: httpmod_senec_neu_login: update timer modified: will call GetUpdate in 60.0 seconds at 2017-03-07 18:19:29
2017.03.07 18:18:29 4: httpmod_senec_neu_login: AddToQueue adds update, initial queue len: 0
2017.03.07 18:18:29 4: httpmod_senec_neu_login: HandleSendQueue sends request type update to URL https://mein-senec.de/endkunde/api/status/getstatusoverview.php?anlageNummer=0, No Data,
header: Cookie: JSESSIONID=s-AclKYuW18iyhQK53h_ToFaf4vnQxs_c-4Klex8.application01,
timeout 2
2017.03.07 18:18:29 4: HttpUtils url=https://mein-senec.de/endkunde/api/status/getstatusoverview.php?anlageNummer=0
2017.03.07 18:18:29 4: https://mein-senec.de/endkunde/api/status/getstatusoverview.php?anlageNummer=0: HTTP response code 500
2017.03.07 18:18:29 4: HttpUtils https://mein-senec.de/endkunde/api/status/getstatusoverview.php?anlageNummer=0: Got data, length: 1465
2017.03.07 18:18:29 4: httpmod_senec_neu_login: Read callback: request type was update retry 0,
Header: HTTP/1.1 500 Internal Server Error
Date: Tue, 07 Mar 2017 17:18:29 GMT
Server: Apache/2.4.23 (Fedora) OpenSSL/1.0.2j-fips PHP/5.6.29
Content-Type: text/html;charset=UTF-8
Content-Length: 1465
Connection: close,
Body:



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="shortcut icon" type="image/vnd.microsoft.icon"
href="/endkunde/VAADIN/themes/pip/favicon.ico" />
<link rel="icon" type="image/vnd.microsoft.icon"
href="/endkunde/VAADIN/themes/pip/favicon.ico" />
<link rel="stylesheet"
href="/endkunde/VAADIN/themes/pip/styles.css"
type="text/css">
<base href="/endkunde">
<title>MeinSenec - Fehler</title>
</head>
<body>
<div class="v-Notification error v-Notification-error" style="width: 640px; margin: 200px auto 0px auto;">
<div class="popupContent">
<div class="gwt-HTML">
<h1>Unerwarteter Fehler!</h1>
<div style="font-size: 10px; text-align: left;">
<div>
Fehler: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is com.senecies.meinsenec.utils.security.AccessDeniedException: Not logged in!
</div>
<div>
Bitte wenden Sie sich an Ihren Administrator und teilen Sie ihm den Fehlercode mit.<br />
Vielen Dank für Ihr Verständnis.
</div>
<div>Klicken Sie <a href="/endkunde">hier</a> um zur Anwendung zurückzugelangen oder
<a href="/endkunde/logout">hier</a> um sich neu anzumelden.
</div>
</div>
</div>
</div>
</div>
</body>
</html>no error
2017.03.07 18:18:29 3: httpmod_senec_neu_login: error while parsing JSON data: malformed JSON string, neither array, object, number, string or atom, at character offset 4 (before "<!DOCTYPE html PUBLI...") at (eval 1618786) line 1.

2017.03.07 18:18:29 4: httpmod_senec_neu_login: CheckAuth decided new authentication required
2017.03.07 18:18:29 4: httpmod_senec_neu_login: Auth called with Steps: 1
2017.03.07 18:18:29 4: httpmod_senec_neu_login: AddToQueue adds auth1, initial queue len: 0, prio
2017.03.07 18:18:29 4: httpmod_senec_neu_login: HandleSendQueue sends request type auth1 to URL https://mein-senec.de/auth/authenticate,
data: username=e%40mail.de&passwort=geheim, <========== die Formulardaten (sid1Data)
header: Content-Type: application/x-www-form-urlencoded
Accept: */*
Cookie: JSESSIONID=s-AclKYuW18iyhQK53h_ToFaf4vnQxs_c-4Klex8.application01,
timeout 2
2017.03.07 18:18:29 4: HttpUtils url=https://mein-senec.de/auth/authenticate
2017.03.07 18:18:29 4: httpmod_senec_neu_login: AddToQueue adds update, initial queue len: 0
2017.03.07 18:18:29 4: httpmod_senec_neu_login: CheckAuth requeued request update after auth, retryCount 0 ...
2017.03.07 18:18:30 4: https://mein-senec.de/auth/authenticate: HTTP response code 200
2017.03.07 18:18:30 4: HttpUtils https://mein-senec.de/auth/authenticate: Got data, length: 1819
2017.03.07 18:18:30 4: httpmod_senec_neu_login: Read callback: request type was auth1 retry 0,
Header: HTTP/1.1 200 OK
Date: Tue, 07 Mar 2017 17:18:30 GMT
Server: WildFly/10
X-Powered-By: Undertow/1
X-Powered-By: JSP/2.3
Set-Cookie: JSESSIONID=ANBSawZD9b6MndGqL7goVMWAsYkLL3Z453Sl0soV.application01; path=/
Content-Type: text/html;charset=UTF-8
Content-Language: en-
Connection: close,
Body:




<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <link rel="shortcut icon" type="image/vnd.microsoft.icon"
          href="/VAADIN/themes/meinsenec/favicon.ico"/>
    <link rel="icon" type="image/vnd.microsoft.icon" href="/VAADIN/themes/meinsenec/favicon.ico"/>
    <link rel="stylesheet" href="/VAADIN/themes/meinsenec/styles.css" type="text/css">
    <base href="">

    <title>Login Portal</title>
</head>
<body>

<script type="text/javascript">

    // The rest of this code assumes you are not using a library.
    // It can be made less wordy if you use one.
    var form = document.createElement("form");
    form.setAttribute("method", "post");
    form.setAttribute("action", "/endkunde/auth/authenticate");

    var usernameField = document.createElement("input");
    usernameField.setAttribute("type", "hidden");
    usernameField.setAttribute("name", "username");
    usernameField.setAttribute("value", "e@mail.de"); <========== wurde korrekt eingefügt

    form.appendChild(usernameField);

    var passwortField = document.createElement("input");
    passwortField.setAttribute("type", "hidden");
    passwortField.setAttribute("name", "passwort");
    passwortField.setAttribute("value", "geheim"); <========== wurde korrekt eingefügt

    form.appendChild(passwortField);

    document.body.appendChild(form);
    form.submit();

</script>

<div class="loginform-wrapper">

    <div class="title-area">
        <div class="logo"></div>
    </div>

    <div id="loginContainer" class="login-form-area">
        TEST
    </div>

    <div class="title-row">Login Portal</div>
    <div class="status-text">
        <span>Version 2.0.0-SNAPSHOT-
            201703061646</span>
    </div>
</div>
</body>
</html>no error
2017.03.07 18:18:30 3: httpmod_senec_neu_login: error while parsing JSON data: malformed JSON string, neither array, object, number, string or atom, at character offset 5 (before "<!DOCTYPE html PUBLI...") at (eval 1618788) line 1.

2017.03.07 18:18:30 4: httpmod_senec_neu_login: Cookie: JSESSIONID Wert ANBSawZD9b6MndGqL7goVMWAsYkLL3Z453Sl0soV.application01 Rest path=/
2017.03.07 18:18:30 4: httpmod_senec_neu_login: HandleSendQueue sends request type update to URL https://mein-senec.de/endkunde/api/status/getstatusoverview.php?anlageNummer=0, No Data,
header: Cookie: JSESSIONID=ANBSawZD9b6MndGqL7goVMWAsYkLL3Z453Sl0soV.application01,
timeout 2
2017.03.07 18:18:30 4: HttpUtils url=https://mein-senec.de/endkunde/api/status/getstatusoverview.php?anlageNummer=0
2017.03.07 18:18:31 4: https://mein-senec.de/endkunde/api/status/getstatusoverview.php?anlageNummer=0: HTTP response code 500
2017.03.07 18:18:31 4: HttpUtils https://mein-senec.de/endkunde/api/status/getstatusoverview.php?anlageNummer=0: Got data, length: 1465
2017.03.07 18:18:31 4: httpmod_senec_neu_login: Read callback: request type was update retry 1,
Header: HTTP/1.1 500 Internal Server Error
Date: Tue, 07 Mar 2017 17:18:31 GMT
Server: Apache/2.4.23 (Fedora) OpenSSL/1.0.2j-fips PHP/5.6.29
Set-Cookie: JSESSIONID=m3KBbjI7w1lReX2JW7XppvYXgmt--zik5d6BnBrt.application01; path=/endkunde; HttpOnly
Content-Type: text/html;charset=UTF-8
Content-Length: 1465
Connection: close,
Body:



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="shortcut icon" type="image/vnd.microsoft.icon"
href="/endkunde/VAADIN/themes/pip/favicon.ico" />
<link rel="icon" type="image/vnd.microsoft.icon"
href="/endkunde/VAADIN/themes/pip/favicon.ico" />
<link rel="stylesheet"
href="/endkunde/VAADIN/themes/pip/styles.css"
type="text/css">
<base href="/endkunde">
<title>MeinSenec - Fehler</title>
</head>
<body>
<div class="v-Notification error v-Notification-error" style="width: 640px; margin: 200px auto 0px auto;">
<div class="popupContent">
<div class="gwt-HTML">
<h1>Unerwarteter Fehler!</h1>
<div style="font-size: 10px; text-align: left;">
<div>
Fehler: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is com.senecies.meinsenec.utils.security.AccessDeniedException: Not logged in!
</div>
<div>
Bitte wenden Sie sich an Ihren Administrator und teilen Sie ihm den Fehlercode mit.<br />
Vielen Dank für Ihr Verständnis.
</div>
<div>Klicken Sie <a href="/endkunde">hier</a> um zur Anwendung zurückzugelangen oder
<a href="/endkunde/logout">hier</a> um sich neu anzumelden.
</div>
</div>
</div>
</div>
</div>
</body>
</html>no error
2017.03.07 18:18:31 3: httpmod_senec_neu_login: error while parsing JSON data: malformed JSON string, neither array, object, number, string or atom, at character offset 4 (before "<!DOCTYPE html PUBLI...") at (eval 1618790) line 1.

2017.03.07 18:18:31 4: httpmod_senec_neu_login: Cookie: JSESSIONID Wert m3KBbjI7w1lReX2JW7XppvYXgmt--zik5d6BnBrt.application01 Rest path=/endkunde; HttpOnly
2017.03.07 18:18:31 4: httpmod_senec_neu_login: CheckAuth decided new authentication required
2017.03.07 18:18:31 4: httpmod_senec_neu_login: Authentication still required but no retries left - did last authentication fail?
2017.03.07 18:18:31 3: httpmod_senec_neu_login: no parsed JSON structure available
2017.03.07 18:18:31 3: httpmod_senec_neu_login: Read response to update didn't match any Reading


ch.eick

Hmm,

wir hängen an einer ähnlichen Stelle. Nur bei Dir steht Du sollst den Administrator anrufen :-) Haste das schon gemacht?
Im Forum steht zu diesem Thema auch recht wenig und ich kann die Attribute von httpmod noch nicht in Gänze interpretieren.

In der Doku sollte der Bereich Login mit noch mehr Beispielen, oder einem Link zur wiki aufgepeppt werden. Ich denke einige unserer Mitstreiter haben sicherlich schon verschiedene Anmeldungen hinbekommen. Also los......wir brauchen Hilfe.

Ich werde noch im hausinternen Lan einen zweiten Anlauf direkt zu meiner KWL machen. Da läuft es etwas einfacher ohne login Seite. Letztendlich wird mein Rpi2 mit FHEM ja auch lokal laufen.

Einen schönen Abend noch
     Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

StefanStrobel

Hallo Vize,

Du musst versuchen die Kommunikation zwischen Browser und Server exakt nachzubilden. Da kommt es auf jedes Detail bzw. Zeichen an.
Wenn also beispielsweise der Browser einen Post-Request an den Server sendet, in dem folgendes steht:

username:"ich"
password:"geheim"

dann hilft es Dir nicht weiter das als username=email@email.de&passwort=geheim zu senden. Der Server wird das ziemlich sicher nicht akzeptieren. Sowohl der Zeilenumbruch als auch die Anführungszeichen können entscheidend sein.

Zudem kann jede Header-Zeile wichtig sein. Insbesondere wenn Cookies gesetzt werden, musst Du diese auch in Deiner HTTPMOD-Konfiguration berücksichtigen. Du könntest es mit dem automatischen Cookie-Handling versuchen. Für eine einfache JSESSIONID sollte das klappen. Wenn Du aber gar keine Cookies sendest, kann es nicht klappen. Das ist kein Problem von HTTPMOD sondern von der Server-Applikation ...

Generell würde ich das schrittweise mit der Burp-Suite angehen.
Zuerst alles aufzeichnen und dann schrittweise über den Burp-Repeater versuchen die Requests zu vereinfachen und manuell zu senden. So kannst Du herausfinden in welchen Schritten die Login-Prozedur ablaufen muss und welche Header / Daten tatsächlich wichtig sind.

Gruss / viel Glück
   Stefan

Vize

Hallo Stefan,

danke für die Antwort und die Tipps.

Im meinem letzten post sieht man im log-Auszug, dass die Formulardaten zum user und passwort schonmal richtig übergebn wurden, oder?
(ist mit <========== in der jeweilgen Zeile gekennzeichnet)

Dann geht es aber nicht weiter...

Zum Post Request:
In burp steht in den Rohdaten zum login dieses
username=e%40mail.de&passwort=geheim

Muss ich diese Daten denn dann nicht auch genauso mitgeben und nicht als

username="email"
passwort="geheim"

?

Was meinst du mit dem Satz "über den Burp-Repeater versuchen die Requests zu vereinfachen und manuell zu senden".
Wie gehe ich das an?

Sorry, aber ich komme so langsam an meine Grenzen und auch durcheinander...  :-[

Hier noch Request und Response der login-Seite aus burp:
Request
POST /auth/authenticate HTTP/1.1
Host: mein-senec.de
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
Referer: https://mein-senec.de/
Cookie: JSESSIONID=s1y1rmNWDS4crro0goJneGeXd0wTh72juERZ4tO2.application01
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 56

username=e%40mail.de&passwort=geheim


Response
HTTP/1.1 200 OK
Date: Tue, 07 Mar 2017 16:21:03 GMT
Server: WildFly/10
X-Powered-By: Undertow/1
X-Powered-By: JSP/2.3
Content-Type: text/html;charset=UTF-8
Content-Language: de-
Connection: close
Content-Length: 1819

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <link rel="shortcut icon" type="image/vnd.microsoft.icon"
          href="/VAADIN/themes/meinsenec/favicon.ico"/>
    <link rel="icon" type="image/vnd.microsoft.icon" href="/VAADIN/themes/meinsenec/favicon.ico"/>
    <link rel="stylesheet" href="/VAADIN/themes/meinsenec/styles.css" type="text/css">
    <base href="">

    <title>Login Portal</title>
</head>
<body>

<script type="text/javascript">

    // The rest of this code assumes you are not using a library.
    // It can be made less wordy if you use one.
    var form = document.createElement("form");
    form.setAttribute("method", "post");
    form.setAttribute("action", "/endkunde/auth/authenticate");

    var usernameField = document.createElement("input");
    usernameField.setAttribute("type", "hidden");
    usernameField.setAttribute("name", "username");
    usernameField.setAttribute("value", "e@mail.de");

    form.appendChild(usernameField);

    var passwortField = document.createElement("input");
    passwortField.setAttribute("type", "hidden");
    passwortField.setAttribute("name", "passwort");
    passwortField.setAttribute("value", "geheim");

    form.appendChild(passwortField);

    document.body.appendChild(form);
    form.submit();

</script>

<div class="loginform-wrapper">

    <div class="title-area">
        <div class="logo"></div>
    </div>

    <div id="loginContainer" class="login-form-area">
        TEST
    </div>

    <div class="title-row">Login Portal</div>
    <div class="status-text">
        <span>Version 2.0.0-SNAPSHOT-
            201703061646</span>
    </div>
</div>
</body>
</html>


Kannst du noch weiterhelfen?

Gruß
Andreas

StefanStrobel

Hallo Andreas,

Bitte versuch den kompletten Ablauf des Logins von der ersten Seite, die die erste Session-Id setzt, bis zur Seite mit den gesuchten Daten in Burp mitzuschneiden.
In Deinen bisherigen Screenshots und Logs sehe ich nur einen Teil und die Screenshots sind aus dem Firefox (zumindest für mich) nicht besonders hilfreich.
Eventuell muss erst mal eine erste Session-ID gesetzt werden und es klappt nicht weil Du sofort auf die authenticate-Seite einsteigst.

Im Log sieht es so aus als ob Du die Login-Daten an /auth/authenticate schickst.
Als Antwort scheint dann aber wieder nur ein Login-Portal zu kommen, in dem Deine Daten als versteckte Variable drinstecken. Wie geht es denn weiter wenn Du Dich im Browser erfolgreich anmeldest? Wo kommt der Verweis oder Redirect auf die eigentliche Daten-Seite?

Ich teste solche Dinge immer erst mal in der Burp Suite durch. Wenn man die Aufzeichnung gemacht hat, kann man einzelne Requests an den "Repeater" von Burp senden (ich glaube das war mit rechte Maustaste auf dem Request). Im Repeater kann man dann den Request nochmals absenden. Das Ergebnis (z.B. eine neue Session-Id) kann man dann in den nächsten Request im Repeater reinkopieren und auch den nochmal absenden. Wenn das alles klappt, kommen am Ende der Sequenz die gewünschten Daten raus.

Da Du in HTTPMOD aber nicht alle Header definieren möchtest, kannst Du dann in der Burp-Suite versuchen einzelne Header wegzulassen. Wenn die Schritte der Reihe nach immer noch zum Ergebnis führen, dann waren die Header offensichtlich überflüssig...
So findest Du heraus, ob Referer oder User-Agent im Request benötigt werden. In Deiner bisherigen Konfiguration hast Du ja nur sid1Header1 Content-Type: application/x-www-form-urlencoded
sid1Header2 Accept: */*
das könnte zu wenig sein. In Deinen Screenshot sind deutlich mehr Header ...

Wenn in Burp  username=e%40mail.de&passwort=geheim stand, dann wird das stimmen. In Deinen Sreenshots sah das anders aus. Deshalb verwende ich lieber die Burp-Suite.

Gruss
    Stefan

Vize

#12
Hi Stefan,

danke nochmal für deine Antwort...und vor allem für deine Geduld mit mir...  :-[

Ich werde mir das Ganze nochmal Schritt für Schritt mit burp vornehmen.
Ich werde aber wahrscheinlich nicht schlau daraus, was davon alles in die HTTPMOD-Attribute rein muss...

Werde dann mal den Mitschnitt hier einstellen...

EDIT: Hier schonmal ein screenshot aus burp mit der "Verzeichnisstruktur".
Wie gesagt, die Daten liegen als JSON-Tabelle hier:
https://mein-senec.de/endkunde/api/status/getstatusoverview.php?anlageNummer=0


VG
Andreas

Vize

Guten Abend,

leider hatte ich noch keine Zeit, mich nochmal ausführlich mit burp zu beschäftigen.

Was ich aber noch gesehen habe:

Auf der Hauptseite https://mein-senec.de wird bereits ein Cookie (session id) gesetzt, aber nicht mit Set-Cookie, wahrscheinlich per (Java)script.
Siehe screenshot 1.

Das wird dann mitgenommen auf die Unterseite /endkunde/auth/authenticate, die 1 im screenshot zwei, und dort wird per Set-Cookie ein weiteres Cookie (session id) gesetzt, die 2 im screenshot 2.
Komisch ist, dass diese Seite beim ersten login nicht das "endkunde" im Pfad hat...  :o

Diese Cookies werden dann in die anderen Unterseiten mitgenommen.
Siehe screenshot 3.

Auch in die Unterseite mit den gewünschten Daten.
Siehe screenshot 4.

Vielleicht liegt das an diesen cookies, dass der login (noch) nicht klappt?

@Stefan
Ich habe mir auch schon deinen post hier angeschaut: https://forum.fhem.de/index.php/topic,56455.msg479909.html#msg479909
Das scheint ja ähnlich zu sein.
Daraus werde ich aber leider nicht ganz schlau, ob und wie ich das in meinem Fall umsetzen kann...  :-[
Bekomme es nicht auf die Kette...

Ich brauche wohl doch nochmal Hilfe...

Danke!

Gruß
Andreas


StefanStrobel

Hallo Andreas,

der erste Schritt bleibt eine genaue Analyse der Kommunikation - am besten mit Burp ...
Erst wenn wir die Kommunikation zwischen Browser und Server verstanden haben, können wir das mit HTTPMOD nachbauen.

Gruss
    Stefan