Your First Pentest: A Practical Intro Using Free Tools
May 2026
No paid accounts. No vendor lock-in. Just a terminal, a local lab, and the same tools professional pentesters use every day.

What Is Pentesting, Actually?
Penetration testing β pentesting β is the practice of attacking your own systems the way a malicious actor would, before they get the chance to. The canonical reference for what to look for is the OWASP Top 10, but the mindset matters more than any checklist: assume something is broken, then prove it.
Most introductions to pentesting lead you straight to a product signup. This one does not. Everything below is free and open source, runs locally on your laptop, and is used by real security engineers. Once you are comfortable here, the natural next step is wiring these checks into CI β see Continuous Pentesting in CI for the automated, gated version of this same workflow.
Never pentest systems you do not own or have explicit written permission to test. Even well-intentioned scanning of a live system you do not control is illegal in most jurisdictions. Set up a local lab instead β it takes about ten minutes.
The Lab β DVWA on Docker
DVWA (Damn Vulnerable Web Application) is a PHP/MySQL app deliberately riddled with common vulnerabilities. It is the closest thing to a standardized training ground the web security community has.
docker pull vulnerables/web-dvwa docker run -d -p 80:80 vulnerables/web-dvwa # Open http://localhost, log in with: admin / password # Click "Setup / Reset DB" β you now have a legal target.
Vulnerability Classes to Know
Before you touch a tool, understand what you are looking for. The OWASP Top 10 is the canonical list. These five show up first:
Spotlight β The TOCTOU Race
TOCTOU (Time-Of-Check vs Time-Of-Use) is subtle and worth understanding deeply. The code looks correct in review:
// Looks safe. Isn't.
async function transfer(userId, amount) {
const balance = await db.getBalance(userId);
if (balance < amount) throw new Error("Insufficient funds");
await db.deductBalance(userId, amount); // race window lives here
await db.creditRecipient(amount);
}Send two concurrent requests before deductBalance completes on either, and the check passes twice. A pentester would catch this with a parallel-request harness. A code reviewer often will not.
The Free Tool Stack
Recon β Nmap
Nmap is the first tool most pentesters reach for. It maps open ports and running services on a target. Output tells you exactly what versions are exposed β your attack surface map.
nmap -sV -sC localhost # -sV β probe ports for service/version info # -sC β run default safe scripts
Intercept β Burp Suite Community
Burp Suite Community Edition is free and is the industry-standard HTTP proxy for web pentesting. It sits between your browser and the server and lets you inspect, modify, and replay every request.
- 1. Start Burp β Proxy β Intercept tab
- 2. Configure your browser to use
127.0.0.1:8080as its proxy - 3. Browse to DVWA β every request appears in Burp
- 4. Right-click any request β Send to Repeater β modify β resend
Exploit β SQLMap
Once Burp shows you a parameter that might be injectable, SQLMap automates the proof. This is how you move from βpossible injection pointβ to βI have the data.β
sqlmap -u "http://localhost/vulnerabilities/sqli/?id=1&Submit=Submit" \ --cookie="security=low; PHPSESSID=<your_session_id>" \ --dbs
A Full Workflow, Start to Finish
Here is how a beginner session against DVWA actually flows. Start to finish: under 20 minutes, zero spend.
- 1.
nmap -sV localhost β Apache 2.4, PHP 7.2 on port 80 - 2.
nikto -h http://localhost β config file exposure, default creds - 3.
Burp β intercept GET /vulnerabilities/sqli/?id=1 β send to Repeater - 4.
Change id=1 to id=1' β MySQL error in response = injectable - 5.
sqlmap -u "..." --dbs β dumps database names - 6.
sqlmap -u "..." -D dvwa -T users --dump β retrieves password hashes
What to Learn Next
The Security Mindset
Tools are just tools. The actual skill is thinking adversarially: what assumption does this code make, and what happens when that assumption is wrong? A balance check assumes the balance will not change between read and write. A login form assumes the input is a string, not a SQL fragment. An API assumes the caller owns the resource ID they are passing.
Find the assumption. Break it. That is pentesting.
All tools mentioned are free and open source. DVWA is for local use only β never deploy it to a public server.