2020,梦想成真的一年,收获的季节如此靠近,你还好吗。
12/1
2020

【原创】浅析渗透测试中对Banner探测的几种途径

简介

  在我们实际的授权渗透测试过程中,经常性的第一步就是对目标网站或者主机进行信息收集,其中包括了WAF版本、CMS类型、WEB框架、WEB容器、指纹、第三方库、开发语言、IP地址段、子域名、SSL证书、DNS信息、缓存服务器信息、操作系统、开放的端口等等信息。

  Banner是指从目标主机或者目标网站接收到的回溯文本,通常包含有关主机或者网站的服务、版本号、开放端口、操作系统等等内容,我们需要获得这些信息从而进一步利用。

  当你试图鉴别漏洞或者服务的类型和版本的时候,Banner信息是非常有用的。但是,并不是所有的服务都会发送banner。此文仅仅抛转引玉,介绍一些常见的途径和方法,希望可以对初学安全的人员有所帮助。


 Nmap

  Nmap通过连接到开放的TCP端口,可以在几秒钟内打印出目标主机侦听服务的所有信息。其中Banner信息将被缩短到一行以内来适应输出,不过我们可以增加详细程度通过命令,每增加一次,都会输出其他的行信息。

  输入以下命令,获取目标主机每一个开放端口的banner:

# nmap -sV --script=banner remote-pc-ip

      从图中我们可以看到利用Nmap的script脚本来获取目标主机开放端口的服务和版本banner 

微信图片_20200105041720.png

2.png

      如果我们要获取特定端口或者服务的banner信息,可以输入以下命令,来具体化: 

# nmap -sV --script=banner remote-pc-ip -Pn -p 80

-Pn: Treat all hosts as online -- skip host discovery

(Pn参数是用来进行深层次扫描,不进行主机发现)

3.png

  我们可以看到,探测的目标网站使用的http服务是apache httpd,BWS/1.1
  BWS 就是 Baidu Web Server ,人自己开发的服务器,之前是1.0,现在1.1版本了

4.png


Curl

  Curl是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,是综合性传输工具。

  先简单介绍一下curl命令的一些基本的参数:

-I : 获取请求页面或接口的请求头信息
-d : 使用-d发送带参数的请求(默认是post方式提交)
-H : 自定义Header头信息
-L : 跟踪链接url重定向,有些页面或接口被重定向,直接使用curl url会返回
-O : 下载指定资源文件到当前目录中
-X : 指定 GET/POST/PUT/DELETE 等操作方式
-x : 指定 proxy 代理方式访问
-s : 不输出统计信息

  一般的我们用 -I 参数来获得响应文本的头部信息,这样看起来比较直观,用 -s 来屏蔽统计信息,只获得我们想要的:

# curl -I -s remote-pc-ip | grep Server

  如图,可以非常直观的看到目标主机的Server信息和版本:

5.png


Telnet

  Telnet通常用在远程登录应用中,方便对本地或远端运行的网络设备进行管理、配置、监听和维护,提高了用户的灵活操作性。Telnet协议是TCP/IP协议族中应用层协议之一。Telnet的工作方式为“服务器/客户端”方式,它提供了从一台设备(Telnet客户端)远程登录到另一台设备(Telnet服务器)的方法。

  无论是Window还是Linux,都具备Telnet命令,跨平台跨设备等使用起来都非常方便。

# telnet remote-pc-ip port

  如图我们可以看到,获取目标主机22端口的banner信息:

6.png


Netcat

  netcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据。通过与其他工具结合和重定向,可以在脚本中以多种方式使用它。netcat所做的就是在两台电脑之间建立链接并返回两个数据流,在这之后所能做的事就看你的想像力了。你能建立一个服务器,传输文件,与朋友聊天,传输流媒体或者用它作为其它协议的独立客户端。

  输入以下命令:

# nc -z -v -n remote-pc-ip [ports:porte]

-g<网关> 设置路由器跃程通信网关,最多可设置8个。
-G<指向器数目> 设置来源路由指向器,其数值为4的倍数。
-h 在线帮助。
-i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。
-l 使用监听模式,管控传入的资料。
-n 直接使用IP地址,而不通过域名服务器。
-o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。
-p<通信端口> 设置本地主机使用的通信端口。
-r 乱数指定本地与远端主机的通信端口。
-s<来源位址> 设置本地主机送出数据包的IP地址。
-u 使用UDP传输协议。
-v 显示指令执行过程。
-w<超时秒数> 设置等待连线的时间。
-z 使用0输入/输出模式,只在扫描通信端口时使用。

9.png

  如图我们可以针对扫描出的端口进一步探测banner信息:

# nc -v remote-pc-ip port
# netcat remote-pc-ip port

8.png

  直观清晰的获得了我们想要得到的目标主机运行的banner服务


Dmitry

  Dmitry(Deepmagic Information Gathering Tool)是用C编码的UNIX /(GNU)Linux命令行应用程序,是一个一体化的信息收集工具,它可以用来收集以下信息:

  • 根据IP(或域名)来查询目标主机的Whois信息
  • 在Netcraft.com的网站上挖掘主机信息
  • 查找目标域中用的子域
  • 查找目标域的电子邮件地址
  • 探测目标主机上打开的端口、被屏蔽的端口和关闭的端口
root@kali:~# dmitry -h
Deepmagic Information Gathering Tool
"There be some deep magic going on"

dmitry: invalid option -- 'h'
Usage: dmitry [-winsepfb] [-t 0-9] [-o %host.txt] host
  -o     Save output to %host.txt or to file specified by -o file  //将输出保存到%host.txt或由-o文件指定的文件
  -i     Perform a whois lookup on the IP address of a host  //对主机的IP地址执行whois查找
  -w     Perform a whois lookup on the domain name of a host  //对主机的域名执行whois查找
  -n     Retrieve Netcraft.com information on a host  //在主机上检索Netcraft.com信息
  -s     Perform a search for possible subdomains  //执行搜索可能的子域
  -e     Perform a search for possible email addresses  //执行搜索可能的电子邮件地址
  -p     Perform a TCP port scan on a host  //在主机上执行TCP端口扫描
* -f     Perform a TCP port scan on a host showing output reporting filtered ports  //在显示输出报告过滤端口的主机上执行TCP端口扫描
* -b     Read in the banner received from the scanned port  //读取从扫描端口接收的banner
* -t 0-9 Set the TTL in seconds when scanning a TCP port ( Default 2 )  //0-9扫描TCP端口时设置TTL(默认为2)
*Requires the -p flagged to be passed  //需要-p标记才能传递

12.png

  我们输入如下命令来探测目标主机:

# dmitry -p -f remote-pc-ip -b

13.png

  如图,将会对目标开放端口的banner进行探测报告。

  本文仅仅介绍一些常见的不同平台的探测banner的途径和方法,希望可以对初学安全的人员有所帮助。

仅有一条评论

  1. Rain0h Rain0h

    学习了!

添加新评论

  • 上一篇: 没有了
  • 下一篇: 没有了