一、信息搜集

1、外围信息搜集

  • 外围信息搜集又叫公开渠道信息搜集。
  • 搜索引擎,公共信息库,目标门户网站等等都是很好的入手点。
  • metasploit有一类“辅助模块”,可以帮助你进行信息搜集的工作,并且还集成了nmap等神器。

1.1通过DNS和IP挖掘目标网站的信息

(1)whois域名注册信息查询

          可以在MSF终端使用whois命令进行查询。
msf > whois baidu.com

注意:进行whois查询时去掉www等前缀,因为注册域名时通常会注册一个上层域名,子域名由自身的域名服务器管理,在whois数据库中可能查询不到。

(2)nslookup,dig域名查询

nslookup可以得到DNS解析服务器保存的Cache的结果,但并不是一定准确的。dig可以从官方DNS服务器上查询精确的结果

          msf > nslookup
[*] exec: nslookup
> set type=A
> baidu.com
msf > dig @dns.baidu.com baidu.com

dns.baidu.com为DNS服务器

(3)IP2Location 地理位置查询

www.maxmind.com

可以根据IP查询地理位置,需要翻墙、

(4)netcraft提供的信息查询服务

http://www.netcraft.com/

能获取到更多的更详细的信息。

(5)IP2反域名查询

通过IP反查到域名,即旁注的第一步。

http://www.ip-adress.com/reverse_ip/

可以通过该网站查询

国内的也可以用

http://www.7c.com/

进行查询,结果更准确。

1.2通过搜索引擎进行信息搜集

(1)Google Hacking

  • Google提供了高级搜索功能。GHDB数据库包含了大量使用Google从事渗透的搜索字符串,

  • http://www.exploit-db.com/google-dorks 可以在上述网址看GHDB的内容。

  • 一些自动化的工具,SiteDigger ,Search Diggity,Gooscan,具体用法自行百度。

(2)搜索网址目录结构

首先可以手工测试一些常见的目录名,如 admin,login等等。

用Google查询:parent directory site:XXX.com 来查找目录。一般对拓展名为inc,bak,txt,sql的文件要特别留意。

                  inc:可能包含网站的配置信息。
bak:通常是文本编辑器留下的备份文件。
txt or sql:包含网站运行的sql脚本。

自动化的工具:metasploit的brute_dirs,dir_listing,dir_scanner等辅助模块,主要是暴力猜解。以dir_scanner为例:

msf > use auxiliary/scanner/http/dir_scanner。

具体的辅助模块需要百度自行查找。

一些网站还会在根目录下放置robots.txt文件,用以告诉搜索引擎哪些目录和文件不被抓取。

(3)搜索特定类型的文件

有些网站会链接通讯录,订单等敏感的文件,可以进行针对性的查找,

如Google,site:XXX.com filetype:xls。

(4)搜索E-Mali

metasploit中有search_email_collector,进行针对性的搜集。

msf auxiliary(dir_scanner) > use auxiliary/gather/search_email_collector

(5)搜索存在sql注入的页面以及后台登陆的页面

Google:site:XXX.com inurl:login  site:XXX.com inurl:.php?id=1

(6)IP路由侦查

工具:traceroute

root@kali:~# traceroute www.baidu.com

2、主机探测和端口扫描

2.1活跃主机扫描

(1)ICMP Ping命令

ping www.baidu.com

(2)metasploit中的模块

位于modules/auxiliary/scanner/discovery 主要有 arp_sweep, ipv6_multicast_ping, ipv6_neighbor, ipv6_neighbor_router_advertisement, udp_probe,udp_sweep.

arp_sweep 使用ARP请求枚举本地局域网的活跃主机,即ARP扫描器

udp_sweep 使用UDP数据包探测。

(3)Nmap探测

metasploit中集成了nmap,nmap的用法,在第二部分详细讨论。

2.2操作系统辨别

Nmap -O 参数

2.3端口扫描与服务探测

扫描技术:TCP Connect ,TCP SYN, TCP ACK ,TCP FIN ,TCP IDLE

(1)metasploit的端口扫描模块

search portscan 找到相关模块

(2)Nmap端口扫描

一般用到的参数如下:

-sT  -sS -sF/-sX/-sN -sP -sU -sA -Pn -p -F

详见第二部分。

(3)探测详细服务信息

Nmap -sV 参数

3、服务扫描和查点

metasploit中有许多相关工具,大部分都在Scanner辅助模块,常以[service_name]_version(用以遍历主机,确定服务版本)和[service_name]_login(进行口令探测攻击)命名

可输入 search name:_version查看所有服务查点模块

3.1网络服务扫描

(1)telent服务扫描

msf > use auxiliary/scanner/telent/telent_version

(2)SSH服务扫描

msf > use auxiliary/scanner/ssh/ssh_version

(3)Oracle数据库服务查点

msf auxiliary(ssh_version) > use auxiliary/scanner/oracle/tnslsnr_version

(4)开放代理探测

open_proxy模块

msf auxiliary(tnslsnr_version) > use auxiliary/scanner/http/open_proxy

3.2口令猜测与嗅探

(1)SSH口令猜测

msf auxiliary(open_proxy) > use auxiliary/scanner/ssh/ssh_login

(2)psnuffle口令探测

psnuffle是metasploit中的口令嗅探工具,只有在接入对方网络的初始访问点后才能进行嗅探。

msf auxiliary(ssh_login) > use auxiliary/sniffer/psnuffle

4、网络漏洞扫描

漏洞扫描器会向目标发送大量数据包,甚至会导致目标系统拒绝服务,而且会有很多误报或漏报,因此需要人工分析。

(1)OpenVAS漏洞扫描器

(2)查找特定服务漏洞

Nmap是针对性扫描工具之一,其拥有很多script的脚本可供使用。

5、渗透测试信息数据库共享

metasploit提供了对psrtgresql数据库的支持。并提供了db_namp命令,可以将Nmap扫描结果存入数据库中,还提供了db_import命令,支持多种扫描结果导入。

(1)使用网络数据库共享

(2)通过RPC 服务共享

二、NMAP

  • NMap,也就是Network Mapper,最早是Linux下的网络扫描和嗅探工具包。
  • nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。
  • Nmap 以隐秘的手法,避开闯入检测系统的监视,并尽可能不影响目标系统的日常操作。
  • 基本功能有三个:一是探测一组主机是否在线;其次是扫描主机端口,嗅探所提供的网络服务;还可以推断主机所用的操作系统 。
  • 语法格式:namp [空格] 【选项|多选项|协议】 【空格】
  • Nmap包含四项基本功能:主机发现(Host Discovery);端口扫描(Port Scanning);版本侦测(Version Detection);操作系统侦测(Operating System Detection)。另外Nmap提供强大的NSE(Nmap Scripting Language)脚本引擎功能,脚本可以对基本功能进行补充和扩展。
  • 功能架构图

基本用法

  • 1.确定端口状况

如果直接针对某台计算的IP地址或域名进行扫描,那么Nmap对该主机进行主机发现过程和端口扫描。该方式执行迅速,可以用于确定端口的开放状况。

命令形式:

nmap targethost

可以确定目标主机在线情况及端口基本状况。

  • 2.对主机全面扫描

如果希望对某台主机进行完整全面的扫描,那么可以使用nmap内置的-A选项。使用了改选项,nmap对目标主机进行主机发现、端口扫描、应用程序与版本侦测、操作系统侦测及调用默认NSE脚本扫描。

命令形式:

nmap –T4 –A –v targethost

其中-A选项用于使用进攻性(Aggressive)方式扫描;-T4指定扫描过程使用的时序(Timing),总有6个级别(0-5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通讯状况良好的情况推荐使用T4;-v表示显示冗余(verbosity)信息,在扫描过程中显示扫描的细节,从而让用户了解当前的扫描状态。

下面详细讲解每个具体功能。

主机发现(Host Discovery)

1.默认情况下,Nmap会发送四种不同类型的数据包来探测目标主机是否在线。

1.  ICMP echo request
2. a TCP SYN packet to port 443
3. a TCP ACK packet to port 80
4. an ICMP timestamp request

依次发送四个报文探测目标机是否开启。只要收到其中一个包的回复,那就证明目标机开启。使用四种不同类型的数据包可以避免因防火墙或丢包造成的判断错误。

2.通常主机发现并不单独使用,而只是作为端口扫描、版本侦测、OS侦测先行步骤。而在某些特殊应用(例如确定大型局域网内活动主机的数量),可能会单独专门适用主机发现功能来完成。

不管是作为辅助用法还是专门用途,用户都可以使用Nmap提供的丰富的选项来定制主机发现的探测方式。

-sL: List Scan 列表扫描,仅将指定的目标的IP列举出来,不进行主机发现。  

-sn: Ping Scan 只进行主机发现,不进行端口扫描。  

-Pn: 将所有指定的主机视作开启的,跳过主机发现的过程。  

-PS/PA/PU/PY[portlist]: 使用TCPSYN/ACK或SCTP INIT/ECHO方式进行发现。  

-PE/PP/PM: 使用ICMP echo, timestamp, and netmask 请求包发现主机。-PO[protocollist]: 使用IP协议包探测对方主机是否开启。  

-n/-R: -n表示不进行DNS解析;-R表示总是进行DNS解析。  

--dns-servers <serv1[,serv2],...>: 指定DNS服务器。  

--system-dns: 指定使用系统的DNS服务器  

--traceroute: 追踪每个路由节点

其中,比较常用的使用的是-sn,表示只单独进行主机发现过程;

-Pn表示直接跳过主机发现而进行端口扫描等高级操作(如果已经确知目标主机已经开启,可用该选项);

-n,如果不想使用DNS或reverse DNS解析,那么可以使用该选项。

3.例子

(1)探测scanme.nmap.org

下面以探测scanme.nmap.org 的主机为例,简单演示主机发现的用法。

命令如下:

nmap –sn –PE –PS80,135 –PU53 scanme.nmap.org

(2)探测局域网内活动主机

扫描局域网192.168.1.100-192.168.1.120范围内哪些IP的主机是活动的。

命令如下:

nmap –sn 192.168.1.100-120

端口扫描(Port Scanning)

1.端口扫描是Nmap最基本最核心的功能,用于确定目标主机的TCP/UDP端口的开放情况。

2.默认情况下,Nmap会扫描1000个最有可能开放的TCP端口。

3.Nmap通过探测将端口划分为6个状态:

open:端口是开放的。
closed:端口是关闭的。
filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态。
unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。
open|filtered:端口是开放的或被屏蔽。
closed|filtered :端口是关闭的或被屏蔽。

4.用法

端口扫描用法比较简单,Nmap提供丰富的命令行参数来指定扫描方式和扫描端口。

具体可以参见如下描述。

(1)扫描方式选项

-sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式来对目标主机进行扫描。  

  -sU: 指定使用UDP扫描方式确定目标主机的UDP端口状况。  

  -sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密扫描方式来协助探测对方的TCP端口状态。  

  --scanflags <flags>: 定制TCP包的flags。  

  -sI <zombiehost[:probeport]>: 指定使用idle scan方式来扫描目标主机(前提需要找到合适的zombie host)  

  -sY/sZ: 使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况。  

  -sO: 使用IP protocol 扫描确定目标机支持的协议类型。  

  -b <FTP relay host>: 使用FTP bounce scan扫描方式

(2)端口参数与扫描顺序

-p <port ranges>: 扫描指定的端口  

实例: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9(其中T代表TCP协议、U代表UDP协议、S代表SCTP协议)  

-F: Fast mode – 快速模式,仅扫描TOP 100的端口  

-r: 不进行端口随机打乱的操作(如无该参数,nmap会将要扫描的端口以随机顺序方式扫描,以让nmap的扫描不易被对方防火墙检测到)。  

--top-ports <number>:扫描开放概率最高的number个端口(nmap的作者曾经做过大规模地互联网扫描,以此统计出网络上各种端口可能开放的概率。以此排列出最有可能开放端口的列表,具体可以参见文件:nmap-services。默认情况下,nmap会扫描最有可能的1000个TCP端口)  

--port-ratio <ratio>: 扫描指定频率以上的端口。与上述--top-ports类似,这里以概率作为参数,让概率大于--port-ratio的端口才被扫描。显然参数必须在在0到1之间,具体范围概率情况可以查看nmap-services文件。

5.例子

这里,我们以扫描局域网内192.168.1.100主机为例。

命令如下:

nmap –sS –sU –T4 –top-ports 300 192.168.1.100

参数-sS表示使用TCP SYN方式扫描TCP端口;-sU表示扫描UDP端口;-T4表示时间级别配置4级;--top-ports 300表示扫描最有可能开放的300个端口(TCP和UDP分别有300个端口)。

版本侦测(Version Detection)

1.版本侦测,用于确定目标主机开放端口上运行的具体的应用程序及版本信息。

2.版本侦测主要分为以下几个步骤:

(1)首先检查open与open|filtered状态的端口是否在排除端口列表内。如果在排除列表,将该端口剔除。
(2)如果是TCP端口,尝试建立TCP连接。尝试等待片刻(通常6秒或更多,具体时间可以查询文件nmap-services-probes中Probe TCP NULL q||对应的totalwaitms)。通常在等待时间内,会接收到目标机发送的“WelcomeBanner”信息。nmap将接收到的Banner与nmap-services-probes中NULL probe中的签名进行对比。查找对应应用程序的名字与版本信息。
(3)如果通过“Welcome Banner”无法确定应用程序版本,那么nmap再尝试发送其他的探测包(即从nmap-services-probes中挑选合适的probe),将probe得到回复包与数据库中的签名进行对比。如果反复探测都无法得出具体应用,那么打印出应用返回报文,让用户自行进一步判定。
(4)如果是UDP端口,那么直接使用nmap-services-probes中探测包进行探测匹配。根据结果对比分析出UDP应用服务类型。
(5)如果探测到应用程序是SSL,那么调用openSSL进一步的侦查运行在SSL之上的具体的应用类型。
(6)如果探测到应用程序是SunRPC,那么调用brute-force RPC grinder进一步探测具体服务

3.版本侦测的用法

-sV: 指定让Nmap进行版本侦测  

--version-intensity <level>: 指定版本侦测强度(0-9),默认为7。数值越高,探测出的服务越准确,但是运行时间会比较长。  

--version-light: 指定使用轻量侦测方式 (intensity 2)  

--version-all: 尝试使用所有的probes进行侦测 (intensity 9)  

--version-trace: 显示出详细的版本侦测过程信息。

4.例子

命令:

nmap –sV 192.168.1.100

对主机192.168.1.100进行版本侦测。

操作系统侦测(Operating System Detection)

1.操作系统侦测用于检测目标主机运行的操作系统类型及设备类型等信息。

2.Nmap拥有丰富的系统数据库nmap-os-db,目前可以识别2600多种操作系统与设备类型。

3.OS侦测用法

-O: 指定Nmap进行OS侦测。  

--osscan-limit: 限制Nmap只对确定的主机的进行OS探测(至少需确知该主机分别有一个open和closed的端口)。  

--osscan-guess: 大胆猜测对方的主机的系统类型。由此准确性会下降不少,但会尽可能多为用户提供潜在的操作系统。

4.例子

命令:

nmap –O 192.168.1.100

ex6教程的更多相关文章

  1. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  2. Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数

    上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...

  3. Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数

    上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...

  4. Angular2入门系列教程4-服务

    上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...

  5. Angular2入门系列教程1-使用Angular-cli搭建Angular2开发环境

    一直在学Angular2,百忙之中抽点时间来写个简单的教程. 2016年是前端飞速发展的一年,前端越来越形成了(web component)组件化的编程模式:以前Jquery通吃一切的田园时代一去不复 ...

  6. wepack+sass+vue 入门教程(三)

    十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...

  7. wepack+sass+vue 入门教程(二)

    六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...

  8. wepack+sass+vue 入门教程(一)

    一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...

  9. Virtual Box配置CentOS7网络(图文教程)

    之前很多次安装CentOS7虚拟机,每次配置网络在网上找教程,今天总结一下,全图文配置,方便以后查看. Virtual Box可选的网络接入方式包括: NAT 网络地址转换模式(NAT,Network ...

随机推荐

  1. vue与原生混合开发

    前段时间,做了一个混合开发的项目,主要是以vue框架开发h5页面,使用cordova作为中间沟通桥梁,实现了h5与安卓.iOS的混合开发,由于从事iOS开发,h5也是刚接触不久,很多深入原理还不太清楚 ...

  2. 微信小程序开发--模板(template)使用,数据加载,点击交互

    微信小程序视图层提供了 模板(template),可以在模板中定义代码片段,然后在不同的地方调用.结果在数据渲染那懵逼了.按照官网上对模板的说明和对数据的加载. 1.定义模板 使用name属性,作为模 ...

  3. Python之生成器(generator)和迭代器(Iterator)

    generator 生成器generator:一边循环一边计算的机制. 生成器是一个特殊的程序,可以被用于控制循环的迭代行为.python中的生成器是迭代器的一种,使用yield返回值函数,每次调用y ...

  4. 用例设计之APP用例覆盖准则

    基本原则 本文主要讨论APP功能用例的覆盖,基本原则: 用户场景闭环(从哪来到哪去) 遍历所有的实现逻辑路径 需求点覆盖 覆盖维度 APP功能用例设计主要使用传统的黑盒用例设计方法.同时,作为移动AP ...

  5. android:screenOrientation属性

    今天工作中发现一个activity的android:screenOrientation属性设置为behind,平时经常看到的是landscape.portrait,一时没有反应过来,故查了一下andr ...

  6. Chained Declustering

          此论文描述了在无共享架构的多处理器机器上的数据库系统的数据冗余分布方法.该方法提高了系统的可用性,同时在单节点故障的情况下,可以很好的实现负载均衡.以下是论文的一些摘要,详细可以参见论文原 ...

  7. SQLSERVER将数据移到另一个文件组之后清空文件组并删除文件组

    SQLSERVER将数据移到另一个文件组之后清空文件组并删除文件组 之前写过一篇文章:SQLSERVER将一个文件组的数据移动到另一个文件组 每个物理文件(数据文件)对应一个文件组的情况(一对一) 如 ...

  8. 插入图片新方式:data:image

    我们在使用<img>标签和给元素添加背景图片时,不一定要使用外部的图片地址,也可以直接把图片数据定义在页面上.对于一些“小”的数据,可以在网页中直接嵌入,而不是从外部文件载入. 如何使用 ...

  9. Django中的DateTimeField格式

    转自:http://www.nanerbang.com/article/5488/ 创建django的model时,有DateTimeField.DateField和TimeField三种类型可以用来 ...

  10. Shell 脚本合集

    0. 说明  Shell 脚本合集 1. xcall.sh xcall.sh 编写为了为了同时对多台服务器进行操作,编写完成之后,将其发送到 /usr/local/bin 下 #!/bin/bash ...