Enumerando HTTPS

O netcat não suporta o SSL para fazer a conexão, com isso podemos utilizar o openssl. Temos que informar o método que queremos e o host. Um detalhe, é que nesse caso é importante utilizar o HTTP/1.1 para identificarmos Web Application Firewall ou Proxys, que serão serviços que estão no meio do caminho. O host também é necessário informar, para que o servidor possa nos responder corretamente.

Ao fazer a requisição, ele retorna um código 301 que indica que o recurso requisitado foi movido permanentemente para a URL dada pelo cabeçalho, nesse caso é www.tesla.com. Então precisamos enviar uma requisição para esse domínio.

user@xubuntu:~$ openssl s_client -quiet -connect tesla.com:443
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert High Assurance EV Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert SHA2 High Assurance Server CA
verify return:1
depth=0 C = US, ST = California, L = Palo Alto, O = "Tesla, Inc.", OU = Traffic Engineering, CN = *.tesla.com
verify return:1
HEAD / HTTP/1.1
Host: tesla.com

HTTP/1.0 301 Moved Permanently
Location: https://www.tesla.com/
Server: BigIP
Connection: Keep-Alive
Content-Length: 0

Assim conseguimos obter as informações.

user@xubuntu:~$ openssl s_client -quiet -connect www.tesla.com:443
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = GeoTrust RSA CA 2018
verify return:1
depth=0 C = US, ST = California, L = Palo Alto, O = "TESLA, INC.", CN = *.tesla.com
verify return:1
HEAD / HTTP/1.1
Host: www.tesla.com

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
X-Powered-By: PHP/7.4.16
X-Drupal-Dynamic-Cache: MISS
X-UA-Compatible: IE=edge
Content-Language: en
Last-Modified: Sat, 10 Jul 2021 05:40:11 GMT
ETag: "1625895611"
X-Generator: Drupal 8 (https://www.drupal.org)
X-Drupal-Cache: HIT
Cache-Control: max-age=60s
X-TZLA-EDGE-HOSTNAME-VCL: drupal8-prod
X-TZLA-EDGE-BACKEND-FETCH-IF-STALE: true
X-TZLA-EDGE-WAS-304: false
X-TZLA-EDGE-Age: 60.000
X-TZLA-EDGE-Grace: 86400.000
X-TZLA-EDGE-BACKEND-RETRY: 0
X-TZLA-EDGE-BACKEND-CONN-TIME: 0.000
X-TZLA-EDGE-BACKEND-TTFB: 0.000
X-TZLA-EDGE-BACKEND-REASON: OK
X-TZLA-EDGE-BACKEND-STATUS: 200
X-Varnish: 25762896 25737020
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
X-TZLA-EDGE-Cache-Hit: Hit
X-TZLA-EDGE-TTL: 22.412
X-TZLA-EDGE-GRACE-BACKEND-UNHEALTHY: 86400.000
X-TZLA-EDGE-BACKEND-STREAM: false
X-TZLA-EDGE-CLIENT-RESTARTS: 0
X-TZLA-EDGE-CLIENT-REQ-TTL: -1.000
X-TZLA-EDGE-Server: sjc04p1tegvr64.teslamotors.com
X-TZLA-EDGE-Cache-Hits: 4
Date: Sat, 10 Jul 2021 14:00:26 GMT
Connection: keep-alive
Origin_hostname: drupal8-prod.teslamotors.com
Permissions-Policy: interest-cohort=()
Strict-Transport-Security: max-age=15768000

Quando usamos o HTTP/1.0 e não passamos um host, o servidor não retorna um resultado como esperamos, por isso é necessário utilizar o HTTP/1.1 e o host principalmente se ele estiver passando por um WAF ou proxy. Com isso acaba que lidamos diretamente com o web application firewall ou proxy que a aplicação está utilizando, e não com ela diretamente.

Last updated

Was this helpful?