← Articles · Security · OSINT · Recon

What an attacker learns
about your business
in the first 10 minutes.

Before anyone touches your login page, sends a phishing email, or runs a single exploit — they spend time learning everything publicly available about you. Your DNS records. Your mail server. Your staff names and email patterns. Your technology stack. Your social handles. All of it, gathered passively, without triggering a single alert. Here is exactly what that looks like.

Jarrit Hosking
Forge Vertical · Cape Town · September 12, 2026 · Active HackerOne researcher
13 min read
// The phase nobody talks about

Most security conversations start at the attack — the phishing email, the ransomware, the breach. What rarely gets discussed is the hour before any of that happens. The reconnaissance phase. The part where an attacker builds a complete picture of your business using nothing but publicly available information — and you never know it is happening.

This phase has a name in the security community: OSINT — Open Source Intelligence. It is the systematic collection of information from public sources. No hacking. No exploits. No illegal access. Just a structured process of gathering what you have already made available, whether you intended to or not.

Every business with a website has an OSINT footprint. The question is not whether you have one — it is how much it tells an attacker and whether you have ever looked at it from their perspective.

Before an attacker touches your login page, they already know your mail server, your DNS provider, your technology stack, your staff names, and three email address formats to try. That is not hacking. That is reading what you published.

The 10-minute reconnaissance timeline

// What actually happens, in order
Minute 0–1
DNS reconnaissance — the infrastructure map
The first thing any attacker does is query your DNS records. This is completely passive — no connection to your server, no alert triggered. A records reveal your hosting IP. MX records reveal your email provider. NS records reveal your DNS provider. TXT records often contain SPF configurations that list every service permitted to send email on your behalf — which is effectively a list of every SaaS tool your business uses.
Minute 1–2
Technology fingerprinting — what is the site built on?
Browser developer tools, Wappalyzer, or BuiltWith reveal your technology stack in seconds. WordPress 6.4.1 tells an attacker which known CVEs to check. Outdated jQuery tells them which XSS payloads to try. An Apache server header tells them the version and operating system. If you are running software with known vulnerabilities, this step identifies them before a single request is sent to your server.
Minute 2–4
Social footprinting — who works there and what do they share?
Username enumeration across LinkedIn, GitHub, Twitter/X, Instagram, and Reddit builds a picture of your team. LinkedIn reveals job titles, tenure, and — critically — the email format your company uses (firstname.lastname@ vs first.last@ vs flastname@). GitHub profiles of your developers sometimes contain API keys, credentials, and internal tooling in commit history. Staff social profiles reveal travel patterns, office locations, and relationship networks useful for social engineering.
Minute 4–6
Email pattern guessing — finding valid addresses
Once the email format is known from LinkedIn, an attacker generates a list of staff email addresses and verifies them using SMTP probing or tools like Hunter.io. A verified email address is the prerequisite for targeted phishing. At this point they have real names, real roles, and real email addresses — everything needed to write a convincing spear-phishing email that appears to come from a colleague or supplier.
Minute 6–8
Breach database check — has this email appeared before?
Staff email addresses are checked against breach databases — Have I Been Pwned and its commercial equivalents. If a staff member's email address appears in a breach, their leaked password hash (or sometimes plaintext password) is available. People reuse passwords. A password from a 2019 LinkedIn breach is tried against your company VPN, email, and admin panel. This step costs nothing and succeeds more often than any technical attack.
Minute 8–10
Subdomain enumeration — finding what you forgot was public
Tools like Sublist3r, Amass, or certificate transparency logs reveal subdomains you may have forgotten about. dev.yourcompany.com running an old version of your application. staging.yourcompany.com with test credentials still configured. api.yourcompany.com with rate limiting disabled because "it's internal." admin.yourcompany.com with a default login page. These are the entry points that never appear on your main site but are fully accessible to anyone who looks.

What a DNS record actually reveals

// Chapter 01 — Reading your own infrastructure map

DNS records are designed to be public — they are how the internet knows where to send traffic for your domain. But the information they contain goes far beyond "this domain points to this IP address." A full DNS query on a typical business domain reveals the following:

dns-recon · example-business.co.za
$ python footprint_domain.py
Enter Target Domain: example-business.co.za
 
[*] Analyzing Infrastructure: example-business.co.za
 
[+] A Records:
- 104.21.48.1 ← Cloudflare edge (good)
 
[+] MX Records:
- mail.example-business.co.za ← self-hosted mail server (exposed)
 
[+] NS Records:
- ns1.cloudflare.com
- ns2.cloudflare.com
 
[+] TXT Records:
- v=spf1 include:sendgrid.net include:mailchimp.com
include:zohoemail.com include:freshdesk.com ~all
attacker now knows: SendGrid, Mailchimp, Zoho, Freshdesk
 
[!] Self-hosted mail server on unprotected subdomain
[!] SPF record reveals full SaaS stack
[!] No DMARC record — domain can be spoofed for phishing

That output — from a completely passive DNS query — tells an attacker that this business uses SendGrid for transactional email, Mailchimp for marketing, Zoho for business email, and Freshdesk for customer support. It also tells them the mail server is self-hosted on a subdomain that bypasses Cloudflare. And it tells them there is no DMARC record — meaning they can send emails that appear to come from this domain with no technical barrier.

None of this required touching the website. No request was logged. No alert was triggered. This is public information that any DNS lookup tool can retrieve.

The DMARC gap is critical: A missing DMARC record means anyone can send email that appears to come from your domain. Not spoofed in a way that looks suspicious — legitimate-looking email that passes basic spam filters because it does not claim to be from your mail server, just from your domain. This is how most business email compromise attacks begin.

What your social footprint reveals

// Chapter 02 — What you are giving away without knowing it

The social footprinting phase is where reconnaissance becomes personal. DNS records tell an attacker about your infrastructure. Social footprinting tells them about your people — which is where most successful attacks actually land.

social-footprint · target username check
$ python footprint_social.py
Enter Target Username: jsmith_dev
 
[*] Initiating Social Footprint for: jsmith_dev
 
[+] FOUND: GitHub - github.com/jsmith_dev
└─ 3 public repos · last commit 2 days ago
└─ Company: ExampleBusiness · Location: Cape Town
└─ Found .env file in commit history (deleted but recoverable)
 
[+] FOUND: Twitter/X - twitter.com/jsmith_dev
└─ Bio mentions: "Backend dev @ExampleBusiness"
└─ Recent post: "Finally got the AWS prod deploy working"
 
[+] FOUND: LinkedIn - found via name search
└─ Email format identified: [email protected]
└─ Role: Senior Developer (since 2023)
└─ Skills listed: AWS, Firebase, Node.js, Stripe
 
[-] NOT FOUND: Instagram
[-] NOT FOUND: Reddit

From that output, an attacker now knows: the developer's full name and email address, the exact technology stack the business runs on (AWS, Firebase, Node.js, Stripe), that there was a recent production deployment (potential instability window), and — most damaging — that a `.env` file was committed to GitHub at some point. Even if the file was deleted, it remains in the Git history and is fully recoverable.

That `.env` file almost certainly contained API keys, database credentials, or Stripe secret keys. Deleted from GitHub does not mean gone from GitHub.

The GitHub commit history problem: Every file ever committed to a Git repository exists permanently in its history, even if later deleted. Run git log --all --full-history -- "**/.env" on any public repository to find deleted environment files. This is one of the first things professional security researchers check — and it is one of the most commonly found vulnerabilities in vibe-coded projects pushed to public repositories.

What this looks like for a vibe-coded project specifically

// Chapter 03 — Why AI-built sites carry extra exposure

Vibe-coded projects carry a specific set of reconnaissance vulnerabilities that traditionally-built projects do not, because of how they are typically developed and deployed.

Public GitHub repositories as the deployment pipeline. Many vibe coders push directly to a public GitHub repository that serves as their GitHub Pages host. That repository contains the full commit history, the build process, often the project structure, and sometimes credentials that were committed before a `.gitignore` was properly configured.

Technology stack visible in source. The Tailwind CDN script tag. The Firebase configuration object in the JavaScript. The Formspree form ID. The Google Analytics measurement ID. All of these are publicly visible in your page source and each one tells an attacker something about your infrastructure. The Firebase configuration object specifically contains your project ID and API keys — and while the API keys themselves are meant to be public, a misconfigured Firestore security rules file can allow anyone with those keys to read or write your entire database.

No security headers. As discussed in previous articles — missing `Content-Security-Policy`, `X-Frame-Options`, and `X-Content-Type-Options` headers are instantly visible to any scanner and tell an attacker that the site was deployed without a security review.

A vibe-coded site is not inherently less secure than a traditionally-built one. But it carries the specific vulnerabilities of its development pattern — public repositories, visible configuration, and a deployment process that optimises for speed over security review.

What you should check right now

// Chapter 04 — Your own reconnaissance audit

Run this on yourself before someone else does. All of these tools are free and publicly available — which is exactly why attackers use them.

What to check Tool What you are looking for Risk
DNS records mxtoolbox.com or dnschecker.org Self-hosted mail servers, missing DMARC, SPF exposing your full SaaS stack HIGH
DMARC policy mxtoolbox.com/dmarc.aspx Missing or p=none DMARC — means your domain can be spoofed HIGH
GitHub commit history GitHub search or git log Deleted .env files, API keys, database URLs in old commits HIGH
Subdomain exposure crt.sh (certificate transparency) Forgotten dev, staging, or admin subdomains HIGH
Security headers securityheaders.com Missing CSP, X-Frame-Options, HSTS, Referrer-Policy MEDIUM
Technology stack wappalyzer.com or page source Outdated frameworks, exposed version numbers, server headers MEDIUM
Staff breach exposure haveibeenpwned.com Staff email addresses appearing in known breach databases HIGH
Origin IP exposure censys.io or shodan.io Origin server IP visible — Cloudflare bypass possible MEDIUM
Social footprint LinkedIn + Google Email patterns, staff roles, technology mentions, travel patterns VARIES

The three fixes that matter most

// Chapter 05 — Start here

Add a DMARC record. A missing DMARC record is the single most impactful gap for most South African small businesses. Add a TXT record to your DNS: _dmarc.yourdomain.com with value v=DMARC1; p=quarantine; rua=mailto:[email protected]. Start with p=quarantine rather than p=reject until you have confirmed all legitimate email sources are in your SPF record.

Audit your GitHub commit history. If you have ever pushed a project to a public GitHub repository, run a search for credentials in the history. GitHub's secret scanning will flag some automatically — but not all. Search for patterns like FIREBASE_, STRIPE_, DATABASE_URL, API_KEY in your commit history. If you find any, rotate the credentials immediately — even if the commit is deleted.

Check crt.sh for your domain. Go to crt.sh, search for your domain, and review every subdomain that has ever had a certificate issued. Each one is a potential entry point. If you find subdomains you did not know existed — or ones that should not be public — investigate immediately.

// The bigger picture This article covers the passive reconnaissance phase — what an attacker learns before they do anything active. The next phase is active scanning: probing your endpoints, testing authentication, looking for injection points, and mapping your application logic. Understanding both phases — passive and active — is what separates a business that has genuinely thought about security from one that has simply bought a certificate and moved on.
// Want the full picture?
Build With AI: The Complete
Vibe Coder's Playbook
This article covers what attackers see before they attack. The full course covers everything that comes after — and how to make sure your site holds up when someone actually starts pushing against it. 9 written modules covering security from the first prompt, race conditions, Cloudflare configuration, payment handling, privacy law, and the pre-launch checklist that catches what this article introduces. Built for vibe coders who want to ship systems that actually survive contact with the real world.
Security from the first prompt
Race conditions explained
Cloudflare — 8 settings that matter
Payment handling and PCI-DSS
POPIA and GDPR compliance
Pre-launch security checklist
Royalty-free assets — the rules
The 2030 AI outlook
📘   View the course — R497
One-time payment · Lifetime PDF access · No subscription · Debit card accepted

The reconnaissance phase described in this article is legal, passive, and completely undetectable. Every tool mentioned is publicly available. Every data source is public by design. The information is there whether you look at it or not — the only question is whether you see it before someone with different intentions does.

Run the audit on yourself this week. Fix what you find. Then think about what comes after the reconnaissance phase — because that conversation is longer and the stakes are higher.

Written by
Jarrit Hosking
Forge Vertical · Cape Town · September 12, 2026 · Active HackerOne researcher