Доступ к Samsung Smart TV
Проба пера
Когда мне становится скучно, в голову приходят самые разные мысли...
В этот раз в голове мелькнула мысль просканировать телевизор на открытые порты. Результат был положительным:
Starting Nmap 5.51 ( http://nmap.org ) at 2018-01-21 20:41 +07
Nmap scan report for 192.168.1.7
Host is up (0.0026s latency).
Not shown: 991 closed ports
PORT STATE SERVICE
7676/tcp open imqbrokerd
8001/tcp open vcom-tunnel
8002/tcp open teradataordbms
8080/tcp open http-proxy
9999/tcp open abyss
32768/tcp open filenet-tms
32769/tcp open filenet-rpc
32770/tcp open sometimes-rpc3
32771/tcp open sometimes-rpc5
Nmap done: 1 IP address (1 host up) scanned in 0.25 seconds
Номера портов, по большей части не знакомы, но 8001, 8002, 8080 и 9999 наводят на определенные мысли. Пробуем получить информацию по ним...
$ curl -v http://192.168.1.7:7676
* Rebuilt URL to: http://192.168.1.7:7676/
* Trying 192.168.1.7...
* TCP_NODELAY set
* Connected to 192.168.1.7 (192.168.1.7) port 7676 (#0)
> GET / HTTP/1.1
> Host: 192.168.1.7:7676
> User-Agent: curl/7.57.0-DEV
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 400 Bad Request
< CONTENT-TYPE: text/xml; charset="utf-8"
< SERVER: UPnP/1.1 Samsung AllShare Server/1.0
< CONTENT-LENGTH: 417
<
* Closing connection 0
<?xml version="1.0"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><s:Fault><faultcode>s:Client</faultcode><faultstring>UPnPError</faultstring><detail><UPnPError xmlns="urn:schemas-upnp-org:control-1-0"><errorCode>402</errorCode><errorDescription>Invalid Args</errorDescription></UPnPError></detail></s:Fault></s:Body></s:Envelope>
Пустые ответы приводить не буду, только те, по которым получен какой-либо результат. Проверяем порт 8001:
$ curl -v http://192.168.1.7:8001
* Rebuilt URL to: http://192.168.1.7:8001/
* Trying 192.168.1.7...
* TCP_NODELAY set
* Connected to 192.168.1.7 (192.168.1.7) port 8001 (#0)
> GET / HTTP/1.1
> Host: 192.168.1.7:8001
> User-Agent: curl/7.57.0-DEV
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 401 Unauthorized
< access-control-allow-origin: *
< content-length: 29
<
* Closing connection 0
<html><body>401</body></html>
На очереди 8002:
$ curl -v https://192.168.1.7:8002
* Rebuilt URL to: https://192.168.1.7:8002/
* Trying 192.168.1.7...
* TCP_NODELAY set
* Connected to 192.168.1.7 (192.168.1.7) port 8002 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
* CAfile: /usr/share/ca-certificates/ca-bundle.crt
CApath: none
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (OUT), TLS alert, Server hello (2):
* SSL certificate problem: self signed certificate in certificate chain
* stopped the pause stream!
* Closing connection 0
curl: (60) SSL certificate problem: self signed certificate in certificate chain
More details here: https://curl.haxx.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
Теперь очередь порта 8080:
$ curl -v http://192.168.1.7:8080
* Rebuilt URL to: http://192.168.1.7:8080/
* Trying 192.168.1.7...
* TCP_NODELAY set
* Connected to 192.168.1.7 (192.168.1.7) port 8080 (#0)
> GET / HTTP/1.1
> Host: 192.168.1.7:8080
> User-Agent: curl/7.57.0-DEV
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Headers: Content-Type
< Content-Type: text/html
< Content-Length: 345
< Date: Sun, 21 Jan 2018 04:14:36 GMT
< Server: WebServer
<
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>404 - Not Found</title>
</head>
<body>
<h1>404 - Not Found</h1>
</body>
</html>
* Connection #0 to host 192.168.1.7 left intact
Если использовать SSL, то ответ тоже не заставит себя ждать:
$ curl -v https://192.168.1.7:8080
* Rebuilt URL to: https://192.168.1.7:8080/
* Trying 192.168.1.7...
* TCP_NODELAY set
* Connected to 192.168.1.7 (192.168.1.7) port 8080 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
* CAfile: /usr/share/ca-certificates/ca-bundle.crt
CApath: none
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to 192.168.1.7:8080
* stopped the pause stream!
* Closing connection 0
curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to 192.168.1.7:8080
И, наконец, 9999:
$ curl -v https://192.168.1.7:9999
* Rebuilt URL to: https://192.168.1.7:9999/
* Trying 192.168.1.7...
* TCP_NODELAY set
* Connected to 192.168.1.7 (192.168.1.7) port 9999 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
* CAfile: /usr/share/ca-certificates/ca-bundle.crt
CApath: none
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to 192.168.1.7:9999
* stopped the pause stream!
* Closing connection 0
curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to 192.168.1.7:9999
Судя по всему, на порту 7676 «висит» какой-то UPNP. Порты 8002 и 9999 обмениваются данными через SSL, 8080 похож на веб-сервер, а 8001 требует авторизацию.
Если открыть ТВ в браузере на порту 8002, то можно получить визуальные данные о сертификате. В принципе, самое интересное, что можно из него вычленить — срок действия в 20 лет и что сертификат является самоподписанным.
Порывшись в интернете, понял, что на эту тему достаточно мало материала. Впрочем, сначала нужно просмотреть SamsungSmartSDK, упомянутый в сертификате. Возможно, что там найдется какая-то дополнительная информация.
Кстати, теоретически, есть возможность включить ТВ с ипользованием технологии Wake-On-LAN. Стандартный способ, видимо, не проходит — по крайне мере на «magic packet» он не отозвался. Но пример кода, реализующего эту возможность, я встретил.