httpmod und Passwortabfrage Digest

Begonnen von joerg78, 13 Oktober 2022, 08:35:05

Vorheriges Thema - Nächstes Thema

joerg78

Hallo Forumgemeinde,

ich habe einen Fronius Wechselrichter. Der Wechselrichter hat eine eigene Web-Oberfläche wo Einstellungen vorgenommen werden können. Der Zugriff ist Passwortgeschützt. Wie muss ich httpmod konfigurieren damit das klappt. Ich habe das Wiki dazu gelesen und auch verschiedenen Forumbeiträge studiert. Aber verstehen tue ich das nicht. Was klappt sind Daten per API auslesen. Ich will jedoch Einstellungen vornehmen. Das unterstützt die API nicht. Ich hab auch versucht mit BurpSuite den Traffic zu analysieren - komme hier jedoch auch nicht weiter. Wer kann mir hier helfen?

Was ich bisher habe ist:

defmod WR HTTPMOD http://192.168.178.25/
attr WR enableCookies 1
attr WR verbose 5


das list dazu ist

Internals:
   BUSY       0
   DEF        http://192.168.178.25/
   FUUID      6335aa22-f33f-8bd2-f525-1806d323fa090851
   Interval   300
   LastAuthTry 2022-10-12 20:32:49
   MainURL    http://192.168.178.25/
   ModuleVersion 4.1.12 - 19.4.2022
   NAME       WR
   NOTIFYDEV  global
   NR         111
   NTFY_ORDER 50-WR
   STATE      ???
   TYPE       HTTPMOD
   eventCount 3
   value     
   CompiledRegexes:
   HttpUtils:
     NAME       
     addr       http://192.168.178.25:80
     auth       0
     buf       
     code       200
     compress   1
     conn       
     data       
     displayurl http://192.168.178.25/
     header     
     host       192.168.178.25
     httpheader HTTP/1.0 200 OK
Content-Type: text/html
Accept-Ranges: bytes
ETag: "1063921526"
Last-Modified: Mon, 16 May 2022 16:10:41 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Content-Length: 4591
Connection: close
Date: Thu, 13 Oct 2022 06:30:31 GMT
Server: webserver
     httpversion 1.0
     hu_blocking 0
     hu_filecount 1
     hu_port    80
     hu_portSfx
     ignoreredirects 1
     loglevel   4
     path       /
     protocol   http
     redirects  0
     timeout    2
     url        http://192.168.178.25/
     sslargs:
   QUEUE:
   READINGS:
   REQUEST:
     context    reading
     data       
     header     
     ignoreredirects 0
     num        unknown
     retryCount 0
     type       update
     url        http://192.168.178.25/
Attributes:
   enableCookies 1
   verbose    5


Gruß und schon mal Danke
Jörg



betateilchen

Warum nicht einfach mal schauen, ob es im Forum das Thema schonmal gab, bevor man einen neuen Thread aufmacht?

Wenn ich in das Suchfeld oben rechts "Fronius" eingebe, kommen 4 Seiten mit Ergebnissen hier aus dem Forum.
Und wenn ich das richtig sehe, ist da sogar ein eigenes FHEM Modul aufgeführt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

joerg78

ja, hab ich. aber die Themen die dort behandelt werden beantworten nicht meine Frage. Ich habe auch das besagte Modul ausprobiert. Das funktioniert gut. Mir geht es aber um eine bestimmte Funktion die ich in der Web-Oberfläche ein/ausschalten möchte. Ich bin mir schon bewusst, dass es nicht zielführend ist Dinge erneut zu fragen wo es schon Antworten gibt. ich beschäftige mich auch schon eine weile mit FHEM und komme mit den Forenbeiträgen in der Regel gut zurecht - aber hier bei diesem Thema komme ich einfach nicht weiter.

KyleK

ich hab das vor einer Weile mal benötigt, und nach etwas trial and error hats auch geklappt:

Man nutzt die sid* Attribuge vom Modul um zu konfigurieren was zu tun ist wenn eine anfrage nicht klappt.
bei mir sah das grob so aus:

define web.gourmetta.token.Emma HTTPMOD <url>
attr web.gourmetta.token.Emma requestHeader1 Authorization: Bearer $sid
attr web.gourmetta.token.Emma reAuthJSON errorSummary
attr web.gourmetta.token.Emma sidData {"login":"<user>","password":"<password>"}
attr web.gourmetta.token.Emma sidHeader Content-Type: application/json
attr web.gourmetta.token.Emma sid1IdJSON token
attr web.gourmetta.token.Emma sid1URL <url to login page>

Die Idee dahinter ist so: HTTPMOD versucht eine ganz normale Anfrage von <url>. In meinem Fall, wenn das nicht klappt weil man nicht eingeloggt ist, kommt ein JSON-Objekt zurück, in dem das Wort "errorSummary" steht. Via reAuthJSON sagt man HTTPMOD, dass es in dem Fall erstmal über ein Login einen Token besorgen muss.
Das wiederum ist in den sid*-Attributen festgelegt.
Das Modul holt nun via der sid1URL den LoginToken, und speichert ihn in der variable $sid.
Und danach wird die eigentliche Anfrage wiederholt, diesmal nur mit der $id.

In der Commandref ist diese Funktionalität auch recht umfänglich beschrieben.
FHEM on Futro S940
CUL868
7x MAX! Thermostat, 8x MAX! Fensterkontakte
Conbee II + deConz, TradFri Lampen, Osram Smart+ Steckdosen

joerg78

#4
okay - wie gesagt - es handelt sich um ein Fronius Wechselrichter - die Autorisierung erfolgt über Digest.
Wenn ich in Burp den Traffic analysiere sieht ein gültiges GET so aus:

GET /config/batteries/ HTTP/1.1
Host: 192.168.178.25
Accept: application/json, text/plain, */*
Authorization: Digest username="service", realm="Webinterface area", nonce="6352373a:afc09f9fad0a9c3e4a34046b9bc0ed8f", uri="/config/batteries/", response="50028a387e5fac34443e76902b60c1a3", qop=auth, nc=00000011, cnonce="3a0fb1c4a1100d9b"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.5249.62 Safari/537.36
Referer: http://192.168.178.25/
Accept-Encoding: gzip, deflate
Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: lang=de
Connection: close


Mein Frage ist - wie kann ich die notwendigen Daten generieren. Wenn ich eine CURL generiere funktioniert dann das GET auch - aber nur eine gewisse Zeit.