คลัง
recon

Shodan

Shodan เป็น search engine สำหรับอุปกรณ์/service ที่ต่ออินเทอร์เน็ต — สแกนทั้งโลกเก็บ banner ของ port ที่เปิด ทำให้ค้นหา exposed service, IoT, database, webcam, ระบบที่ตั้งค่าผิด บทนี้ลงลึก search filter ทุกตัว, การค้นตาม target, CLI, และการใช้กับ recon (เนื้อหาเพื่อ recon ที่ได้รับอนุญาต)

BeginnerIntermediate#shodan#recon#osint#exposed-services#iot#filters#ctf

1. Shodan คืออะไร

Shodan สแกน IPv4 ทั้งโลกอย่างต่อเนื่อง เก็บ banner (ข้อมูลที่ service ตอบกลับ) ของ port ที่เปิด — ต่างจาก Google ที่ index หน้าเว็บ Shodan index service/device ทำให้ค้นได้ว่ามีอะไรเปิดต่อเน็ตบ้าง: database, RDP, webcam, ICS/SCADA, router, server ที่ตั้งค่าผิด เป็น passive recon (query ฐานข้อมูล Shodan ไม่แตะ target โดยตรง)

เนื้อหานี้เพื่อการ reconnaissance ในงานที่ได้รับอนุญาต (CTF, OSINT, pentest scope) เท่านั้น — Shodan แสดงข้อมูล public; การเข้าถึง/โจมตี service ต้องอยู่ใน scope

2. Search filters

filterความหมายตัวอย่าง
hostname:ชื่อ host/domainhostname:example.com
net:IP range (CIDR)net:192.168.0.0/24
org:องค์กรorg:"Example Inc"
port:port เฉพาะport:3389
product:software/serviceproduct:nginx
country: / city:ประเทศ/เมืองcountry:TH
os:ระบบปฏิบัติการos:"Windows"
http.title:title หน้าเว็บhttp.title:"admin"
ssl:ใน SSL certssl:"example.com"
vuln:CVE (ต้อง membership)vuln:CVE-2021-44228
dork สำหรับ target (เว็บ shodan.io หรือ CLI)
# service ของ target (ผสม filter)
hostname:example.com
org:"Example Inc"
ssl:"example.com"                    # หา host จาก SSL cert (เผย IP จริงหลัง CDN!)
net:203.0.113.0/24                   # IP range (จาก ASN — ดู ASN Enumeration)

# หา service เฉพาะของ target
org:"Example Inc" port:3389          # RDP exposed
org:"Example Inc" product:MySQL      # database
hostname:example.com http.title:"login"

# exposed/น่าสนใจทั่วไป
"default password"
product:"MongoDB" port:27017         # MongoDB ไม่มี auth
title:"index of"
http.component:"jenkins"
ssl:"domain" เผย IP จริงหลัง Cloudflare (cert ยังมีชื่อ domain); ผสม org/net + port/product เจาะ service ของ target

4. Shodan CLI + API

shodan command-lineLinux
pip install shodan
shodan init YOUR_API_KEY

# ดูข้อมูล IP
shodan host 8.8.8.8

# ค้นหา (นับ + ดึงผล)
shodan count "org:Example Inc port:3389"
shodan search --fields ip_str,port,hostnames "org:Example Inc"

# ดึงทุก IP ที่ตรง
shodan search --fields ip_str "net:203.0.113.0/24" | sort -u

# scan domain (รวมข้อมูล)
shodan domain example.com
shodan host IP = ข้อมูลทั้งหมดของ IP; shodan search --fields ดึงเฉพาะ field; shodan domain สรุป domain

5. การใช้ + เชื่อมกับ recon อื่น

  • หา IP จริงหลัง CDN: ssl:"example.com" หรือ favicon hash — เผย origin IP ที่ Cloudflare ซ่อน
  • เผย service ที่ไม่รู้: org/net filter หา port/service ที่ไม่ได้อยู่ใน domain ที่รู้
  • เชื่อม ASN: ได้ IP range จาก ASN → net: ค้นทุก service ใน range
  • หา vulnerable version: product + version → เทียบ CVE
  • favicon hash: http.favicon.hash: หา host ที่ใช้ favicon เดียวกัน (เผย related infra)
  • เปรียบเทียบ Censys (ดูหัวข้อ Censys) — ผล/ฐานข้อมูลต่างกัน ใช้คู่กัน

6. Quick Reference

  • search engine ของ exposed service/device (passive recon)
  • filter: hostname:/net:/org:/port:/product:/ssl:/http.title:
  • target: org:"X" port:3389; ssl:"domain" (IP จริงหลัง CDN)
  • CLI: shodan host IP; shodan search --fields; shodan domain
  • เชื่อม ASN: net:CIDR; favicon hash หา related infra
  • ใช้คู่ Censys (ฐานข้อมูลต่างกัน)

🧭 จับมือทำทีละขั้น (มีแค่ Kali) + ถ้าติดไปไหนต่อ

สมมติอยากหา service/device ที่ target เปิดต่ออินเทอร์เน็ตโดยไม่ต้องสแกนเอง มีแค่ Kali + เบราว์เซอร์ ทำตามนี้ทีละขั้น

  1. 1สมัคร account ฟรีที่ shodan.io (จำเป็นสำหรับ filter ขั้นสูง)
  2. 2ลอง search ตรงๆ ด้วยชื่อ domain: hostname:target.com
  3. 3ลอง org filter ถ้ารู้ชื่อองค์กร: org:"Target Inc"
  4. 4ลองหา IP จริงหลัง CDN ผ่าน SSL cert: ssl:"target.com" (เผย origin IP ที่ Cloudflare ซ่อนไว้บ่อยๆ)
  5. 5เจอ IP ที่น่าสงสัยแล้ว เช็คให้ชัวร์ว่าไม่ใช่ CDN: เปิด shodan host (ต้องมี CLI) หรือดูในหน้าเว็บ
  6. 6ติดตั้ง CLI ถ้าต้องการ query เยอะๆ: pip install shodan && shodan init YOUR_API_KEY
  7. 7ค้น service เฉพาะของ target: shodan search --fields ip_str,port,hostnames "org:Target Inc"
  8. 8ถ้ารู้ IP range จาก ASN แล้ว ลองกวาดทั้ง range: net:203.0.113.0/24
  9. 9เจอ service ที่ดูอ่อนแอ (เช่น MongoDB ไม่มี auth, RDP เปิด) → บันทึกไว้ ยืนยัน scope ก่อนแตะต่อ
  10. 10ถ้า Shodan ไม่เจออะไรเลย สลับไปลอง Censys (ฐานข้อมูลคนละชุด อาจเห็นสิ่งที่ Shodan ไม่เห็น)
Shodan เจอ service ไหม? ทำอะไรต่อ
hostname:/org:/ssl: filter ใน shodan.io
เจอ host/service ของ target ไหม?
✅ เจอ IP/service ที่ใช่→ ยืนยันแล้วสแกน/ทดสอบต่อ
❌ ไม่เจอ / query ว่างเปล่า→ สลับไป Censys หรือขยาย ASN
ยืนยันว่า IP นี้ไม่ใช่ CDN/shared host แล้วอยู่ใน scope
✅ ใน scope + เป็นของ target จริง→ สแกน service เพิ่มเติม
❌ เป็น CDN/นอก scope→ ห้ามแตะ กลับไปหา asset อื่น
ขั้นตอน/งานเครื่องมือใน Kaliติดตั้งเพิ่ม (ถ้าไม่มี)เครื่องมือออนไลน์
ค้น service/device--shodan.io
ค้นผ่าน CLIpython3/pippip install shodan-
หา IP จริงหลัง CDN--shodan.io (ssl: filter), censys.io
ยืนยัน service ที่เจอnmap--
เทียบฐานข้อมูลอีกชุด--censys.io
เช็ค CVE ของ version--shodan.io (vuln: ต้อง membership)
🚑 ถ้าตันสนิท ลองท่าถัดไป: Censys (ฐานข้อมูลคนละชุด — certificate search มักเจอ subdomain ที่ Shodan ไม่มี), ASN Enumeration (หา IP range ขององค์กรก่อน แล้วใช้ net: filter กวาดให้ครบ), Nmap Playbook (พอยืนยัน IP/port แล้ว ไปสแกนละเอียดต่อ), Subdomain Enumeration (ถ้าไม่มี IP ตรงๆ ให้ไล่หา subdomain แล้วค่อยย้อนกลับมาดู service)

โน้ตของฉัน

ยังไม่มีโน้ตสำหรับหัวข้อนี้