回归最本质的信息安全

;

如何利用Shodan API和Python自动扫描高危设备

2017年12月1日发布

89,231
3
6

导语:在本教程中,我们将使用Python来定位特定的软件漏洞,并从Shodan中提取易受攻击的目标IP地址。

Shodan称自己是“互联网连接设备的搜索引擎”。有这么多设备连接到互联网,具有不同的安全级别,这个搜索引擎的特殊功能意味着它可以提供一个设备列表来测试和攻击。在本教程中,我们将使用Python来定位特定的软件漏洞,并从Shodan中提取易受攻击的目标IP地址。

任何连接到互联网的设备都必须显示某种关于自己的信息。这可能相对有限,因为聪明的系统配置可以阻止大多数不需要的请求。在某些设备上,可以扫描端口来显示网络服务器上运行的服务或连接到无线网络的网络摄像头的名称。

步骤1使用Shodan

Shodan可以像大多数其他搜索引擎一样访问,通过在浏览器中导航到shodan.io

除了使用传统的搜索术语来搜索公开索引的网站内容之外,在搜索Shodan时,我们通常会寻找设备头部或者除了由传统搜索引擎索引的设备的HTTP网页内容之外的其他信息。

在Mr. Robot中,名字字符搜索下面的字符串。

org:"Evil Corp" product:"Apache Tomcat"

虽然我们可以搜索相同的搜索命令,但虚构的公司Evil Corp.很可能不会返回任何结果(或者是否?)。字符串的第二个组成部分,“产品”过滤器仍然是一个功能和有用的搜索。此搜索字符串确实需要使用过滤器,一个选项仅适用于注册用户。可以通过点击主页右上方的“登录/注册”按钮或直接访问account.shodan.io/register来注册Shodan账户。

Shodan账户注册后,将有多种附加搜索功能以过滤器的形式提供。其中一些过滤器显示在下面的列表中。

· 国家:过滤到特定的国家

· 城市:过滤到特定的城市

· 地理:按坐标过滤

· 主机名:查找匹配的主机名

· net:限制为IP /前缀

· 操作系统:基于操作系统的过滤器

· 端口:基于开放端口进行过滤

这些过滤器可以使用与先生机器人中使用的示例相同的格式应用,其中筛选器包含在搜索中,后跟冒号和搜索项。下面显示的格式可以用于Shodan中的任何过滤器。

filter:"Keyword"”

在这个例子中,“过滤器”是所使用的过滤器的名称,“关键字”是在过滤器类别内搜索的搜索术语。只要用空格隔开,就可以应用多个过滤器。

如show中所示,“Apache Tomcat”搜索确实会在Shodan上使用合法结果。我们可以通过搜索下面显示的字符串来测试。

product:"Apache Tomcat"

搜索后,我们可以看到超过140万个结果被返回。这个搜索提供了一些有关使用Apache Tomcat的位置和组织的有趣数据,但是对于黑客来说,这些结果可能具有不同的效用。

攻击者可能会使用具有已知漏洞的过时软件专门搜索服务器或连接到网络的设备,以便查找要利用的设备。这个过程可以通过在Web浏览器中从Shodan搜索复制结果手动完成,并选择地址进行手动攻击。然而,这个过程也可以通过使用脚本语言和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模块。这可以使用或使用简易安装。使用下面的命令也可以使用apt-get安装Pip 。

sudo apt-get install python-pip

安装pip之后,我们可以使用pip来安装Shodan Python模块。

sudo pip install shodan

如果您的设备上存在多个Python版本,并且可能存在多个pip版本,则可能需要指定您希望为Python 2.7安装模块,而不是使用指定的pip2.7,而是使用下面的命令。

sudo pip2.7 install shodan
如果这些技术都不成功,则可以通过运行下面的命令来安装库。
easy_install shodan

一旦安装了Python和Shodan库,我们就可以开始编写一个新的Python脚本。在Linux命令行中,我们可以创建一个新文件并使用nano开始编辑它。一定要选择“shodan”以外的文件名,这样在引用库 和脚本之间没有冲突。下面,我们将创建一个名为“search.py”的文件。

nano search.py

我们要添加到这个文件中的第一件事是一个将加载Shodan库的行。我们可以使用Python 的导入功能来做到这一点,如下所示。

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单元来实际请求搜索结果的命令。

try:
results = api.search('apache')

在这个例子中,搜索字符串只是简单的apache,但是,这可以用任何需要的搜索替换,包括带有过滤器的搜索,比如前面的教程。我们可以使用下面代码末尾附近显示的一组打印命令来返回此搜索的结果。

# Show the results
print 'Results found: %s' % results'total'
for result in results'matches':
print 'IP: %s' % result'ip_str'
print result'data'
print ''
except shodan.APIError, e:
print 'Error: %s' % e

该脚本现在应该与下面的图像中显示的代码类似。有关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'
Such that it looks like this line instead:
print '%s' % result'ip_str'
We can also delete the line which precedes it, and the two lines which follow it.
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运行。

cat log.txt | while read line
do
ping $line
done

该脚本现在应该看起来像下图所示。

我们现在可以用Ctrl + O保存这个脚本,然后用Ctrl + X再次退出nano 。为了能够运行该脚本,我们需要通过使用chmod赋予它这个特权来将它标记为我们的操作系统的可执行文件。

chmod + x ping.sh

现在,我们可以从命令行运行脚本。

./ping.sh

脚本应该迭代地址中的每个IP,并向每个IP发送一个ping。

如果这个工作,你现在已经成功检索Shodan结果,并单独处理它们!Ping不是一个攻击媒介,但是有一些小的变化,攻击者可以使用类似的脚本来达到恶意的目的。

步骤5武器化攻击

在shell脚本中启动“ping”的字符串将是一个简单的区域来操作用从Shodan检索到的IP完成的操作。原始的Python脚本也可以被更新以用于更复杂的攻击或测试。下面显示了shell脚本的“while”迭代的基本ping命令。

ping $line

该命令中的$ line变量表示IP列表文件log.txt的每一行。我们可以用任何其他包含IP地址作为参数的字符串替换这个ping命令。我们可以使用nmap通过使用下面的命令端口扫描目标IP,使用-sS参数 进行服务扫描。

nmap -sS $line

虽然每个网络连接的设备有多种方式,它可以通过扫描服务,如初段进行索引,人们可以通过一个网站就像检查自己的外部IP检查他们的本地网络和路由器的安全whatsmyip.org和搜索这在Shodan上查看知识产权信息。

其他应用

这种格式可以扩展到任何可以从命令行启动并包含IP的任何其他攻击。这种对多个目标进行扫描和攻击的方法,对于发现易受攻击的系统而言,是一种非常有效的方法,无需花时间手动单独查找和攻击。

 这种方法可以应用于各种不同的攻击,使用Shodan,Python,shell脚本或其他工具,只要它们能够在没有用户输入的情况下查找设备并攻击设备。

如若转载,请注明原文地址: http://www.4hou.com/web/8803.html

点赞 6
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

愣娃

这个人很懒,什么也没留下

发私信

发表评论

    Torjan 2017-12-19 15:48

    简单明了

    Jius7u 2017-12-07 07:11

    我表示很忧伤啊…因为shodan有搜索限制,又买不起会员,只好去censys试试。忙活了几个小时各种改还是不行,郁闷了。好不容易找到个类似完整的代码。结果改了下就不行了,不出搜索结果,不知道原因在哪,大佬能帮忙看下嘛。
    ###code
    。。。我擦 还上传不了代码。。坑爹

      llopppp 2017-12-07 17:10

      回复 @Jius7u 额…建议私信作者寻求相关细节….