🌀 鱼油のB10g

✦ 不定期更新技术随想

✦ 分享奇妙发现

📌 近期动态:

探索AI和工具使用...

第5章 第38课

Shodan实战指南:揭开校园网络设备的神秘面纱


Shodan简介:IoT世界的"谷歌"

作为经常帮学校检查网络安全的学长,第一次用Shodan时的震撼至今难忘:

输入学校IP段 → 发现未授权的公开摄像头 → 紧急联系信息中心处理
Shodan本质:不再是搜索网页内容,而是直接扫描互联网设备

# 与传统搜索引擎对比
def search_engine_comparison():
google = {
"目标": "网页内容",
"结果": "课程网站/新闻页面",
"方法": "爬虫索引"
}
shodan = {
"目标": "联网设备",
"结果": "摄像头/路由器/防火墙",
"方法": "端口扫描+Banner捕获"
}
return google, shodan

# 校园案例:
shodan.find("webcam") → 实验室监控摄像头(未设密码!)

Shodan核心功能:校园网络安全透视镜

设备指纹识别(Banner抓取)
# 模拟Shodan工作原理
import socket

def capture_banner(ip, port):
s = socket.socket()
s.connect((ip, port))
s.send(b"GET / HTTP/1.1\r\n\r\n")
banner = s.recv(1024)
return banner.decode("utf-8", errors="ignore")

# 测试学校DNS服务器
banner = capture_banner("202.112.xx.xx", 53)
print(banner[:100])# 输出:"BIND 9.10.3-P4-Debian <...>"
五大校园高危发现场景
  1. 暴露的物联网设备
// Shodan返回示例
{
"ip": "202.119.xx.xx",
"port": 80,
"org": "东南大学",
"data": "HTTP/1.1 200 OK\r\nServer: Hikvision-Webs"
}
  1. 未更新的服务器
Apache/2.4.29 (Ubuntu) Server at lib.xx.edu.cn # CVE-2021-41773漏洞!
  1. 开放的管理后台
# 发现Juniper防火墙登录页
shodan.search('title:"J-Web" org:"Nanjing University"')
  1. 学生自建服务器
# 定位校园网内树莓派
shodan.search('product:"Raspbian" org:"XX College"')
  1. 敏感设备暴露
# 工控实验室PLC设备
"Schneider Electric Modicon" port:502

Shodan命令行实战:三步成为校园安全侦探

步骤1:安装与初始化
# 安装(Python环境)
pip install shodan

# 初始化(需API key,学生邮箱可申请教育版)
shodan init YOUR_API_KEY
步骤2:基础搜索技巧
# 搜索学校所有设备
shodan search org:"Nanjing University"

# 找特定类型设备(网络摄像头)
shodan search 'webcam city:"Nanjing"'

# 高级过滤(找Apache服务器且位于南京)
shodan search 'apache city:"Nanjing"'
步骤3:结果导出与分析
# 导出CSV便于分析
shodan search --fields ip_str,port,org,hostnames org:"Southeast University" > seu_devices.csv

# 统计开放端口
cat seu_devices.csv | cut -d, -f2 | sort | uniq -c

网络设备搜索实战:从摄像头到防火墙

案例1:校园监控系统检测
# 搜索教育网摄像头
shodan search 'webcam org:"CERNET"'

# 结果示例
116.211.xx.xx - Hikvision DS-2CD2T2x# 海康威视摄像头
218.195.xx.xx - Dahua IPC-HDW5230R-Z# 大华摄像头

# 安全检测:是否启用弱密码
hydra -l admin -P passwords.txt {ip} http-form-post "/login.php:user=^USER^&pass=^PASS^:F=incorrect"
案例2:路由器漏洞普查
# 检测学校TP-Link路由器(CVE-2023-1389)
from shodan import Shodan

api = Shodan('YOUR_KEY')
results = api.search('TP-Link Archer org:"Fudan University"')

for result in results['matches']:
if 'CVE-2023-1389' in result.get('vulns', []):
print(f"[高危] {result['ip_str']} 存在漏洞!")
案例3:网络安全设备审计
# 查找防火墙配置错误
shodan search '("ASA" OR "Palo Alto" OR "Fortinet") port:22 org:"Shanghai Jiao Tong University"'

# 发现结果:
202.120.xx.xx - Cisco ASA 5515 SSH enabled # SSH应限制访问IP!

防御视角:校园网络管理员指南

Shodan暴露风险自查清单
def campus_security_check(ip_range):
risks = []
# 1. 检测开放数据库
if shodan.count(f'mysql port:"3306" net:"{ip_range}"') > 0:
risks.append("MySQL数据库公网暴露")

# 2. 检测远程管理接口
if shodan.count('"Remote Management" net:"{ip_range}"') > 0:
risks.append("远程管理界面未授权访问")

# 3. 检测过期服务
vuln_services = ['Apache/2.4.29', 'OpenSSL/1.0.1']
for s in vuln_services:
if shodan.count(f'"{s}" net:"{ip_range}"'):
risks.append(f"过期服务: {s}")

return risks

# 执行检查
print(campus_security_check("202.112.0.0/16"))
防护措施四步走
  1. 端口最小化
# 防火墙配置示例(仅开放必要端口)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT# Web
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS
iptables -A INPUT -j DROP# 其他全部禁止
  1. 服务隐身
# 修改Banner信息(nginx.conf)
server_tokens off;
more_clear_headers 'Server';
  1. 访问控制
# SSH仅允许校内IP(Django示例)
ALLOWED_SSH_IPS = ['202.112.0.0/16', '10.0.0.0/8']
  1. 持续监控
# 定期扫描自身网络
shodan scan list --org "My University"

给学弟学妹的实践建议

学习路径规划

graph LR A[基础] --> B(注册Shodan教育账号) B --> C[中级] --> D("掌握搜索语法:product/port/org") C --> E("学习命令行工具") D --> F[高级] --> G("API开发监控系统") F --> H("漏洞关联分析")

法律与伦理红线

# 合法检测框架
if target in ["自己学校", "获得书面授权"]:
run_scan()# 执行扫描
else:
print("切勿越界!参考《网络安全法》第27条")
exit()

职场应用场景

企业安全工程师日常:
- 9:00 检查Shodan暴露清单
- 10:00 验证新曝光的CVE设备
- 14:00 编写自动化监控脚本
- 16:00 输出加固建议报告

附赠校园安全工具包(公众号回复 Shodan防御手册 获取):

  • Shodan教育版申请指南
  • 校园网IP段列表(CERNET)
  • Banner伪装脚本

记住:技术是把双刃剑,用Shodan保护校园网而非攻击它 —— 这才是真正的黑客精神 (•̀ω•́)✧

posted on 2025-08-04 13:08  鱼油YOU  阅读(35)  评论(0)    收藏  举报