OSINT › Module 1 › Lesson 4
Lab — Write YOUR Self-OSINT Scope File
scope.yaml + HANDLE= from YOU only — then serve the file on never 0.0.0.0.
Visual · osint_scope_lab
Lab: write YOUR handles/emails/domains. Bind
Opening
If the identifier is not in the file, the tool does not get it. That is the whole lab.
Lessons 1–3 defined OSINT, wrote RoE, and bookmarked maps. This lab is the artifact later modules will read: scope.yaml listing YOUR handles, YOUR emails, YOUR domains, and sites YOU own. A sibling scope.env holds HANDLE=, EMAIL=, DOMAIN= so Sherlock and holehe cannot be fed a Discord dare. You will also start a loopback viewer on that shows the file to you — never 0.0.0.0. Original Cyberlium.
1. Lab contract: identify DEMO, then write only YOUR identifiers
GATE first. curl http://192.168.0.1/ — Router Admin means STOP. The rest of the lab is files under $HOME/cyberlium-lab and HTTP on
scope.yaml is not a target pack. If you have no domain, write none: and skip domain tools later. If you have no public site, skip Wayback CDX later. Empty is honest. A classmate handle is a fail.
Command guide
Lab contract: identify DEMO, then write only YOUR identifiers
═══ INSTALL ═══
Linux (Debian/Ubuntu):
Command — copy this
pipx install sherlock-project pipx install theHarvester pipx install holehe sudo apt install nmap
macOS:
Command — copy this
pipx install sherlock-project pipx install theHarvester pipx install holehe brew install nmap
Windows:
Command — copy this
pip install sherlock-project pip install theHarvester pip install holehe choco install nmap # or download https://nmap.org/download.html
═══ COMMANDS ═══
Command — copy this
cat > "$HOME/cyberlium-lab/scope.yaml" << 'YAML' owner: REPLACE_WITH_YOUR_NOTE_NAME handles: - REPLACE_YOUR_HANDLE emails: - [email protected] domains: - none sites: - none never: - classmates - strangers - nmap 192.168.0.0/24 - hydra - breach dumps YAML
2. scope.env for tools, then a loopback viewer YOU own
Tools in later modules should read HANDLE= from a file you wrote, not from a chat paste. Create scope.env with HANDLE, EMAIL, DOMAIN. If you have no domain, DOMAIN=none.
The HTTP toy must hardcode HOST="127.0.0.1" and PORT=8800. If a snippet says 0.0.0.0, refuse it. Classmates run their own lab.
Command guide
scope.env for tools, then a loopback viewer YOU own
═══ INSTALL ═══
Linux (Debian/Ubuntu):
Command — copy this
pipx install sherlock-project pipx install maigret pipx install holehe sudo apt install curl sudo apt install python3
macOS:
Command — copy this
pipx install sherlock-project pipx install maigret pipx install holehe brew install python3
Windows:
Command — copy this
pip install sherlock-project pip install maigret pip install holehe
Built-in (PowerShell: Invoke-WebRequest) Download https://python.org/downloads/
═══ COMMANDS ═══
Command — copy this
printf '%s ' 'HANDLE=REPLACE_YOUR_HANDLE' '[email protected]' 'DOMAIN=none' 'SITE=none' > "$HOME/cyberlium-lab/scope.env" cat > "$HOME/cyberlium-lab/t12_m01_scope_view.py" << 'PY' from http.server import BaseHTTPRequestHandler, HTTPServer from pathlib import Path HOST, PORT = "127.0.0.1", 8800 if HOST != "127.0.0.1": raise SystemExit("refusing non-loopback bind") SCOPE = Path.home() / "cyberlium-lab" / "scope.yaml" class H(BaseHTTPRequestHandler): def log_message(self, fmt, *args): print("[t12-scope]", fmt % args) def do_GET(self): body = SCOPE.read_bytes() if SCOPE.exists() else b"missing scope.yaml " self.send_response(200) self.send_header("Content-Type", "text/plain; charset=utf-8") self.send_header("X-Cyberlium-Lab", "t12-m01-scope") self.send_header("Content-Length", str(len(body))) self.end_headers() self.wfile.write(body) print("bind", HOST, PORT) HTTPServer((HOST, PORT), H).serve_forever() PY
Command — copy this
grep -n "127.0.0.1" "$HOME/cyberlium-lab/t12_m01_scope_view.py" grep -n "0.0.0.0" "$HOME/cyberlium-lab/t12_m01_scope_view.py" && echo "FIX bind"
3. curl SAFE, edit REPLACE_, lock the proof
Start the viewer. curl -sS http:/// should print your YAML. Then edit REPLACE_ lines to YOUR real handle/email (and domain if you own one). Re-curl. Stop the Python process when done.
Write t12-m01-l04-scope-lab.txt with date, DEMO GATE, and “no classmates in file.” chmod 600 everything. Quiz is next.
Command guide
curl SAFE, edit REPLACE_, lock the proof
═══ COMMANDS ═══
Command — copy this
grep -n "REPLACE_" "$HOME/cyberlium-lab/scope.yaml" "$HOME/cyberlium-lab/scope.env"
4. What you ship: scope.yaml, scope.env, loopback viewer, no strangers in the file
Placeholders replaced with YOUR identifiers or honest none. Viewer was DEMO identified or STOPPED. chmod 600. No classmate handles. No 0.0.0.0.
5. What you record before the next lesson
Date. scope.yaml handles/emails/domains. HANDLE= in scope.env. curl SAFE. NEVER third-party names, NEVER nmap/hydra. File t12-m01-l04-scope-lab.txt chmod 600.
6. Wrong vs right: strangers vs identifiers YOU own
Worked failure — same OSINT word, opposite target. Right never needs a classmate or a dump site.
Wrong
Add three classmates “as control group.” python bind 0.0.0.0 so a phone can see your email. nmap /24 to find extra domains.
Right
Write YOUR YAML. curl chmod 600. Next: Quiz — OSINT Mindset.
Mission: freeze YOUR identifiers in a 600 file
1) / STOP if router. 2) Edit scope.yaml and scope.env to YOUR handles/emails/domains (or none). 3) Start t12_m01_scope_view.py on and curl it. 4) Stop the process. chmod 600. Never list classmates. Never bind 0.0.0.0.
Stuck? Ask Cyberlium AI Mentor
If Python is missing, ask Mentor for a PATH hint — not for emailing your YAML to a friend to “review OSINT.”
Knowledge Check
APPLY: The lab helper says HTTPServer(("0.0.0.0", 8800)). What do you do?
Multiple choice
Knowledge Check
APPLY: True or False: You should add a classmate handle to scope.yaml as a control.
True or False
Knowledge Check
APPLY: curl http://192.168.0.1/ is Huawei Router Admin during the scope lab. Next?
Multiple choice