什么是横幅抓取?

原文:https://www.studytonight.com/network-programming-in-python/banner-grabbing

一条横幅就像是从主机收到的一条短信。它包含主机上运行的服务信息以及端口信息。

根据维基百科, *横幅抓取是一种用于收集网络上的计算机系统及其开放端口上运行的服务的信息的技术。*这种技术通常被系统管理员用来扫描网络以检查所有服务正在运行等。

由于我们已经探索了如何扫描系统中的开放端口(最后 2 个教程),现在是时候仔细看看这些端口上运行的是什么服务了。一些众所周知的端口有:

  • 20/21 : FTP
  • 22 : SSH(安全壳)
  • 23 : Telnet
  • 25 : SMTP
  • 80 : HTTP
  • 156 : SQL Server
  • 443:HTTPS

你知道吗,如果一个系统不必要的端口是开放的,这反映了一个系统漏洞,任何黑客都有可能破坏这个漏洞。但是,仅仅知道可用的端口和运行的服务是不够的。你必须知道服务运行的细节,比如主机运行的服务器版本,MySQL 版本等等。


横幅抓取是如何工作的?

假设你想和一个说英语的人交流。所以为了有一个流畅的对话,你必须用英语说,否则对方应该说你说的语言。但是,既然你是想发起对话的人,那么你必须懂英语。

说到这里,你是客户,为了和服务器沟通,你必须说它的语言,而不是简单的英语。在我们浏览互联网的日常生活中,我们的网络浏览器为我们完成了这项工作。我们简单地用我们的语言进行查询,我们的浏览器将这个查询翻译成服务器可以理解的形式。这在技术上被称为 HTTP 请求响应

因此,为了执行横幅抓取,我们将以服务器理解的形式与它交谈。因此,下面我们编写了一个使用 socket 发起与服务器通信的程序。


使用套接字编程抓取横幅

banner.py

#!usr/bin/env python

# banner.py

import socket

sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #TCP

t_host = str(raw_input("Enter the host name: "))
t_port = int(raw_input("Enter Port: "))

sock.connect((t_host,t_port))
sock.send('GET HTTP/1.1 \r\n')

ret = sock.recv(1024)
print '[+]' + str(ret)

: 有很多开源工具可以更高效地完成同样的工作。但这不是本教程系列的重点。这类工具就像黑盒,即你给出输入,期待输出。内部机制你不知道。这个系列的重点是让你意识到场景背后的所有东西。

之后你将输入一个主机名(www.example.com)和端口作为80。您将收到服务器的回复,该回复将运行服务器版本以及更多类似如下的信息:

HTTP/1.1 200 OK
Date: Sat, 1 May 2010 21:10:40 EST
Server: Apache/2.0.46 (Unix)  (Red Hat/Linux)
Last-Modified: Wed, 16 Mar 2010 11:20:14 PST
ETag: "1986-69b-123abc46"
Accept-Ranges: bytes
Content-Length: 1110
Connection: close
Content-Type: text/html

现在,服务器的版本是已知的,你可以上网查找服务器版本是否容易受到攻击。


使用 Nmap 抓取横幅

我们已经学习了如何使用 Nmap 进行端口扫描,这里有一个简单的命令,可以使用 Nmap 进行横幅抓取。

下面的命令将扫描主机上所有打开的端口。

nmap -sV –script=banner 127.0.0.1

在上面的命令中,用要扫描的主机的 IP 地址替换 127.0.0.1。

如果您只想获取与特定端口相关的横幅(信息),请运行以下命令:

nmap -Pn -p 80 -sV –script=banner 127.0.0.1

我们知道 http 服务运行在端口80上,因此上面的命令将抓取与 http 服务和版本相关的信息。