top of page

HTTP and HTTPS Enumeration for Pentesting (80, 443)

Sep 26
7 min read

 

Introduction

 

In Part 1 of this series, we covered FTP (port 21) and SSH (port 22) enumeration: banner grabbing, anonymous login checks, supported commands (HELP/FEAT for FTP), SSH version and auth-method detection, and the workflow of discover → identify → version → safe probes → document. In this part we continue with HTTP (port 80) and HTTPS (port 443).

 

Typically, web applications on those ports are prime targets: they expose version strings, frameworks, and misconfigurations through headers and default pages. Enumeration here involves: you send normal requests and interpret responses. This blog covers banners, headers, directory discovery, and basic SSL/TLS checks, enough to steer your next steps without noisy scanning.


infographic showing HTTPS handshake between client browser and origin server, with labeled steps and encrypted tunnel.

Understanding how HTTP and HTTPS differ at the protocol layer is essential for our effective web enumeration, below table shows how they compare for most part:


Feature / Property

HTTP

HTTPS

URL Scheme

http://

https://

Default Port

80

443

Transport Security

Unencrypted (Plaintext)

Encrypted via TLS/SSL

Protocol Layering

Application Layer directly over TCP

Application Layer over TLS/SSL over TCP

Connection Handshake

Standard 3-way TCP handshake

TCP handshake + TLS/SSL negotiation handshake

Server Authentication

None (Vulnerable to spoofing/MITM)

Validated via X.509 Digital Certificates

Data Integrity

None (Traffic can be tampered with in transit)

Guaranteed using cryptographic hashing/MACs


HTTP Enumeration (Port 80)

 

HTTP Banner Grabbing and Server Version

 

Grab the raw response to see the Server header and status:

 

curl -sI http://192.168.1.10/

 

Or with netcat (no TLS, so you see the first line and headers):

 

printf "GET / HTTP/1.0\r\nHost: 192.168.1.10\r\n\r\n" | nc -nv 192.168.1.10 80

 

Look for:

 

  • Server: e.g. Apache/2.4.41, nginx/1.18.0: note product and version for CVE checks.

  • X-Powered-By: often reveals PHP, ASP.NET, or other runtimes.

  • Status: 200, 301, 403, etc., and any redirect location.

 

Nmap can do version detection and run safe HTTP scripts:

 

nmap -p 80 -sV --script http-server-header,http-headers 192.168.1.10

 

 

HTTP Headers to Record for Pentesting

 

Header

Why it matters

Server

Product and version for vulnerability research

X-Powered-By

Runtime/framework (PHP, .NET, etc.)

X-AspNet-Version

.NET version

Strict-Transport-Security

HSTS present or missing (HTTPS)

Set-Cookie

Session/security cookie names and flags

 

Save a full header dump for the report:

 

curl -sI -L http://192.168.1.10/ -o headers_80.txt

 

For more details on HTTP headers please check out our detailed HTTP headers blog.


Web Directory and Path Discovery

 

Use a wordlist and only read responses, try to avoid destructive requests. Use a small wordlist first to avoid rate limits or lockouts. Adjust the wordlist path for your environment (for e.g. Kali: /usr/share/wordlists/dirb/common.txt). Examples:

 

# Gobuster (dir mode, 40 threads, common wordlist)
gobuster dir -u http://192.168.1.10/ -w /usr/share/wordlists/dirb/common.txt -t 40

# Feroxbuster (recursive, auto-calibration)
feroxbuster -u http://192.168.1.10/ -w /usr/share/wordlists/dirb/common.txt

 

Interpret status codes: 200 (OK), 301/302 (redirect; note Location), 403 (forbidden but path exists; often a finding: "admin path present but restricted"), 404 (not found). Then document interesting paths (admin, backup, config, api, .git, env) for manual inspection and the report.

 

Screenshot: Gobuster output showing discovered directories and status codes

 

Note: most default distributions will not have these tools present by default, as such you might need to set them up via appropriate package managers.


Web Technology Fingerprinting

 

  • Default pages: /server-status, /phpinfo.php, /wp-admin (WordPress) reveal stack and sometimes versions.

  • Headers: X-Powered-By, Server, and framework-specific headers (e.g. X-Drupal-Cache) narrow the stack.

  • Cookies: Session or framework cookies (e.g. PHPSESSID, wp-settings) confirm technologies.

 

One request can give a lot:

 

curl -sI http://192.168.1.10/
curl -s http://192.168.1.10/ | head -50

 

Check the HTML for meta generator tags, comments, or script paths that reveal CMS or framework.

 

 

HTTP Findings: Misconfiguration vs Version Risk

 

Web enumeration findings split the same way FTP and SSH do.


Version risk is a Server or X-Powered-By header that maps to a CVE for a specific Apache, nginx, PHP, or framework release. Note the exact version string so the client can check it against their own patch records, since header values can lag behind the actual installed version on hardened hosts.


Misconfiguration risk covers things like directory listing left enabled, a /server-status or /phpinfo.php page reachable without authentication, verbose error pages that leak stack traces or file paths, and missing security headers such as Strict-Transport-Security or Content-Security-Policy.

A fully patched web server can still leak its entire technology stack through a forgotten debug endpoint.


Report the two separately: cite the CVE reference for version-based findings, and describe the exact exposed path or missing header for configuration findings so the fix is unambiguous.

 

What to Document for HTTP Findings

 

For each host, keep a record of the full response headers (not just Server), the HTTP status code and any redirect target, the directory-discovery wordlist and tool settings you used (so results are reproducible), and every interesting path you found with its status code and content length.


A 403 on /admin is not the same finding as a 200 on /admin/config.php.bak; document them as distinct rows in your findings table rather than a single vague "some paths found" note. Save raw header dumps and full HTML pages you reference in the report to your evidence folder, and quote only the relevant snippet in the report body. If a page reveals a CMS or framework version, capture the exact string (meta generator tag, changelog file, or footer credit) rather than paraphrasing it.

 

Safe vs Unsafe HTTP Probes

 

curl, header inspection, and directory discovery with a small, standard wordlist are safe: they are ordinary GET requests that any web server handles thousands of times a day, and a well-tuned scan with a moderate thread count rarely causes more than a blip in access logs. Where HTTP enumeration becomes risky is aggressive brute-forcing of large wordlists against small or rate-limited applications, which can trigger a web application firewall, exhaust connection pools, or in the worst case take down a fragile staging server.

Always start with a small wordlist and a conservative thread count, watch for increasing response times or connection errors, and back off if you see them. Avoid submitting forms or hitting endpoints that clearly perform a write action (account creation, password reset, checkout) during enumeration; those belong in a later, explicitly scoped testing phase, not the initial recon pass.

 

HTTPS Enumeration (Port 443)

 

HTTPS adds TLS and often a different virtual host. Enumerate both the TLS stack and the HTTP layer (same ideas as port 80, but over SSL).

 

HTTPS and SSL/TLS Version and Cipher Enumeration

 

Quick certificate check with OpenSSL (subject, issuer, validity):

 

openssl s_client -connect 192.168.1.10:443 -servername 192.168.1.10 </dev/null 2>/dev/null | openssl x509 -noout -dates -subject -issuer

 

For cipher and protocol enumeration, use Nmap:

 

nmap -p 443 --script ssl-enum-ciphers,ssl-cert 192.168.1.10

 

Record:

 

  • Certificate: subject, issuer, validity (expiry), SANs (hostnames).

  • Protocols: TLS 1.0/1.1 (weak) vs 1.2/1.3.

  • Ciphers: weak ciphers (e.g. NULL, export, RC4) are often compliance findings.

 

 

HTTP over HTTPS (Application Layer Enumeration)

 

Once you know 443 is HTTPS, treat it like HTTP enumeration with the correct URL:

 

curl -sI https://192.168.1.10/
curl -sI -k https://192.168.1.10/   # -k if you ignore cert errors for internal testing

 

Use the same header and directory-discovery approach as port 80; just change the scheme and (if needed) Host for virtual hosting:

 

gobuster dir -u https://192.168.1.10/ -w /usr/share/wordlists/dirb/common.txt -k -t 40

 

Virtual Host Enumeration

 

If the target is name-based, try the real hostname and any known subdomains:

 

curl -sI -H "Host: admin.target.local" https://192.168.1.10/

 

Document which Host headers return different content or status codes; that is useful for scope and follow-up. Also try the IP as Host, plus common names (e.g. www, admin, dev, staging, mail) if you have a known base hostname.

 

 

HTTPS Findings: Misconfiguration vs Version Risk

 

TLS findings follow the same pattern as the rest of this series.


Version risk is an outdated TLS library or web server build tied to a known vulnerability; note the exact software version from the certificate or Server header alongside the protocol versions Nmap reported.


Misconfiguration risk covers certificate and protocol issues that exist independent of software version: an expired or self-signed certificate on a production host, TLS 1.0 or 1.1 still enabled alongside 1.2/1.3, weak or export-grade ciphers still negotiated, or a certificate whose Subject Alternative Names do not match the hostnames actually served. A brand-new TLS stack can still be misconfigured to accept a weak cipher suite for backward compatibility.


Report certificate expiry and weak protocol support as configuration findings with a clear remediation, for example disabling TLS 1.0/1.1 in the server's SSL configuration, separate from any CVE tied to the underlying TLS library version.

 

What to Document for HTTPS and TLS Findings

 

Capture the certificate subject, issuer, validity window, and full SAN list from openssl x509 (or other as applicable), plus the protocol and cipher list from ssl-enum-ciphers. Flag any protocol below TLS 1.2 explicitly by name in your notes, since "weak TLS" alone is not actionable for a client's infrastructure team. However, remember that a lower TLS version supported by itself is not a bug. if there is valid business justification to implement and support the said protocol, in the "right way", the same needs to be allowed.


For virtual host testing, record each Host header you tried and the resulting status code or content length side by side in a small table; this makes it easy to spot which hostnames route to different applications on the same IP. If a certificate is expired or mismatched, note the exact expiry date and the hostname it was issued for, since that is usually enough evidence for the finding without needing a screenshot of a browser warning page.

 

Safe vs Unsafe HTTPS Probes

 

Certificate inspection with openssl s_client, ssl-enum-ciphers, and switching the Host header for virtual host discovery are all safe, passive checks; they read configuration and certificate metadata without submitting any application data, and they will not trip account lockouts or write any state.


Where HTTPS testing becomes riskier is combining virtual host discovery with aggressive directory brute-forcing across many candidate hostnames at once, which multiplies your request volume and can look like a distributed scan to a monitoring team.

If you must test many virtual hosts, throttle the discovery pass per hostname and confirm with the client whether internal hostnames outside the agreed scope, for example an admin hostname you guessed rather than one they provided, are fair game before you probe them; enumerating a hostname is usually fine, but treat anything you find behind it as out of scope until confirmed.

 

HTTP and HTTPS Enumeration Quick Reference

 

Goal

Tool / method

Server banner

curl -sI http(s)://<ip>/ or nmap -p 80,443 -sV

Full headers

curl -sI -L and Nmap http-headers script

Directories

gobuster dir or feroxbuster with a safe wordlist

TLS/cert

openssl s_client and nmap --script ssl-enum-ciphers,ssl-cert

Tech fingerprint

Headers + default paths + HTML meta/comments

 

Summary: HTTP and HTTPS Enumeration for Pentesting

 

HTTP (port 80) and HTTPS (port 443) enumeration gives you web server and framework versions, directory layout, and TLS posture. Always record Server, X-Powered-By, and certificate details; then use directory discovery and headers to map the application. Part 3 covers SMTP (port 25), POP3 (110), IMAP (143), and SNMP (161): mail server and network-management enumeration you can run with the same methodology.

 

References

 

 

 

Register for instructor-led online courses today! https://www.darkrelay.com/courses

 

Check out our self-paced learning paths! https://www.darkrelay.com/learning-paths

 

Explore our bundled Pricing & Plans for cost-effective options! Buy a course subscription to learn more—hands-on labs and expert-led training included. https://www.darkrelay.com/plans-pricing

 

Contact us for custom pentesting needs at: info@darkrelay.com or WhatsApp.

 

Comments


bottom of page