欢迎回来!
如果您还没有读过前面的部分,在这里看到:
对 Shodan 的介绍已经很多,比如这里《搜远程桌面、摄像头、打印机、家用设备 … 等一切的超级Shodan搜索:恐怖指南》,以及下面这本书。
这本书在这里下载:https://www.patreon.com/posts/xiao-e-mo-wan-38190098
由于连接到互联网的众多设备具有不同的安全级别,因此该搜索引擎的特殊功能意味着它可以提供渗透测试和攻击的目标设备列表。
这份教程将使用 Python 定位特定的软件漏洞,并从 Shodan 中提取易受攻击的目标IP地址。
任何连接到互联网的设备都必须透露一些关于自身的信息。这可能是相对有限的,聪明的系统配置可以阻止大多数不受欢迎的请求。在一些设备上也许可以通过扫描端口以揭示诸如在网络服务器上运行的服务或连接到无线网络的网络摄像头的名称。
在 Mr. Robot 第3季第1集中,主人公为了收集邪恶公司的信息,使用 Shodan 搜索引擎。Tyrell 和 Angela 在他的身边,目不转睛地看着 Elliot 的影子人格 Mr.Robot 进行 “Apache Tomcat” 的搜索。
这种搜索可以揭示潜在目标的基本信息。利用同样的技术,我们来看看使用 Shodan 的搜索功能到底能找到什么,以及如何利用它来执行黑客攻击。
步骤1:使用Shodan
可以像大多数其他搜索引擎一样,通过在Web浏览器中导航到 shodan.io 来访问 Shodan。
但是与普通的搜索引擎不同,在使用 Shodan 时通常会寻找设备的header信息,或者除了设备的 HTTPWeb 内容之外的其他信息,通过传统搜索引擎找不到的那些东西。
在 Mr. Robot 中,主人公使用的搜索是这样的:
org:"Evil Corp" product:"Apache Tomcat"
由于这个邪恶公司 Evil Corp 是虚拟的,于是如果您使用完全相同的搜索也许不会返回任何内容(有人居然说返回了内容!)
搜索字符串的第二个部分,即 “product” 过滤器仍然是功能强大且有用的搜索。该选项仅适用于注册用户。可以通过单击主页右上方的 “登录/注册” 按钮或直接访问 account.shodan.io/register 来注册 Shodan 帐户。
注册 Shodan 帐户后它将提供许多其他搜索功能。比如下面这些过滤器:
country:搜索指定的国家
city:搜索指定的城市
geo:搜索指定的地理位置,参数为经纬度
net:搜索指定的IP地址或子网
os:基于操作系统的过滤器
port:搜索指定的端口或服务
可以使用与 Mr.Robot 示例中相同的格式来应用这些过滤器,就包含在搜索中,后跟冒号和搜索项。下面是一个格式,可用于 Shodan 中可用的任何过滤器。
filter:"Keyword"
在此示例中,“filter” 就是所使用过滤器的名称,“Keyword” 就是在此过滤器类别内搜寻的搜索词。可以应用多个过滤器,只需要用空格隔开即可。
如图所示,“ Apache Tomcat” 搜索在 Shodan 上使用时确实会返回结果。您可以通过搜索下面这个例子进行测试。
product:"Apache Tomcat"
您可以看到返回了超过140万个结果。该搜索提供了一些有关使用 Apache Tomcat 的位置和组织的有趣数据,但是对于黑客来说,这些结果可能具有不同的效用。
攻击者会专门搜索服务器或使用具有已知漏洞的过期软件的联网设备,以便找到可利用的攻击点。这个过程可以像 Mr.Robot 那样手动完成,也可以通过使用脚本语言和 Shodan 的API来实现自动化。
步骤2:检索 Shodan API 密钥
为了使用 Shodan 的API在绕过 Web 界面的同时直接请求和接收数据,您需要使用API密钥。此API密钥可以通过导航到 Shodan 网站 “我的账户” 部分进行检索,链接在主页的右上角,或者打开 account.shodan.io 即可。
这个密钥将被插入到用于进行API调用的 Python 代码中,所以将其复制到剪贴板、或将其保存到文件,可能会很有用。
步骤3:使用 Python 调用 Shodan API
为了使用 Python 来请求 Shodan API,需要安装一个功能性 Python 环境以及 Shodan Python 模块。
本示例使用了 Python 2.7。Python 3 也可以使用该模块,但是需要对本教程显示的脚本进行一些语法更改。在基于 Debian 的 Linux 操作系统上,可以通过打开终端模拟器并运行下面的命令来安装 Python 2.7。
~$ sudo apt-get update && sudo apt-get install python2.7
安装 Python 后也可以安装 Shodan Python 模块。可以使用 pip 或使用 “简易安装”。下面的命令旨在使用 apt-get 安装 Pip 。
~$ sudo apt-get install python-pip
安装 pip 之后,可以使用 pip 来安装 Shodan Python 模块。
~$ sudo pip install shodan
如果您的设备上存在多个版本的 Python,并且可能存在多个 pip 版本,则可能需要使用以下命令来指定要安装的 Python 2.7 模块。
~$ sudo pip2.7 install shodan
如果上述这些都不成功,还可以通过运行下面的命令来安装该库。
~$ easy_install shodan
安装了 Python 和 Shodan库之后就可以开始编写一个新的 Python 脚本。在 Linux 命令行中,创建一个新文件并使用 nano 开始编辑它。
一定要选择 “shodan” 以外的文件名,这样在引用库和脚本之间不会造成冲突。下面创建一个名为 “search.py” 的文件。
~$ nano search.py
要添加到这个文件中的第一件事是一个将加载 Shodan 库的行。可以使用 Python 的 import 来实现,如下所示。
import shodan
接下来开始定义您的 Shodan API 密钥,以便脚本可以使用它来进行API查询。添加以下行来执行此操作。
SHODAN_API_KEY = "insert your API key here" api = shodan.Shodan(SHODAN_API_KEY)
用您从 Shodan 网站检索到的API密钥替换 “在此处插入您的API密钥” 字段,留下引号将字段包含在内。
接下来可以使用 try 声明来定义脚本应该尝试的内容。可以添加一个使用 Shodan API 的 api.search 单元来实际请求搜索结果的命令。
本示例中搜索字符串只是简单的 apache,您可以用任何需要的搜索替换它,包括带有过滤器的搜索,比如上述那样。可以使用下面代码末尾附近显示的一组打印命令来返回此搜索的结果。
该脚本现在应该与下面图中所显示的代码类似。有关 Shodan API 和此代码的更多信息,请参阅其文档页面。
该脚本现在可以保存和测试。在 nano 中,可以用 Ctrl + O 保存脚本,用 Ctrl + X 退出 nano 。在同一个目录下,可以使用下面的命令来运行脚本。
~$ python2 script.py
运行该脚本应返回一些IP地址和一些与之相关的信息,包括 Shodan 索引的 HTTP 状态、位置和其他设备信息。该信息的格式与在Web界面中搜索时显示的数据非常相似。
虽然这些附加信息可能允许其他脚本和工具处理其他标准,但如果希望自动收集和测试针对IP地址的攻击过程,那么此格式在很大程度上是不必要的。
为了只返回IP地址,您可以改变 Python 脚本的格式。首先可以从下面的行中删除 IP: 前缀。
print 'IP: %s' % result'ip_str'
看起来就像这行:
print '%s' % result'ip_str'
还可以删除其前面的行和其后面的两行。
print 'Results found: %s' % results'total'
print result'data'
print ''
该脚本现在应如下图所示。
运行这个脚本的时候它会返回一个IP地址列表,而没有其他不必要的内容。
这个列表对于自动攻击来说是非常有用的,但是我们需要一个有效的方法来保存它。可以使用 shell 操作将输出直接发送到日志文件。在运行脚本时,请包含 >> 运算符,后跟您希望将输出发送到的文件的名称。
~$ python2 search.py >> log.txt
现在就有一个包含IP列表的文本文件,可以用它来测试各种攻击,这取决于您用来识别特定类型的易受攻击的系统的搜索术语。
步骤4:使用 Shodan 结果自动执行任务
对于可以使用IP地址作为参数的命令行实用程序的示例,这里将使用 ping。
积极尝试攻击或利用 Shodan 发现的设备将是非法的和不负责任的,所以如果您实际上利用任何东西,请确保只运行您有权在目标上使用的工具。
首先,我们将使用 nano 创建一个新的 shell 脚本,就像之前所做的那样。
~$ nano ping.sh
可以用 “crunchbang”(#! 符号)和 shell 声明开始脚本。这表明它是一个 shell 脚本,由 bash shell 运行。
#!/bin/bash
接下来可以添加一条语句,以便可以对IP列表文件的每一行分别进行操作。
该脚本现在应该看起来像下面这样。
现在可以用 Ctrl + O 保存这个脚本,然后用 Ctrl + X 再次退出 nano 。为了能够运行该脚本,需要通过使用 chmod 赋予它这个特权,将它标记为我们的操作系统的可执行文件。
~$ chmod +x ping.sh
现在可以从命令行运行该脚本了。
~$ ./ping.sh
脚本应该迭代地址中的每个IP,并向每个IP发送一个 ping。
如果有效,那意味着您现在已经成功检索 Shodan 结果,并单独处理它们了。Ping 不是一个攻击媒介,但只需进行一些细微的更改,攻击者就可以使用类似的脚本来达到恶意目的。
步骤5:武器化攻击
原始的 Python 脚本经过一些小的调整就可用于更复杂的攻击或渗透测试。下面显示了 shell 脚本的 “while” 迭代的基本 ping 命令。
ping $line
该命令中的 $line 变量表示IP列表文件 log.txt 的每一行。可以用任何其他包含IP地址作为参数的字符串替换这个 ping 命令。可以使用 nmap 通过下面的命令端口扫描目标IP,使用 -sS 参数进行服务扫描。
nmap -sS $line
虽然每个连接互联网的设备都有多种方式可以被 Shodan 等扫描服务索引,但人们可以通过在 watsmyip.org 这样的网站上检查自己的外部IP、并在 Shodan 上搜索这个IP,来检查本地网络和路由器的安全性,看看有什么样的信息被暴露了。
其他应用
这种格式可以扩展到几乎任何其他可以从命令行发起的攻击并包括一个IP。这种对多个目标的扫描和攻击是极其有效的方法,可以发现有漏洞的系统,而不必花时间单独手动查找和攻击。
这种方法可以应用于各种不同的攻击,使用Shodan、Python、shell 脚本或其他工具,只要它们有能力找到设备并在没有用户输入的情况下攻击它们。⚪️
How to Use the Shodan API with Python to Automate Scans for Vulnerable Devices