端口扫描工具–nmap

安全方面本不是我的本职工作,不过趁着研究 nmap 的时机在文章前面记录一些安全相关的信息。

一个完整的渗透测试大致可以分为以下六步:

1.信息收集。知己知彼,百战不殆。通过whois查询等方式,了解目标主机状态,如状态、系统版本等;利用工具查寻c段、旁站子站的信息;查寻服务器和端口的有关信息,如内核信息、开放的端口等;使用爬虫这种自动化工具遍历并抓取网站目录,为以后的漏洞寻找做准备;google hack有关的旧漏洞信息,有的时候会很有用。

相关工具:Nmap ,SuperScan。

2.漏洞挖掘。首先要了解常见的Web漏洞,如XSS(跨站脚本攻击)、SQL注入、CSRF(跨站请求伪造)等;其次就是使用相关工具配合上一步得到的信息有针对性地进行漏洞扫描,但要注意,轻易不建议使用Nessus这种重武器,因为动静不小,有可能被发现,这就违背了渗透测试的初衷,也就是“像入侵者一样思考和行动”。

相关工具:Joomscan、AWVS等。

3.漏洞利用。要注意的是,这里的利用一定要把握好度,不能逾越那条线,点到即止,不然就等着律师含吧(滑稽)。各种漏洞自然有不同的利用方法,比如文件上传漏洞可以拿shell,SQL注入可以拿密码等,总之是只要能用的都可以用,手段越猥琐越好。

相关工具:sqlmap、BurpSuite等。

4.权限提升与维持。这和上一点一样,各有各的姿势,但都是建立在有漏洞利用的前提上的,在此不一一介绍。

5.日志清理。 不管干啥,屁股一定要擦干净。通常会留下你踪迹的地方有应用程序日志、系统日志、访问日志、登录日志等,虽说在正规测试中这步可以略去,但我想每个Hacker 都应该去养成这种习惯,因为,你们懂的。。。

相关工具:del.、rm

6.总结报告。将自己所发现的东西记录下来,越详细越好,毕竟这关系着你的报酬。

相关工具:Word等。

转自:https://zhuanlan.zhihu.com/p/32342884

nmap简介

Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具,是世界千万安全专家列为必备的工具之一,在其中的一些影视作品中《黑客帝国2》、《特警判官》中都有亮相。

Nmap包含四项基本功能:

  1. 主机发现(Host Discovery)
  2. 端口扫描(Port Scanning)
  3. 版本侦测(Version Detection)
  4. 操作系统侦测(Operating System Detection)

默认的情况下,我们的查找是查找最有可能开放的1000端口,但是使用快速端口查找(参数 -F )会查找最有可能开放的100个端口,这样也就节约了10倍的时间

NMAP 有很多的脚本和漏洞分析等功能,PS/PU/PA/PY不只是可以用来做主机发现的,主要还是作为获取端口列表用的,如果是要做主机发现,我们可以在基本的扫描(TCP扫描、SYN扫描等)的基础之上加上 sn 参数来进行主机发现,这样就不会对端口进行扫描,提升了扫描的效率。

常用有4种扫描方式:

  1. PING 扫描 (-sP)
  2. UDP 扫描 (-sU)
  3. TCP SYN 扫描 (-sS)
  4. TCP Connect() 扫描 (-sT)

注意,大量的没有针对性的扫描活动,大概率会触发网络流量监控的警报。

PING 扫描 (-sP)

Ping 扫描在网络中最多只会产生两个包。

UDP 扫描 (-sU)

现在你已经知道了有那些系统是在线的,你的扫描就可以聚焦在这些 IP 地址之上。在整个网络上执行大量的没有针对性的扫描活动可不是一个好主意,系统管理员可以使用程序来监控网络流量当有大量异常活动发生的时候就会触发警报。

用户数据报协议(UDP)在发现在线系统的开放端口方面十分有用。

TCP SYN 扫描 (-sS)

TCP SYN 扫描是默认的 NMAP 扫描方式,需要 Root 权限。

TCP SYN 扫描通过执行下面的步骤来进行工作:

  1. 源系统向目标发送一个同步请求,该请求中包含一个端口号。
  2. 如果添加在上一步中的所请求的端口号是开启的,那么目标将通过同步/应答(SYN/ACK)来响应源系统。
  3. 源系统通过重置(RST)来响应目标,从而断开连接。
  4. 目标通过重置/应答(RST/ACK)来响应源系统。

如果被扫描的端口是关闭的,那么将执行下面的步骤:

  1. 源系统发送一个同步(SYN)请求到目标,该请求中包含一个端口号。
  2. 目标通过重置(RST)响应源系统,因为该端口是关闭的。

如果目标处于防火墙之后,那么 ICMP 传输或响应会被防火墙禁止:

  1. 源系统发送一个同步(SYN)请求到目标,该请求中包含一个端口号。
  2. 没有任何响应,因为请求被防火墙过滤了。

TCP Connect() 扫描 (-sT)

TCP Connect() 扫描不需要Root 权限。在这种扫描中会执行一个完整的“三次握手”。

TCP Connect 扫描通过执行下面的步骤来工作:

  1. 源系统发送一个同步(SYN)请求到目标,该请求中包含一个端口号。
  2. 如果端口是开启的,那么目标将通过同步/应答(SYN/ACK)来响应源系统。
  3. 源系统通过应答(ACK)来响应目标从而完成会话创建。
  4. 然后,源系统向目标发送一个重置(RST)包来关闭会话。
  5. 目标可以通过同步/应答(SYN/ACK)来响应源系统。

其它情况与 tcp syn 一致。

时间优化

时间优化的参数是(-T0~5),最快的扫描速度为-T5,最慢的扫描速度为-T0,

实现的原理:通过设置各个端口的扫描周期,从而来控制整个扫描的时间,比如说T0各个端口的扫描周期大约为5分钟,而T5各个端口的扫描周期为5ms

扫描的周期过快,会很容易被防火墙和IDS发现并记录,因为防火墙大多数会将端口周期过段识别为扫描从而屏蔽掉,如果不对其进行设置的话,默认值为T4

nmap用法

nmap参数:

nmap [Scan Type(s)] [Options] {target specification}

scan type(s) 用于指定扫描类型
options 用于指定选项
target specification 用于指定扫描目标

-s 指定扫描类型
如下:
-sP (ping扫描) *存活主机探测
-sS (TCP SYN扫描 隐身扫描)  *默认扫描方式
-sT (tcp 扫描) * syn 不能用时就tcp扫描
-sU (UDP 扫描)
-sA  (ACK扫描) *三次握手 用于探测出防火墙过滤端口 实际渗透中没多大用

-sV   (版本探测)
-A    进攻性方式扫描
-O (启用操作系统检测)
-v    详细
选项说明
-P0  [指定端口] (无ping扫描)
-PU  [指定端口] (udp ping扫描)
-PS [指定端口] (TCP SYN ping 扫描)
-PA  [指定端口] (tcp ack ping扫描) 
-PI   使用真正的pingICMP echo请求来扫描目标主机是否正在运行

-iL 指定扫描主机列表
-iR 随机选择目标

--exclude 排除扫描目标
--excludefile 排除文件中目标列表

-n (不用域名解析)
-R (为所有目标解析域名)

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

-T  时间优化(每隔多久发一次包 ) -T5 最快 -T0 最慢
-F  快速扫描,仅扫描TOP 100的端口
-e  指定网络接口
-M 设置tcp扫描线程

nmap output

输出结果:

-oS  保存扫描结果输出
-oN  把扫描结果重定向到一个可读的文件logfilename中
-oM  每个结果一行输出
-oA  同上
--append-output 附在原来的结果前面

nmap status

nmap端口状态:

open(开放的)
closed(关闭的)
filtered(被过滤的)不确定开放还是关闭
unfiltered (未被过滤的)
openfiltered (开放或者被过滤的)
closedfiltered (关闭或者未被过滤的)

nmap应用场景

轻量级扫描:

nmap -sP 192.168.0.0/24   判断哪些主机存活
nmap -sT 192.168.0.3   开放了哪些端口
nmap -sS 192.168.0.127 开放了哪些端口(隐蔽扫描)
nmap -sU 192.168.0.127 开放了哪些端口(UDP)
nmap -sS -O 192.168.0.127 操作系统识别
nmap -sT -p 80 -oG – 192.168.1.* | grep open    列出开放了指定端口的主机列表
nmap -sV -p 80 thief.one  列出服务器类型(列出操作系统,开发端口,服务器类型,网站脚本类型等)
nmap -O 172.16.0.15

# -sP (ping扫描) *存活主机探测
# -sS (TCP SYN扫描 隐身扫描)  *默认扫描方式
# -sT (tcp 扫描) * syn 不能用时就tcp扫描
# -sU (UDP 扫描)
# -sA  (ACK扫描) *三次握手 用于探测出防火墙过滤端口 实际渗透中没多大用

# -Pn, 跳过ping扫描并假设主机已启动、
# -v, 详细
nmap -v -Pn -O 172.16.0.15 

# 识别主机名
nmap -sL 172.16.0.0/24

# 扫描最常见的100个端口
nmap -T4 -F 172.16.0.14 快速扫描
nmap -T4 -A 172.16.0.0/24  操作系统检查和版本检查

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

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个端口)。

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

批量扫描:

nmap -sT -sV -O -P0 --open -n -oN result.txt -p80-89,8080-8099,8000-8009,7001-7009,9000-9099,21,443,873,2601,2604,3128,4440,6082,6379,8888,3389,9200,11211,27017,28017,389,8443,4848,8649,995,9440,9871,2222,2082,3311,18100,9956,1433,3306,1900,49705,50030,7778,5432,7080,5900,50070,5000,5560,10000 -iL ip.txt

批量扫描:

nmap -sT -sV -p80-89,8080-8099,8000-8009,7001-7009,9000-9099,21,443,873,2601,2604,3128,4440,6082,6379,8888,3389,9200,11211,27017,28017,389,8443,4848,8649,995,9440,9871,2222,2082,3311,18100,9956,1433,3306,1900,49705,50030,7778,5432,7080,5900,50070,5000,5560,10000 --open --max-hostgroup 10 --max-parallelism 10 --max-rtt-timeout 1000ms --host-timeout 800s --max-scan-delay 2000ms -iL ~/Desktop/ip.txt -oN ~/Desktop/result/result.txt

nmap api

nmap支持很多语言的扩展,本文简单介绍下python中如何使用nmap。

python-nmap

安装:pip install python-nmap 作用:利用python调用nmap接口,实现端口扫描。 使用:

>>> import nmap
>>> nm = nmap.PortScanner()
>>> nm.scan('127.0.0.1', '22-443')
>>> nm.command_line()

更多使用方法,参考:python-nmap : nmap from python

参考资料


其疾如风,其徐如林 创业资料