150 tasks across 50 chapters. Each task: Why → What → How, expected output, hint and answer. Industries: retail, banking, healthcare, IT, logistics.
Safe practice only. Do these tasks on your own laptop, your own VM, localhost, Docker, or free legal labs (TryHackMe-style). Never test a website or network you do not own or have written permission for. All names, IPs and numbers are made up.
Open chapter lessons · Full guided lab: find private public ip and gateway (not repeated here)
Why: Every security check starts with knowing which address is yours. If you mix up private and public IPs you may scan the wrong machine.
What: On your own laptop or lab VM, write down your private IP, default gateway and public IP.
How:
ip -4 addr show (or ifconfig). Windows: run ipconfig.inet / IPv4 Address that is not 127.0.0.1.ip route | grep default (Windows: Default Gateway line) to find the gateway.curl -s https://ifconfig.me to see your public IP.Expected output: Private IP like 192.168.1.23, gateway like 192.168.1.1, public IP that is NOT in 10.x, 172.16–31.x or 192.168.x.
The gateway is usually your router and ends in .1 or .254.
Why: Banks must keep ATMs and staff PCs on private networks. Spotting a public IP on an internal device is a real audit finding.
What: Use the data file below. Mark each IP as Private, Public or Loopback.
Data file: branch-devices.csv
| Device | Branch | IP |
|---|---|---|
| ATM-01 | Pune (₹) | 10.20.1.15 |
| Teller-PC-3 | Mumbai | 192.168.5.40 |
| CCTV-NVR | London (£) | 172.20.3.9 |
| Printer-2 | Nagpur | 8.8.4.4 |
| Health-check | Berlin (€) | 127.0.0.1 |
About this file: A made-up list of devices in bank branches. Each row is one device. Columns: Device = device name; Branch = city; IP = the IPv4 address the device uses.
How:
import ipaddress; ipaddress.ip_address('10.20.1.15').is_private.Expected output: ATM-01 Private, Teller-PC-3 Private, CCTV-NVR Private, Printer-2 Public, Health-check Loopback.
172.20 is inside 172.16–172.31.
Why: Hospitals separate medical devices from guest Wi-Fi using subnets. You must know how many hosts fit.
What: For 10.50.8.0/22, find network address, broadcast, first host, last host and usable host count.
How:
python3 -c "import ipaddress as i;n=i.ip_network('10.50.8.0/22');print(n.network_address,n.broadcast_address,n.num_addresses-2)".Expected output: Network 10.50.8.0, broadcast 10.50.11.255, first 10.50.8.1, last 10.50.11.254, 1022 usable hosts.
A /22 covers four /24 blocks: .8, .9, .10, .11.
Open chapter lessons · Full guided lab: check listening ports and turn on firewall (not repeated here)
Why: An open port you don't know about is a door you forgot to lock.
What: On your own Linux VM, list every listening TCP port and the program behind it.
How:
sudo ss -tulpn.Expected output: At least :22 sshd. If nginx is installed, :80 nginx.
0.0.0.0 or [::] means reachable from the network.
Why: Shop servers in Bengaluru or Toronto often expose FTP by mistake. You must recognise risky ports fast.
What: Use the data file. Name the protocol and say Keep, Replace or Close.
Data file: store-ports.csv
| Port | Seen on |
|---|---|
| 21 | POS-server, Bengaluru |
| 22 | POS-server, Bengaluru |
| 23 | Old-router, Toronto |
| 443 | Web-shop, Toronto |
| 3306 | POS-server, Bengaluru |
About this file: Made-up scan results from a shop's own servers. Each row is one open port. Columns: Port = port number; Seen on = which server and city.
How:
Expected output: 21 FTP → Replace with SFTP; 22 SSH → Keep (keys only); 23 Telnet → Close; 443 HTTPS → Keep; 3306 MySQL → Close to the internet (localhost only).
Telnet and FTP send passwords in plain text.
Why: Before opening a firewall rule you should prove a service works locally.
What: Start a tiny Python web server on port 8080 and test it.
How:
python3 -m http.server 8080 --bind 127.0.0.1 in one terminal.nc -zv 127.0.0.1 8080.curl -I http://127.0.0.1:8080/.Expected output: nc says 'succeeded'/'open'; curl shows HTTP/1.0 200 OK. After stopping, nc says 'Connection refused'.
Install nc with sudo apt install netcat-openbsd.
Open chapter lessons · Full guided lab: watch dns and https traffic in wireshark (not repeated here)
Why: Attack logs talk about SYN floods and half-open scans. You must recognise SYN, SYN-ACK, ACK.
What: Capture the handshake when you curl a local web server.
How:
python3 -m http.server 8000 --bind 127.0.0.1.sudo tcpdump -i lo -n port 8000 -c 6.curl -s http://127.0.0.1:8000/ >/dev/null.Expected output: Three lines in order: Flags [S], Flags [S.], Flags [.].
[S.] means SYN+ACK.
Why: Saying the right layer helps the right team fix it fast.
What: Use the data file and assign an OSI layer to each incident.
Data file: incidents.csv
| Incident | City |
|---|---|
| Cable cut to ATM | Chennai |
| ARP spoofing on branch LAN | Dubai (AED) |
| Wrong route to payment gateway | Singapore (S$) |
| SYN flood on port 443 | Hyderabad |
| SQL injection on login form | New York ($) |
About this file: Made-up incident list. Each row is one incident. Columns: Incident = what happened; City = where.
How:
Expected output: Cable 1, ARP 2, route 3, SYN flood 4, SQL injection 7.
ARP works with MAC addresses.
Why: DNS normally uses UDP; seeing it helps you spot DNS tunnelling later.
What: Capture one DNS query and see the protocol.
How:
sudo tcpdump -n -i any port 53 -c 4.dig example.com.dig +tcp example.com.Expected output: First lookup shows UDP packets; the +tcp lookup shows TCP flags [S].
tcpdump prints 'UDP' or flags for TCP.
Open chapter lessons · Full guided lab: launch ec2 safely key pair my ip billing alarm (not repeated here)
Why: SSH open to 0.0.0.0/0 is the most common cloud mistake.
What: Use the data file and rewrite each rule safely.
Data file: security-group.csv
| Port | Source | Purpose |
|---|---|---|
| 22 | 0.0.0.0/0 | Admin SSH |
| 80 | 0.0.0.0/0 | Website |
| 3306 | 0.0.0.0/0 | Database |
| 8080 | 0.0.0.0/0 | Old test app |
About this file: Made-up inbound rules of a shop's EC2 server. Each row is one rule. Columns: Port = port allowed; Source = who may connect (0.0.0.0/0 = everyone); Purpose = why it was added.
How:
Expected output: 22 → your-ip/32; 80 → keep; 3306 → delete; 8080 → delete.
Only the public website needs 0.0.0.0/0.
Why: SSH refuses a key that others can read, and a leaked key = server takeover.
What: Create a dummy key and set safe permissions.
How:
ssh-keygen -t ed25519 -f ~/lab-key -N ''.ls -l ~/lab-key.chmod 400 ~/lab-key.ls -l ~/lab-key again.Expected output: Permissions change to -r--------.
400 = owner read only.
stat -c %a ~/lab-key prints 400.Why: After launch, check that only you have logged in.
What: On your own VM, list recent logins and failed attempts.
How:
last -n 10.sudo grep 'Failed password\|Invalid user' /var/log/auth.log | tail (Amazon Linux: sudo journalctl -u sshd | grep Failed).... | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' | sort | uniq -c | sort -rn | head.Expected output: Your own IP in last; on a public VM, failed tries from unknown IPs.
See the lab linked above for a full walk-through.
last (successful), treat it as an incident.Open chapter lessons · Full guided lab: linux practice folder safe permissions (not repeated here)
Why: Investigators keep files in a folder only they can read.
What: Create ~/case-001 with notes.txt, readable only by you.
How:
mkdir -p ~/case-001echo 'Case for HDFC-test branch, Pune' > ~/case-001/notes.txtchmod 700 ~/case-001 && chmod 600 ~/case-001/notes.txtls -ld ~/case-001; ls -l ~/case-001Expected output: drwx------ for the folder, -rw------- for the file.
700 = rwx for owner only.
sudo -u nobody cat ~/case-001/notes.txt → Permission denied.Why: Attackers drop big archives or new scripts. find helps you spot them.
What: List files in /tmp changed in the last day and files over 10 MB in /var.
How:
find /tmp -type f -mtime -1 -lssudo find /var -type f -size +10M -exec ls -lh {} \;Expected output: Mostly logs and package caches in /var.
-mtime -1 = less than 1 day.
Why: Before sending a file, check how many records it has.
What: Make the file below and count rows.
Data file: patients.csv
| PatientID | Name | City |
|---|---|---|
| P101 | Meera Joshi | Nashik |
| P102 | John Carter | Sydney (A$) |
| P103 | Fatima Khan | Lucknow |
About this file: Made-up patient list. Each row is one patient. Columns: PatientID = unique ID; Name = patient name; City = home city.
How:
nano.wc -l patients.csv.tail -n +2 patients.csv | wc -l to skip the header.Expected output: 4 lines total, 3 records.
tail -n +2 starts from line 2.
Open chapter lessons · Full guided lab: read ssh login log failed attempts (not repeated here)
Why: grep, awk, sort and uniq turn thousands of log lines into a short answer.
What: Use the sample log and find which IP failed most.
Data file: auth-sample.log
| Line |
|---|
| Oct 24 10:01 sshd: Failed password for root from 203.0.113.7 |
| Oct 24 10:02 sshd: Failed password for admin from 203.0.113.7 |
| Oct 24 10:03 sshd: Failed password for root from 198.51.100.4 |
| Oct 24 10:04 sshd: Accepted publickey for ravi from 192.0.2.10 |
| Oct 24 10:05 sshd: Failed password for test from 203.0.113.7 |
About this file: Made-up SSH log. Each line is one login attempt. Parts: time, program (sshd), result (Failed/Accepted), user, source IP. IPs are documentation ranges, not real people.
How:
grep 'Failed' auth-sample.log | awk '{print $NF}' | sort | uniq -c | sort -rnExpected output: 3 203.0.113.7 then 1 198.51.100.4.
$NF = last field.
Why: Malware hides as normal names. ps + lsof show what really runs.
What: Start a Node or Python server and find its PID, user and port.
How:
node -e "require('http').createServer((q,r)=>r.end('ok')).listen(3000,'127.0.0.1')" & (or python3 -m http.server 3000 &)ps aux | grep -E 'node|http.server' | grep -v grepsudo lsof -i :3000kill %1Expected output: lsof shows the PID listening on 127.0.0.1:3000.
%1 is the first background job.
lsof -i :3000 prints nothing.Why: A changed hash means a changed file — key for integrity checks.
What: Hash a config file, change one letter, hash again.
How:
echo 'limit=50000 INR' > cfg.txt; sha256sum cfg.txtsed -i 's/50000/90000/' cfg.txt; sha256sum cfg.txtExpected output: Two completely different hashes.
Even one character changes the whole hash.
Open chapter lessons · Full guided lab: install nginx hide version test config (not repeated here)
Why: Access logs show who visited, what they asked for and the result.
What: Make 5 requests on your local nginx and read them.
How:
sudo apt install nginx (lab VM).for p in / /track /admin /.env /; do curl -s -o /dev/null http://127.0.0.1$p; donesudo tail -n 5 /var/log/nginx/access.logsudo awk '{print $9}' /var/log/nginx/access.log | sort | uniq -cExpected output: 200 for /, 404 for /track, /admin, /.env.
Field 9 is the status code.
Why: A public .git or .env leaks passwords.
What: Add a rule that denies dotfiles, then prove it.
How:
echo SECRET=x | sudo tee /var/www/html/.envcurl -s http://127.0.0.1/.env (shows SECRET — bad).location ~ /\. { deny all; } inside the server block in /etc/nginx/sites-available/default.sudo nginx -t && sudo systemctl reload nginxExpected output: Before: SECRET=x. After: 403 Forbidden.
Always run nginx -t before reload.
curl -o /dev/null -w '%{http_code}' http://127.0.0.1/.env prints 403.Why: Server headers tell attackers your version.
What: Run both in Docker and compare the Server header.
How:
docker run -d --rm -p 8081:80 --name a httpddocker run -d --rm -p 8082:80 --name n nginxcurl -sI localhost:8081 | grep -i server; curl -sI localhost:8082 | grep -i serverdocker stop a nExpected output: Apache/2.4.x and nginx/1.x — versions are visible.
See the linked lab to hide the version.
Open chapter lessons · Full guided lab: static site security headers curl (not repeated here)
Why: Even a simple page should only serve the files you meant to publish.
What: Serve one index.html for 'Sharma Sweets, Jaipur' with nginx in Docker.
How:
mkdir site && echo '<h1>Sharma Sweets, Jaipur</h1>' > site/index.htmldocker run -d --rm -p 8090:80 -v $PWD/site:/usr/share/nginx/html:ro --name s nginxcurl -s localhost:8090curl -s -o /dev/null -w '%{http_code}' localhost:8090/../etc/passwdExpected output: The h1 text, and 400/404 for the path trick.
:ro mounts the folder read-only.
Why: Web files writable by www-data let a hacked app rewrite your site.
What: Make site files owned by your user and read-only for nginx.
How:
sudo chown -R $USER:www-data /var/www/htmlsudo find /var/www/html -type d -exec chmod 750 {} \;sudo find /var/www/html -type f -exec chmod 640 {} \;curl -I http://127.0.0.1/Expected output: Site still loads with 200.
nginx only needs read.
sudo -u www-data touch /var/www/html/x fails.Why: Default error pages reveal server info.
What: Add a plain 404 page for a clinic site.
How:
echo 'Page not found – City Clinic, Kolkata' | sudo tee /var/www/html/404.htmlerror_page 404 /404.html; and server_tokens off; in nginx.sudo nginx -t && sudo systemctl reload nginxcurl -si http://127.0.0.1/nope | headExpected output: Your text, and Server header without version.
server_tokens goes in http or server block.
Open chapter lessons · Full guided lab: lemp php fpm hide php errors (not repeated here)
Why: PHP errors print file paths and SQL to attackers.
What: Make a page with an error and stop it showing to visitors.
How:
echo '<?php echo $x->y;' | sudo tee /var/www/html/err.phpcurl -s http://127.0.0.1/err.phpdisplay_errors = Off and log_errors = On.sudo systemctl restart php*-fpm; curl again; delete err.php.Expected output: Before: Warning with path. After: empty page; error goes to the log.
Find php.ini with php --ini.
sudo tail /var/log/php*-fpm.log shows the warning.Why: phpinfo() shows versions, paths and env vars.
What: Find and remove any info pages.
How:
sudo grep -rl 'phpinfo' /var/www/Expected output: 404 for the old info.php.
Common names: info.php, test.php.
Why: Printing user input directly allows XSS.
What: Build a tiny PHP form and fix it with htmlspecialchars.
How:
<?php echo 'Thanks '.$_GET['n'];curl 'http://127.0.0.1/fb.php?n=<b>Riya</b>' → raw tag.htmlspecialchars($_GET['n'] ?? '', ENT_QUOTES).Expected output: After fix: <b>Riya</b>.
Same idea: Node uses template escaping, Java uses JSTL c:out.
Open chapter lessons · Full guided lab: mysql least privilege read only user (not repeated here)
Why: You must read data before you can protect it.
What: Create the table from the data file in a MySQL Docker container.
Data file: shipments table
| id | customer | city | amount | currency |
|---|---|---|---|---|
| 1 | Rahul Deshmukh | Aurangabad | 1250 | INR |
| 2 | Emily Clark | Manchester | 40 | GBP |
| 3 | Ahmed Ali | Dubai | 300 | AED |
About this file: Made-up shipment records. Each row is one shipment. Columns: id = number; customer = name; city = destination; amount = practice value (not a real fee); currency = code.
How:
docker run -d --rm --name db -e MYSQL_ROOT_PASSWORD=labpass -p 127.0.0.1:3306:3306 mysql:8docker exec -it db mysql -uroot -plabpassCREATE DATABASE lab; USE lab; CREATE TABLE ship(id INT PRIMARY KEY, customer VARCHAR(50), city VARCHAR(40), amount INT, currency CHAR(3));SELECT customer, city FROM ship WHERE currency='INR';Expected output: One row: Rahul Deshmukh | Aurangabad.
-p 127.0.0.1:3306 keeps the DB off the network.
SELECT COUNT(*) FROM ship; = 3.Why: Reports should never be able to delete data.
What: Create user 'report' with SELECT only.
How:
CREATE USER 'report'@'%' IDENTIFIED BY 'Rep0rt!lab';GRANT SELECT ON lab.* TO 'report'@'%';DELETE FROM lab.ship;Expected output: ERROR 1142: DELETE command denied.
See the linked least-privilege lab for more.
SHOW GRANTS FOR 'report'@'%'; lists only SELECT.Why: String-built SQL is how SQL injection happens.
What: Query by city with a parameter, not string join.
How:
pip install pymysqlcur.execute("SELECT * FROM ship WHERE city='"+c+"'") with c="x' OR '1'='1" → all rows.cur.execute('SELECT * FROM ship WHERE city=%s',(c,))Expected output: Unsafe returns 3 rows; safe returns 0.
Java: PreparedStatement; Node: mysql2 with ? placeholders.
Open chapter lessons · Full guided lab: mysql backup restore mysqldump (not repeated here)
Why: One wrong UPDATE without WHERE can change every customer's balance.
What: Back up table ship (from ch10 task), then run a safe UPDATE.
How:
docker exec db mysqldump -uroot -plabpass lab ship > ship.sqlSTART TRANSACTION;UPDATE ship SET city='Pune' WHERE id=1;SELECT * FROM ship; then COMMIT;Expected output: Only row 1 changes; ship.sql exists and is not empty.
Use a transaction so you can ROLLBACK.
grep -c INSERT ship.sql ≥ 1.Why: MySQL can refuse dangerous updates for you.
What: Turn on sql_safe_updates and try an UPDATE with no WHERE.
How:
SET sql_safe_updates=1;UPDATE ship SET amount=0;Expected output: ERROR 1175: safe update mode.
Start the client with --safe-updates to make it default.
SELECT SUM(amount) FROM ship; is unchanged.Why: Keys stop orphan records, like a visit for a patient who doesn't exist.
What: Create patients and visits tables linked by a key.
How:
CREATE TABLE pat(id INT PRIMARY KEY, name VARCHAR(40));CREATE TABLE visit(id INT PRIMARY KEY, pat_id INT, FOREIGN KEY(pat_id) REFERENCES pat(id));INSERT INTO pat VALUES(1,'Kavya Rao');INSERT INTO visit VALUES(1,99);Expected output: ERROR 1452: foreign key constraint fails.
Patient 99 doesn't exist.
INSERT INTO visit VALUES(1,1); works.Open chapter lessons · Full guided lab: check dns records dig nslookup (not repeated here)
Why: DNS tells you where a name points; wrong records cause outages and takeovers.
What: List A, AAAA, MX, NS and TXT for example.com.
How:
dig +short A example.comExpected output: IP addresses for A/AAAA, name servers for NS.
example.com is a reserved test domain — safe to query.
Why: A CNAME pointing to a deleted cloud resource can be taken over.
What: Use the data file and mark risky records.
Data file: dns-records.csv
| Name | Type | Target | Target exists? |
|---|---|---|---|
| www | CNAME | shop.example.net | Yes |
| shop-old | CNAME | old-bucket.s3.amazonaws.com | No (deleted) |
| @ | A | 203.0.113.20 | Yes |
About this file: Made-up DNS records of a shop. Each row is one record. Columns: Name = sub-name; Type = record type; Target = where it points; Target exists? = whether that resource is still alive.
How:
Expected output: shop-old is Risky; others OK.
Deleted bucket + live CNAME = takeover risk.
Why: Testing on a local name avoids touching real domains.
What: Make track.lab point to 127.0.0.1.
How:
echo '127.0.0.1 track.lab' | sudo tee -a /etc/hostsping -c1 track.labcurl -I http://track.lab/ (nginx running)Expected output: Ping replies from 127.0.0.1.
/etc/hosts is checked before DNS.
getent hosts track.lab prints 127.0.0.1.Open chapter lessons · Full guided lab: certbot https redirect renewal dry run (not repeated here)
Why: Name-based hosting saves cost, but a wrong default server can show the wrong shop.
What: Serve a.lab and b.lab from different folders.
How:
sudo nginx -t && sudo systemctl reload nginxcurl -s a.lab; curl -s b.labExpected output: Different page text for each name.
Add a catch-all default_server that returns 444.
curl -s -H 'Host: x.lab' 127.0.0.1 gets no shop page.Why: You can practise TLS without a real domain.
What: Create a self-signed cert and serve HTTPS.
How:
openssl req -x509 -nodes -newkey rsa:2048 -days 7 -subj '/CN=a.lab' -keyout a.key -out a.crtlisten 443 ssl; ssl_certificate / ssl_certificate_key.curl -vk https://a.lab/ 2>&1 | grep -iE 'subject|TLS'Expected output: subject: CN=a.lab and TLSv1.3/1.2.
-k ignores trust because it's self-signed.
Why: Login pages must never stay on HTTP.
What: Prove port 80 redirects.
How:
return 301 https://$host$request_uri; to the port 80 block.curl -sI http://a.lab/Expected output: 301 with Location: https://a.lab/.
See linked certbot lab for real domains.
Open chapter lessons · Full guided lab: s3 private bucket presigned url (not repeated here)
Why: Public S3 buckets leak patient files every year.
What: Read the policy in the data file and say what is public.
Data file: policy.txt
| Field | Value |
|---|---|
| Effect | Allow |
| Principal | * |
| Action | s3:GetObject |
| Resource | arn:aws:s3:::clinic-mumbai/reports/* |
About this file: A made-up bucket policy shown as a table. Each row is one field of one statement. Columns: Field = policy key; Value = its setting.
How:
Expected output: Anyone can GetObject on reports/*.
Principal * = whole internet.
Why: You can learn S3 without an AWS bill.
What: Run MinIO in Docker, create a private bucket, upload a file.
How:
docker run -d --rm -p 127.0.0.1:9000:9000 --name minio minio/minio server /datacurl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:9000/invoices/a.txtExpected output: 403 without credentials.
Buckets are private by default.
Why: Share one file for a short time, not the whole bucket.
What: Generate a 60-second URL in MinIO.
How:
generate_presigned_url('get_object', Params={'Bucket':'invoices','Key':'a.txt'}, ExpiresIn=60).Expected output: 200 first, 403 after expiry.
Clock must be correct.
Open chapter lessons · Full guided lab: rds private security group backups (not repeated here)
Why: Public databases are a top breach cause.
What: Mark each setting Safe or Fix.
Data file: rds-settings.csv
| Setting | Value |
|---|---|
| Publicly accessible | Yes |
| Backup retention | 0 days |
| Storage encryption | On |
About this file: Made-up RDS settings. Each row is one setting. Columns: Setting = name; Value = current value.
How:
Expected output: Public access Fix; backups 0 days Fix; encryption on Safe.
Database should never be public.
Why: Database traffic can be sniffed if not encrypted.
What: Require SSL for a user in Docker MySQL.
How:
ALTER USER 'report'@'%' REQUIRE SSL;mysql -h127.0.0.1 -ureport -p --ssl-mode=DISABLED--ssl-mode=REQUIRED.Expected output: First fails (access denied), second works.
MySQL 8 auto-creates certs.
Why: A backup you never restored is not a backup.
What: Restore ship.sql into a new database.
How:
CREATE DATABASE restore_test;docker exec -i db mysql -uroot -plabpass restore_test < ship.sqlSELECT COUNT(*) FROM restore_test.ship;Expected output: Same row count as lab.ship.
ship.sql from ch11 task 1.
Open chapter lessons · Full guided lab: reels app security review secrets iam (not repeated here)
Why: Keys pushed to Git are found by bots in minutes.
What: Run gitleaks on a test repo.
How:
git init demo && cd demo && echo 'AWS_SECRET=abc123fake' > .env && git add . && git commit -m xdocker run --rm -v $PWD:/r zricethezav/gitleaks detect -s /rExpected output: gitleaks reports a leak (or flags .env).
Add .env to .gitignore.
Why: Unchecked uploads let attackers upload scripts.
What: Accept only mp4 under 50 MB with multer.
How:
npm i express multerExpected output: .php rejected, .mp4 accepted.
Also check the extension, not only mimetype.
Why: The app only needs to put/get videos in one bucket.
What: Rewrite s3:* on * to the minimum.
How:
Expected output: Policy with 2 actions and 1 resource.
No wildcard actions.
Open chapter lessons · Full guided lab: plan safe practice lab scope (not repeated here)
Why: You can't secure what you don't know exists.
What: List every service from ch1–16 tasks.
How:
ss -tulpn and docker ps.Expected output: A table of 5–10 services.
Include Docker containers.
Why: Professionals always write scope before testing.
What: Write what you may and may not test.
How:
Expected output: A short scope doc.
See the linked scope lab.
Why: Breaking a lab is normal; recovery should be one click.
What: Take a VirtualBox snapshot named clean-base.
How:
VBoxManage snapshot "lab-vm" take clean-base.Expected output: clean-base listed under Snapshots.
Restore once to prove it works.
Open chapter lessons · Full guided lab: virtualbox isolated lab host only (not repeated here)
Why: Good intent is not permission.
What: Mark each scenario Legal or Illegal.
Data file: scenarios.csv
| Scenario |
|---|
| Scan your own VM |
| Scan your college website to 'help' |
| TryHackMe free room |
| Test a friend's shop app without written OK |
About this file: Made-up scenarios. Each row is one situation to judge.
How:
Expected output: Rows 1 and 3 Legal; 2 and 4 Illegal.
Indian IT Act sections 43/66 apply without permission.
Why: Attack tools must not reach your home network.
What: Check Kali only sees the host-only network.
How:
ip -4 addr.ping -c2 8.8.8.8ping -c2 <target VM IP>Expected output: Internet ping fails; target VM ping works.
Use a Host-only adapter in VirtualBox.
Why: Logs protect you and help reports.
What: Record every command you run.
How:
script -a ~/pentest-$(date +%F).logexit.tail ~/pentest-*.logExpected output: Commands and outputs saved with date.
script records the whole terminal.
Open chapter lessons · Full guided lab: inventory lab devices services close list (not repeated here)
Why: Scanning shows what an attacker would see.
What: Scan the target VM's top ports.
How:
nmap -sV -T4 192.168.56.101 (use your VM IP)Expected output: 22/ssh, 80/http etc. with versions.
Only scan IPs you own.
ss -tulpn on the VM.Why: Passive recon touches nothing on the target.
What: Collect public info for example.com.
How:
whois example.comdig NS example.comExpected output: Registrar, name servers, cert names.
Passive means no packets to the target web server.
Why: Defenders see scans differently.
What: Run both scans on your VM and watch with tcpdump.
How:
sudo tcpdump -n port 80 -c 20.sudo nmap -sS -p80 VM then nmap -sT -p80 VM.Expected output: -sT completes the handshake; -sS ends with RST.
Look for [R] after [S.].
Open chapter lessons · Full guided lab: patch outdated package verify cve fixed (not repeated here)
Why: You can't fix everything at once.
What: Sort the data file by risk.
Data file: findings.csv
| ID | CVSS | Internet-facing |
|---|---|---|
| CVE-A | 9.8 | Yes |
| CVE-B | 5.3 | No |
| CVE-C | 7.5 | Yes |
About this file: Made-up scan findings. Each row is one finding. Columns: ID = finding name; CVSS = severity 0–10; Internet-facing = reachable from the internet.
How:
Expected output: CVE-A first, then CVE-C, then CVE-B.
Exposure matters as much as score.
Why: Old images carry known CVEs.
What: Scan nginx:1.19 vs nginx:latest.
How:
docker run --rm aquasec/trivy image --severity HIGH,CRITICAL nginx:1.19Expected output: 1.19 shows many more HIGH/CRITICAL.
Count with the summary line.
Why: Quick web misconfig check.
What: Scan your own VM's HTTP.
How:
nikto -h http://192.168.56.101Expected output: Missing X-Frame-Options etc.
Fix with the linked headers lab.
Open chapter lessons · Full guided lab: juice shop local headers cookies errors fixes (not repeated here)
Why: Seeing raw requests is the base of web testing.
What: Proxy a login on local Juice Shop.
How:
docker run -d --rm -p 127.0.0.1:3000:3000 bkimminich/juice-shopExpected output: JSON body with email and password.
Use the proxy's built-in browser.
Why: Forgotten pages are common entry points.
What: Brute-force paths on localhost:3000 only.
How:
ffuf -u http://127.0.0.1:3000/FUZZ -w /usr/share/wordlists/dirb/common.txt -mc 200Expected output: Paths like /ftp or /api.
Only on your local target.
Why: Headers block many browser attacks.
What: List headers from Juice Shop.
How:
curl -sI http://127.0.0.1:3000 | grep -iE 'x-frame|csp|x-content|strict-transport'Expected output: Some headers present; others missing.
See the linked Juice Shop headers lab.
Open chapter lessons · Full guided lab: password manager and gmail 2 step verification (not repeated here)
Why: Understand why weak passwords fall.
What: Hash Summer2020 and crack it offline on your own file.
How:
echo -n 'Summer2020' | md5sum | tee hash.txthashcat -m 0 hash.txt /usr/share/wordlists/rockyou.txt --potfile-disable (or john).Expected output: Cracked: Summer2020.
Never crack someone else's hashes.
Why: Slow hashes protect passwords even after a leak.
What: Time 1000 MD5 vs a few bcrypt hashes in Python.
How:
Expected output: MD5 finishes in milliseconds; bcrypt is much slower.
Apps should use bcrypt/argon2, never MD5.
Why: Even a cracked password fails without the second factor.
What: Set up a password manager and 2FA on an account you own.
How:
Expected output: Login needs password + code.
Never share the recovery codes digitally.
Open chapter lessons · Full guided lab: plan safe practice lab scope (not repeated here)
Why: Metasploit is for authorised labs.
What: Exploit a free TryHackMe or Metasploitable VM you own.
How:
msfconsoleExpected output: Session opens on the lab VM.
Never point Metasploit at the internet.
Why: Reports matter more than shells.
What: Document the lab exploit.
How:
Expected output: A short report with fix steps.
Impact in plain English.
Why: You must know what you are running.
What: Match each CVE to a Metasploit path in the data file.
Data file: modules.csv
| CVE | Module (fill) |
|---|---|
| CVE-2011-2523 | exploit/unix/ftp/vsftpd_234_backdoor |
| CVE-2010-2075 | exploit/unix/ftp/proftpd_133c_backdoor |
| CVE-2008-0166 | auxiliary/scanner/ssh/ssh_enumerate_users (example) |
About this file: Made-up matching exercise. Each row is one CVE. Columns: CVE = ID; Module = Metasploit path to fill or check.
How:
Expected output: CVE-2011-2523 → vsftpd_234_backdoor; others as listed.
search CVE-xxxx inside msfconsole.
Open chapter lessons · Full guided lab: http vs https login wireshark why tls (not repeated here)
Why: HTTP sends passwords as plain text.
What: Log in over HTTP on your lab and find the password in the capture.
How:
sudo tcpdump -i lo -A port 80 -c 30Expected output: Secret123 appears in the capture.
Compare with the HTTPS lab.
Why: Big captures need filters.
What: Capture and filter your VM's HTTPS.
How:
Expected output: Encrypted Application Data, not passwords.
TLS hides the content.
Why: DNS shows which sites were contacted.
What: Extract DNS names from a short capture.
How:
sudo tcpdump -n port 53 -c 10 -w dns.pcap while you dig.tcpdump -n -r dns.pcapExpected output: example.com (or your dig name) listed.
Useful in incident reviews.
Open chapter lessons · Full guided lab: harden home wifi router wpa3 wps off (not repeated here)
Why: Home routers are often left on WPA2/WPS.
What: Check your own router admin page.
How:
Expected output: WPA3 or WPA2-AES; WPS Off.
Change the default admin password too.
Why: Guests must not reach shop POS devices.
What: Turn on the guest network on your own router.
How:
Expected output: Guest IP in a different subnet; LAN ping fails.
Many routers call this AP isolation.
Why: Old standards are broken.
What: Mark each standard Safe or Replace.
Data file: wifi.csv
| Standard |
|---|
| WEP |
| WPA-TKIP |
| WPA2-AES |
| WPA3 |
About this file: Made-up list of Wi-Fi standards. Each row is one standard to judge.
How:
Expected output: WEP Replace; WPA-TKIP Replace; WPA2-AES Keep; WPA3 Keep.
WPS is a separate risk — turn it off.
Open chapter lessons · Full guided lab: audit sudo rights suid files (not repeated here)
Why: Too much sudo is a common finding.
What: See what your user can run as root.
How:
sudo -lExpected output: A short list of allowed commands.
Prefer named commands over ALL.
Why: Unexpected SUID files are a classic escalate path.
What: List SUID files and spot odd ones.
How:
find / -perm -4000 -type f 2>/dev/nullExpected output: Known tools like passwd, sudo; no random /tmp binaries.
Investigate anything under /home or /tmp.
Why: Capabilities can replace full root.
What: List files with capabilities.
How:
getcap -r / 2>/dev/nullExpected output: Usually few entries (ping, etc.).
Unexpected caps = finding.
Open chapter lessons · Full guided lab: spot the phish sample emails headers (not repeated here)
Why: Most breaches start with a click.
What: Mark each email Safe or Phish.
Data file: emails.csv
| From | Subject | Link host |
|---|---|---|
| security@sbi-secure-login.com | Urgent: verify account | sbi-secure-login.com |
| alerts@hdfcbank.com | Your monthly statement | hdfcbank.com |
| it-help@micros0ft.com | Password expires today | micros0ft.com |
About this file: Made-up email samples. Each row is one email. Columns: From = sender; Subject = subject line; Link host = domain the link goes to.
How:
Expected output: Rows 1 and 3 Phish; 2 Safe.
Hover links; don't click.
Why: Headers show the real path.
What: Inspect Received and Authentication-Results on a real mail to you.
How:
Expected output: pass/fail lines for SPF/DKIM/DMARC.
fail + urgent ask = high risk.
Why: Staff need a clear next step.
What: Make a 5-step 'I got a phish' card.
How:
Expected output: A one-page checklist.
See the linked reporting lab.
Open chapter lessons · Full guided lab: hash evidence sha256 build timeline (not repeated here)
Why: A changed hash means the file changed.
What: Hash a sample evidence file twice.
How:
echo 'case note' > evidence.txt; sha256sum evidence.txt | tee hash1.txtExpected output: Both hashes match.
Always hash before analysis.
Why: Order of events proves what happened.
What: Use the data file to sort events.
Data file: events.csv
| Time | Event |
|---|---|
| 10:01 | Failed SSH from 203.0.113.7 |
| 10:05 | Successful SSH as ravi |
| 10:12 | scp of customers.csv |
| 10:15 | USB device mounted |
About this file: Made-up event list. Each row is one event. Columns: Time = clock time; Event = what happened.
How:
Expected output: Login fail → success → file copy → USB mount.
ISO times sort correctly as text.
Why: Metadata shows created/modified times.
What: Inspect a photo or PDF you own.
How:
stat file.pdf or exiftool file.jpg.Expected output: Times and optional Author.
Don't trust times alone — clocks can be wrong.
Open chapter lessons · Full guided lab: fix sql query parameterised training app (not repeated here)
Why: XSS steals sessions in the browser.
What: Build a vulnerable page, then escape output.
How:
Expected output: Before: alert runs. After: tags shown as text.
Same idea in Node templates and Java c:out.
Why: Changing an ID in the URL must not show another user's data.
What: Make /invoice?id=1 and /invoice?id=2; log in as user1.
How:
Expected output: 403 or empty for id=2.
Never trust IDs from the client alone.
Why: Defaults and debug pages cause breaches.
What: Audit your local app with the checklist.
Data file: misconfig.csv
| Check |
|---|
| Debug/display_errors Off |
| No default admin/admin |
| Directory listing Off |
| No stack traces to users |
About this file: Checklist. Each row is one check to perform on your lab app.
How:
Expected output: All four items Yes.
curl / and a missing page to confirm.
Open chapter lessons · Full guided lab: secure new aws account root mfa cloudtrail (not repeated here)
Why: Root keys in daily use is a critical finding.
What: Mark each practice Safe or Fix.
Data file: root.csv
| Practice | Status |
|---|---|
| Root MFA | On |
| Root access keys | Created |
| Daily console login as root | Yes |
About this file: Made-up root account habits. Each row is one practice. Columns: Practice = habit; Status = current state.
How:
Expected output: MFA on Safe; access keys on root Fix; daily root login Fix.
Use an IAM admin user instead.
Why: Without logs you cannot investigate.
What: Turn on a multi-region trail in your own AWS account.
How:
Expected output: Event appears within minutes.
Never make the log bucket public.
Why: 0.0.0.0/0 on admin ports is the classic cloud hole.
What: Edit a lab SG: SSH only from your IP.
How:
Expected output: SSH works only from home IP.
Keep 443 open if it is a web server.
Open chapter lessons · Full guided lab: soc read login log brute force incident note (not repeated here)
Why: SOC analysts turn logs into tickets.
What: Use the data file and write Who/What/When/Impact/Next.
Data file: auth.csv
| Time | Result | User | IP |
|---|---|---|---|
| 10:01 | Failed | root | 203.0.113.7 |
| 10:02 | Failed | admin | 203.0.113.7 |
| 10:03 | Failed | root | 203.0.113.7 |
| 10:05 | Accepted | ravi | 192.0.2.10 |
About this file: Made-up auth events. Each row is one attempt. Columns: Time; Result; User; IP.
How:
Expected output: 203.0.113.7 failed 3×; separate success from 192.0.2.10 — document both.
Keep to facts.
Why: Not every alert is Sev-1.
What: Assign Sev-1 to Sev-4.
Data file: alerts.csv
| Alert |
|---|
| Ransomware note on file server |
| User reports suspicious email |
| Port scan from internet (blocked) |
| Checkout API down for all shops |
About this file: Made-up alerts. Each row is one alert to triage.
How:
Expected output: Ransomware Sev-1; phishing report Sev-3; scan noise Sev-4; payment outage Sev-1.
When unsure, escalate.
Why: Queries beat scrolling.
What: Find failed SSH in the last hour on your lab.
How:
sudo journalctl -u ssh --since "1 hour ago" | grep Failed | wc -lExpected output: A count and top IPs.
Save the command as a note.
Open chapter lessons · Full guided lab: harden ubuntu server ssh keys ufw fail2ban (not repeated here)
Why: A firewall with no SSH rule locks you out.
What: Enable UFW safely on your VM.
How:
sudo ufw allow OpenSSHsudo ufw enablesudo ufw statusExpected output: Status: active; OpenSSH ALLOW.
Do this on console or with a second session open.
Why: Keys beat passwords for servers.
What: Allow only public-key login.
How:
Expected output: Password login rejected; key works.
Keep a console open until tested.
Why: Auto-ban reduces noise and risk.
What: Ban after 3 fails in a lab.
How:
Expected output: Banned IP listed.
Unban with fail2ban-client set sshd unbanip.
Open chapter lessons · Full guided lab: check certificate chain verify sha256 download (not repeated here)
Why: Downloads can be swapped.
What: Verify a known SHA256.
How:
Expected output: Exact match.
Get the hash over HTTPS from the vendor.
Why: Wrong names or short keys are red flags.
What: Check https://example.com certificate.
How:
Expected output: Subject includes example.com; not expired.
Also try curl -vI https://example.com.
Why: Pick the right tool for the job.
What: Match each use case.
Data file: crypto.csv
| Use case | Type (fill) |
|---|---|
| Full-disk encryption (LUKS) | Symmetric |
| Code signing | Asymmetric |
| HTTPS session keys after handshake | Symmetric |
About this file: Made-up matching. Each row is one use case. Columns: Use case; Type to fill.
How:
Expected output: Disk encryption Symmetric; code signing Asymmetric; HTTPS session keys Symmetric.
TLS uses both.
Open chapter lessons · Full guided lab: cyber crime reporting checklist 1930 (not repeated here)
Why: Speed matters after fraud.
What: Write the main India reporting channels.
How:
Expected output: All three written with one example each.
Save a screenshot of the portal home page.
Why: Interviews ask basic law.
What: Match section to meaning.
Data file: law.csv
| Section | Meaning (fill) |
|---|---|
| 66C | Identity theft |
| 66D | Cheating by personation |
| 43 | Unauthorised access / damage |
About this file: Awareness table. Each row is one IT Act section. Columns: Section; Meaning to fill.
How:
Expected output: 66C identity theft; 66D cheating by personation; 43 damage/unauthorised access.
This is awareness, not legal advice.
Why: Good evidence helps the bank and police.
What: List what you would save in a drill.
How:
Expected output: A folder with ≥4 items + hashes.txt.
Do not use real victim data.
Open chapter lessons · Full guided lab: mock interview 10 security basics record (not repeated here)
Why: Out-of-scope tests can be illegal.
What: Open a public program page and list In/Out of scope (read only).
How:
Expected output: Clear In and Out lists.
See the linked scope lab. Do not scan yet.
Why: See what employers ask.
What: Pick one SOC/analyst JD and mark skills you have.
How:
Expected output: A 10-row skills table.
Be honest.
Why: Clear speaking wins interviews.
What: Answer: How do you secure a new Linux server?
How:
Expected output: Under 2 minutes, 5 points covered.
See the linked mock interview lab.
Open chapter lessons · Full guided lab: defensive command cheat sheet tested (not repeated here)
Why: nc is a Swiss army knife — practise safely.
What: Send a file over loopback.
How:
nc -l 127.0.0.1 4444 > out.txtecho hello | nc 127.0.0.1 4444Expected output: out.txt contains hello.
Bind only to 127.0.0.1.
Why: curl replaces many GUI clicks.
What: Probe your lab site.
How:
Expected output: Status and header lines printed.
Compare with browser DevTools.
Why: SSH drops kill long jobs without a multiplexer.
What: Run a command inside tmux.
How:
Expected output: Ping still running after attach.
Name sessions by task.
Open chapter lessons · Full guided lab: turn off smbv1 netbios snmp verify (not repeated here)
Why: Open shares leak files.
What: List shares on Metasploitable or your Windows lab VM.
How:
Expected output: Share list printed.
Only your lab IPs.
Why: Default public leaks host data.
What: Query your lab SNMP if enabled.
How:
Expected output: Either data returned (finding) or timeout (good).
Change community strings; prefer SNMPv3.
Why: SMBv1 enables wormable bugs.
What: Disable SMBv1 on your Windows lab PC.
How:
Expected output: SMBv1 feature Disabled.
See linked SMBv1 lab.
Open chapter lessons · Full guided lab: windows separate admin daily account audit 4625 (not repeated here)
Why: Daily browsing as Domain Admin is high risk.
What: On your Windows lab, use two accounts.
How:
Expected output: Two accounts exist; daily has no Domain Admins.
See linked Windows accounts lab.
Why: 4625 storms mean password spraying.
What: Generate and read a failed logon on your lab.
How:
Expected output: At least one 4625 event.
Forward these to a SIEM in real orgs.
Why: Defence first — no attacking production AD.
What: Mark each control Present/Missing for a fictional clinic AD.
Data file: ad-def.csv
| Control | In place? |
|---|---|
| MSA/gMSA for services | Yes |
| AES Kerberos encryption | Yes |
| No SPN on user accounts with weak passwords | No |
About this file: Fictional AD controls. Each row is one control. Columns: Control; In place?.
How:
Expected output: Items with Yes = Present; No = Missing.
This is a paper task only.
Open chapter lessons · Full guided lab: check suspicious file hash eicar virustotal (not repeated here)
Why: EICAR is a standard harmless test string.
What: Create and scan the EICAR file.
How:
Expected output: FOUND / Eicar-Test-Signature.
Do not upload real malware; EICAR is allowed.
Why: Hash lookup beats running unknown files.
What: Hash a clean file and search VirusTotal by hash only.
How:
Expected output: Known clean Linux binary results.
Never upload secret documents.
Why: Macros and double extensions trick users.
What: Mark each attachment Risky or OK.
Data file: attach.csv
| File name |
|---|
| invoice.pdf.exe |
| Q3-report.pdf |
| payroll.xlsm from unknown sender |
About this file: Made-up attachments. Each row is one file name to judge.
How:
Expected output: invoice.pdf.exe Risky; report.pdf OK; unexpected xlsm Risky.
When unsure, open in a sandbox VM.
Open chapter lessons · Full guided lab: nginx rate limiting 429 small load test (not repeated here)
Why: Rate limits protect login and APIs.
What: Limit requests on your lab nginx only.
How:
Expected output: Some 503/429 responses under load.
See linked rate-limit lab. Never load-test sites you don't own.
Why: Different attacks need different defences.
What: Match each row.
Data file: dos.csv
| Attack | Layer (fill) |
|---|---|
| SYN flood | Network |
| Slowloris | Application |
| DNS amplification | Network |
About this file: Made-up matching. Each row is one attack type. Columns: Attack; Layer to fill.
How:
Expected output: SYN flood Network; Slowloris Application; DNS amp Network.
Cloudflare/WAF help at the edge.
Why: Detect outages early.
What: Poll your lab site every minute.
How:
Expected output: 200 then 000 when down.
Alerting tools do this better in prod.
Open chapter lessons · Full guided lab: cookie flags secure httponly samesite devtools (not repeated here)
Why: Missing flags let XSS steal sessions.
What: Log into a lab app and inspect the session cookie.
How:
Expected output: Ideal: Secure + HttpOnly + SameSite=Lax/Strict.
See linked cookie flags lab.
Why: Framework defaults are not always safe.
What: Create a Node cookie with flags.
How:
Expected output: HttpOnly and SameSite=Lax present.
Use secure:true when on HTTPS.
Why: Stolen cookies still need CSRF tokens for state changes.
What: Add a synchronizer token to a lab form.
How:
Expected output: Forged POST without token fails.
SameSite helps but tokens are still best.
Open chapter lessons · Full guided lab: suricata local detection rule lab (not repeated here)
Why: IDS finds known bad traffic.
What: Scan a sample pcap with Suricata in your lab.
How:
Expected output: Alerts or at least a clean run with stats.
See linked Suricata lab.
Why: Custom rules catch your environment's threats.
What: Alert on HTTP URI containing .env.
How:
Expected output: Alert fires.
Test rules before production.
Why: Honeypots must look real but stay isolated.
What: Mark each setup Safe or Risky.
Data file: honey.csv
| Setup |
|---|
| Cowrie SSH on isolated host-only VM |
| Fake DB on same VLAN as real HIS |
| Public cowrie with outbound blocked + alerts |
About this file: Made-up honeypot setups. Each row is one setup to judge.
How:
Expected output: Isolated VM Safe; honeypot on prod VLAN Risky; internet cowrie with monitoring Safe if isolated.
Never put honeypots next to patient data.
Open chapter lessons · Full guided lab: secure home iot devices guest network (not repeated here)
Why: You can't protect devices you forgot.
What: List every smart device on your home net.
How:
Expected output: A table of ≥3 devices.
Cameras and bulbs count.
Why: A hacked camera should not reach your laptop.
What: Move devices to guest Wi-Fi or IoT VLAN.
How:
Expected output: Camera works in app; laptop cannot reach admin page (or limited).
See linked IoT lab.
Why: Factories still ship default passwords.
What: Mark each device habit Safe or Fix.
Data file: iot.csv
| Device | Password habit |
|---|---|
| Warehouse camera | admin/admin |
| Door sensor | random 16-char |
| PLC (air-gapped) | local only, no internet |
About this file: Made-up OT/IoT habits. Each row is one device. Columns: Device; Password habit.
How:
Expected output: Default admin/admin Fix; unique password Safe; no internet exposure Safe.
Change defaults before connecting online.
Open chapter lessons · Full guided lab: phone security check up android iphone (not repeated here)
Why: Phones hold email and bank apps.
What: Run through the linked check-up on your phone.
How:
Expected output: All four Yes.
Remove unused apps with payment access.
Why: Apps outside official stores bypass review.
What: Mark each install path Safe or Risky.
Data file: mobile.csv
| Install path |
|---|
| Google Play / App Store |
| APK from a Telegram link |
| USB debugging left on |
About this file: Made-up install paths. Each row is one path to judge.
How:
Expected output: Play Store/App Store Safe; unknown APK Risky; USB debug on daily phone Risky.
Bank apps especially.
Why: Open Bluetooth is a quiet risk.
What: On your phone, review paired devices.
How:
Expected output: Unused devices removed.
Clinic staff: watch for fake pairing near wards.
Open chapter lessons · Full guided lab: ceh revision tracker 20 practice questions (not repeated here)
Why: Spaced practice beats cramming.
What: Open the revision tracker lab and mark 5 weak topics.
How:
Expected output: A short plan with dates.
Use chapter quizzes too.
Why: Teaching proves you understand.
What: Explain ports vs protocols to a friend (or voice memo) in 3 minutes.
How:
Expected output: Recording under 3 minutes.
Easy English.
Why: Speed comes from repetition.
What: Re-do harden-ubuntu lab with a 45-minute timer.
How:
Expected output: Checklist with Done/Not done.
Redo Not-done items tomorrow.
Open chapter lessons · Full guided lab: mock interview 10 security basics record (not repeated here)
Why: Basics open interviews.
What: Write Confidentiality, Integrity, Availability examples for a hospital.
How:
Expected output: Three clear examples.
No buzzwords without meaning.
Why: Process shows seniority.
What: Write 6 steps from report to close.
How:
Expected output: Six steps on one page.
Mention 1930 if money moved.
Why: Common compare question.
What: Write 4 bullet points.
How:
Expected output: Four bullets.
Give one example each.
Open chapter lessons · Full guided lab: mock interview 10 security basics record (not repeated here)
Why: MNCs love STAR.
What: Write Situation, Task, Action, Result for a lab or real study incident.
How:
Expected output: STAR with numbers.
Use a lab if you lack work experience.
Why: Non-technical answers matter.
What: Write a 90-second script with no jargon, or define every term.
How:
Expected output: Manager-friendly script.
Avoid asymmetric unless explained.
Why: They may hand you a terminal.
What: On your VM, demonstrate and narrate.
How:
Expected output: Narrated demo under 2 minutes.
Practise out loud.
Open chapter lessons · Full guided lab: ceh revision tracker 20 practice questions (not repeated here)
Why: See what you already covered.
What: Make a table: CEH module → our chapter numbers.
How:
Expected output: Table of modules with chapter refs.
Weak modules → more labs.
Why: Exam pace matters.
What: Do 10 practice questions in 15 minutes.
How:
Expected output: Score out of 10 + topic list.
Redo wrong ones next day.
Why: CEH asks which tool fits which phase.
What: Match the data file.
Data file: tools.csv
| Tool | Phase (fill) |
|---|---|
| nmap | Reconnaissance |
| metasploit | Exploitation |
| wireshark | Analysis / sniffing |
| john the ripper | Password attacks |
About this file: Made-up matching. Each row is one tool. Columns: Tool; Phase to fill.
How:
Expected output: nmap Recon; metasploit Exploitation; wireshark Analysis; john Password.
Tools can span phases — pick primary.
Open chapter lessons · Full guided lab: defensive command cheat sheet tested (not repeated here)
Why: Your own sheet beats copying.
What: Write 20 commands you actually use, with one-line why.
How:
Expected output: 20 commands + why.
See linked defensive cheat sheet.
Why: Under stress you need a short list.
What: List commands for: who logged in, failed SSH, listening ports, recent files.
How:
Expected output: One A4 page.
No attack commands on this page.
Why: Many jobs are mixed OS.
What: Match Linux → Windows.
How:
Expected output: A 5-row table.
Try each on a Windows lab if you have one.
Open chapter lessons · Full guided lab: glossary flashcards english marathi (not repeated here)
Why: Bilingual terms help interviews in Maharashtra.
What: Make 10 cards: English / Marathi / one example.
How:
Expected output: 10 cards.
See linked flashcards lab.
Why: Family awareness reduces home risk.
What: Write a 1-minute Marathi script (or record audio).
How:
Expected output: 1-minute script/audio.
Keep words simple.
Why: Write terms you still mix up.
What: Add 5 new rows you struggled with this course.
How:
Expected output: 5 new rows.
Revisit weekly.