Ethical › Module 13 › Lesson 1
What a Web Server Exposes
Default pages, directory listing, outdated banners.
Visual · web_server_exposes
A web server volunteers leftovers: a vendor welcome page, a file tree, a version token. Name those on a stack YOU run. Do not directory-brute strangers.
Opening
A web server is a file clerk with a network port. Leftovers, listings, and banners are hygiene findings on YOUR stack — not a hunt of the internet.
Modules 1–12 kept every lab on a box you own: RoE, footprints, loopback scans, banners as nameplates, CVE tickets, hashes as defense, malware hygiene, packets on YOUR wire, humans as a channel to refuse, availability as named exhaustion, session tokens as concepts, defense devices without evasion kits. Module 13 is the HTTP listener chapter. In Cyberlium wording, a web server exposes whatever you left in the document root, whatever the daemon is willing to list, and whatever version string it still prints. Default pages, directory listing, and outdated banners are the three leftovers this lesson names. They are misconfigurations on a stack YOU run. They are not a wordlist homework against a shop, a café, a classmate Pages site, or school.edu. This is original Cyberlium teaching mapped to the CEH v13 web-servers domain — not official EC-Council training, not a cert, not exam dumps. You will not gobuster a stranger. You will not dirb the dorm. You will not Google-dork “Apache It works!” and call the hits a lab. You will not treat a Server header as remote code execution. Next lesson is Patching and Least Modules: disable unused modules, TLS in production, a worker user that is not root. Here you write the three exposures, a refuse line, and lock the notes. Lesson 4 is the only hands-on listener: python http.server bound to 127.0.0.1, notes in ceh-webserver-lab.txt, then you stop the server.
1. Default pages: vendor leftovers you remove — not a dorking contest
A default page is the welcome file a product ships so the installer can prove the daemon started: “It works!”, a stock nginx page, an IIS splash, a framework sample. On a stack you run, that page is a finding because it tells a stranger the product family and that nobody finished setup. The defender move is boring: replace it with YOUR content, or return 404/403 on the leftover path, and do not leave sample apps in the document root. The tester move, when you have written RoE on a host you are hired to review, is to note “default content still present” as a ticket — Module 5’s treatment shape, not a screenshot contest. This course does not assign hunting default pages on the public internet. A search engine query for leftover splash pages is not Lesson 1 and is not Lesson 4.
python -m http.server does not ship an “It works!” billboard, but it will happily serve whatever you pointed it at — including a home folder full of secrets if you started it in the wrong directory. That is the beginner default-page cousin: serving the wrong tree. Lesson 4 will force a throwaway folder under cyberlium-lab with an index.html YOU wrote. Until then, the literacy sentence is: leftover vendor pages and leftover sample trees are exposures you remove on systems you administer. Skill does not create consent to catalog other people’s leftovers. A cert acronym in a blog title is not a warrant.
Command guide
Default pages YOU remove — WHAT/WHY
═══ COMMANDS ═══
Command — copy this
cat >> "$NOTES" << 'EOF' default_pages: I will serve MY index, not a vendor sample refuse: google dork inurl:admin on strangers EOF
2. Directory listing: a misconfig YOU disable — never a wordlist against strangers
Directory listing is the daemon printing a file tree when a folder has no index document. Python’s SimpleHTTPRequestHandler does this by default. Apache autoindex, nginx autoindex, and “Indexes” options are the same idea on products you might run later. On YOUR listener, seeing a listing means you forgot an index or you left autoindex on — a hygiene miss, not a trophy. The fix is an index file, or a handler that refuses to list (Lesson 4 overrides list_directory to 403 on a server YOU wrote). The wrong next step is a directory brute-force against a host you do not own: gobuster, dirb, ffuf, a wordlist of /admin /backup /git, pointed at a shop or a classmate. That is unauthorized enumeration of someone else’s data map. Module 4 already refused neighbor SMB. This module refuses stranger directory brute the same way.
A useful failure: “I need a real site or I cannot learn listing.” You can learn it on loopback the moment you start http.server in a folder without index.html — and then you put the index in so the tree stops advertising. Brute-forcing school.edu “because the listing is off and I need to find hidden paths” is not this course. Hidden-path hunting on a stranger is still enumeration without permission. If a later employer gives you written RoE that names a host and a method, that writing — not this lesson — is the authorization. You do not have RoE for the café, the campus CMS, or a random SaaS. Write the refuse line before you write any tool name.
Command guide
Directory listing off — WHAT/WHY
═══ INSTALL ═══
Linux (Debian/Ubuntu):
Command — copy this
sudo apt install curl sudo apt install python3 sudo apt install gobuster
macOS:
Command — copy this
brew install python3 brew install gobuster
Windows: Built-in (PowerShell: Invoke-WebRequest) Download https://python.org/downloads/
Command — copy this
go install github.com/OJ/gobuster/v3@latest
═══ COMMANDS ═══
Command — copy this
curl -sS -m 2 -I "http://127.0.0.1:8000/" | head
3. Outdated banners: nameplates from Module 4 — patch them, do not exploit them
HTTP often returns a Server header. On python http.server you should expect a SimpleHTTP family token. Production daemons may print product and version. Module 4 called that a nameplate: it shrinks later CVE matching and it is noisy. An outdated banner is the same nameplate after the vendor has shipped fixes you did not apply. Literacy is: record the token on a listener YOU started; treat it as a patch ticket, not as remote code execution. Module 5 already refused exploit clones. Hiding or genericizing the token (Lesson 2) is a cost-increase, not a substitute for patching. Downloading a proof-of-concept because a header named Apache is the failure mode this heading exists to kill.
What a banner is not: a shell, a user list, permission to scan the /24 for more Server headers, or a reason to point curl at a bank. If Server is absent, write “Server: (none)” honestly — someone already hid the plate, and the software can still be old. Do not switch the target to a juicier public host. Loopback is enough to see that a listener volunteers identity. Lesson 4 will let you copy the Server line from 127.0.0.1 into ceh-webserver-lab.txt. Until then, a filled definition file is a complete Lesson 1. Do not add a second host because localhost felt small.
Command guide
Outdated banners — WHAT/WHY then lock
═══ INSTALL ═══
Linux (Debian/Ubuntu):
Command — copy this
sudo apt install curl
macOS: Built-in
Windows: Built-in (PowerShell: Invoke-WebRequest)
═══ COMMANDS ═══
Command — copy this
curl -sS -m 2 -I "http://127.0.0.1:8000/" | grep -i Server cat >> "$NOTES" << 'EOF' banner: nameplate — patch MY software refuse: exploit a stranger Server token EOF
4. What you record: three named exposures on a stack YOU run — not a target list
A web-server exposure note is boring on purpose. Date (UTC). Default page: leftover vendor/sample content you would remove on a stack you administer. Directory listing: a tree the daemon prints when index is missing — disable on YOUR servers; never wordlist strangers. Outdated banner: a version token that belongs in a patch ticket, not an exploit search. Ethics: audit a stack YOU run; no attacking random hosts; no directory brute of strangers; no gobuster/dirb/ffuf at café/classmate/campus; no default-page dorking as homework. Legal line: original Cyberlium teaching mapped to the CEH v13 web-servers domain — not official EC-Council training, not a cert, not exam dumps. Path: $HOME/cyberlium-lab/web-server-exposes-notes.txt, chmod 600. Empty files fail. Files that list victim URLs fail even if you “only planned.” World-readable 777 fails.
A useful feeling: the lesson is “too small” because you did not knock on a live site. That feeling is how people graduate into unauthorized web scans. The skill is stopping at names. Lesson 4 will let you see listing, an index, a bind to 127.0.0.1, and a Server token on a listener YOU started — then you stop the server. Until then, locked definitions are complete. Do not paste gobuster command lines into the notes as “research.” Do not gist other people’s hostnames.
5. Wrong vs right: gobuster-the-internet vs named leftovers on YOUR stack
Worked failure — same curiosity about what HTTP volunteers, opposite blast radius. Right never treats a classmate, a café, or a random site as a web-server lab.
Wrong
Gobuster or dirb a shop, café, campus CMS, or classmate Pages site. Google-dork default splash pages and call the hits homework. Treat a Server header as a shell. Download an exploit because nginx appeared in a banner. Save world-readable notes with victim URLs. Claim this path is official CEH training. This course is not a cert and does not give you that hunt.
Right
Name default pages, directory listing, and outdated banners as hygiene findings on a stack YOU run. Refuse stranger directory brute and random-host attacks. Write web-server-exposes-notes.txt under $HOME/cyberlium-lab, chmod 600. Next: Patching and Least Modules — unused modules, TLS, least-privilege worker — still not a weapon.
6. Hands-on: lock web-server-exposes-notes.txt — names only, no stranger scan
On a computer you own, create cyberlium-lab if needed. Fill the template in your own words. Do not add a wordlist. Do not add a host that is not a definition. chmod 600. The block below writes the file and refuses to become a directory-brute kit — there is no gobuster, no extra host, no dork query.
Command guide
web_server_exposes_notes.sh — named leftovers only; no gobuster / no strangers
═══ INSTALL ═══
Linux (Debian/Ubuntu):
Command — copy this
sudo apt install gobuster
macOS:
Command — copy this
brew install gobuster
Windows:
Command — copy this
go install github.com/OJ/gobuster/v3@latest
═══ COMMANDS ═══
Command — copy this
cd "$HOME/cyberlium-lab"
Command — copy this
{Mission: web-server-exposes-notes.txt in cyberlium-lab (mode 600)
1) In your own words, define default pages, directory listing, and outdated banners as hygiene findings on a stack YOU run — no stranger scans. 2) Fill $HOME/cyberlium-lab/web-server-exposes-notes.txt with the legal line, ethics refuse line, and your definitions. chmod 600. 3) Ethics: audit a stack YOU run. No attacking random hosts. No directory brute of strangers. Lesson 4 is localhost only.
Stuck? Ask Cyberlium AI Mentor
If “I cannot learn web servers without gobustering a live site” still feels true, ask for a hint — not a wordlist. Try: "Hint only: why default pages, directory listing, and outdated banners are named leftovers on a stack I run, why stranger directory brute is out, and where locked notes live?" You still fill web-server-exposes-notes.txt. No café. No gobuster. No random hosts.
You now treat a web server as a clerk that can volunteer leftovers — default pages, a file tree, a version token — and you treat gobuster-against-strangers, default-page dorking, and random-host attacks as out of this course. Notes are locked in cyberlium-lab. This is original Cyberlium teaching mapped to the CEH v13 web-servers domain — not official EC-Council training, not a cert, not exam dumps. Next — Patching and Least Modules — unused modules, TLS, and a worker that is not root, still on a stack you run.
Knowledge Check
APPLY: A classmate wants to gobuster a local shop “for CEH web-server enum.” What are the named exposures here, and what do you do?
Multiple choice
Knowledge Check
APPLY: True or False: Google-dorking leftover “It works!” pages and curling the hits is ethical, because Module 13 is hacking web servers.
True or False
Knowledge Check
APPLY: You are filling web-server-exposes-notes.txt. Which pairing matches the allowed artifact and hygiene?
Multiple choice
Knowledge Check
APPLY: curl of http://192.168.0.1/ shows a home router login (TP-Link / Netgear / Huawei / "Router Admin"). Is that DEMO in scope as a hacking target?
Multiple choice