端口扫描技术和算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

对于ICMP关心的destination unreachable hearder layout 中的0-3,9,10位的标记。

其中

TCP SYN Scan (-sS)

结果状态三种:open,closed,filtered

在扫描过程中当确定一个端口开放后,为了不建立完整链接需要发送一个RST包,告知服务器放弃连接。Nmap自身将根据情况发送一个RST包。

关闭的端口,直接收到一个RST包。

过滤的端口,发送SYN包后没有回复,Nmap自行决定时间,发送第二次,如果没有回复则

TCP扫描(-sT)

建立TCP连接(3次握手),目标发送SSH banner,接收后,终端连接。Nmap发送RST包,让目标终止。对于大量扫描端口为关闭或过滤,此时扫描发包同SYN扫描一致。

UDP扫描(-sU)

主要针对服务DNS、SNMP和DHCP(53,161/162,67/68)

UDP扫描除了open/filtered问题外,速度相对较慢。扫描1000个端口带盖需要17min。

区分出open端口(-sV)

nmap有nmap-service-probes格式,可以找到对应相应服务的包格式进行发送,(-sV)任何的open/filtered包回复则可以确认为open。

SNMP只有当确切的正确字符串给出,才能给出回复,很多设备配置开始为字符串public,但不是所有的都是。

对于nmap自动化来说,检测版本方法为唯一方法。

手工方法还有:一些特殊的traceroute,可以使用hping2等工具对一只的开放TCP或UDP 端口进行traceroute。接着对有问题的UDP端口进行,跳数的不同可以区分出open和filtered 端口。

对UDP扫描提速

nmap会根据主机的情况降低扫描速度和并限制速率,防止网络洪灾而导致目标机器丢弃。对于linux类型规定1包/s方法:

1、增加主机并行

--min-hostgroup

2、优先扫描主要端口-F设置

3、添加—version-intensity 0 给版本扫描nmap直接查找最可能的端口数。使用nmap-service-probes文件中的内容。

4、从防火墙后开始

5、使用—host-timeout跳过慢主机

6、使用-v 给出预测扫描技术时间

Nmap脚本引擎

目的:

网络发现、更多复杂版本探测、漏洞检测、后门检测、漏洞利用

脚本使用Lua语言编写

NSE用-sC选项,结果为完整的Nmap和XML输出。支持两种脚本,服务和主机脚本。服务脚本涉及目标主机上一个开放的服务或端口,任何结果将显示在输出中。主机脚本对每个目标IP运行不超过一次。

-Sc使用一般脚本

--script使用用户编写脚本,可以指定脚本名称,或者脚本所在目录名称

--script-args提供参数,--script-trace和—script-updatedb一般用于脚本调试和开发。

脚本分类:

auth确定目标系统的身份验证凭据,包括snmp-brute,http-auth,ftp-anon

default 默认考虑因素包括:

speed:运行速度快,不考虑暴力破解,怕中,和其他花费几分钟或消失的服务。

usefulness:提供有价值可用信息。

verbosity:产生的结果必须可读而且简洁。

reliability:很多脚本使用启发式和模糊质问匹配达到目的。如果经常出错不应加入默认

intrusiveness:太强进攻行为的脚本不适合。

privacy:有些外部脚本把信息传给第三方。

discovery 通过查询公共等级,SNMP服务,目录服务发现关于网络的更多信息。html-title,smb-enum-shares,snmp-sysdescr

external 这类脚本把数据发送到第三方数据库或其他网络资源。whois

intrusive 可能造成系统崩溃,并且占用带宽或CPU时间,会被目标系统管理员认为是恶意代码。http-open-proxy,snmp-brute

malware 检查系统是否被病毒感染,或存在后门。smtp-strangeport,auth-spoof

safe 不会造成目标服务崩溃,不使用大量带宽或者资源,或一处漏洞的脚本。ssh-hostkey,html-title。

version 版本探查,但不能单一选择。只当版本检测(-sV)运行时启动。

vuln检查某一一直的漏洞返回发现的问题。realvnc-auth-bypass,xampp-default-auth

脚本格式:

包括两个5部分描述域包括一个当脚本被执行时,一个动作块包含实际脚本指令的端口或者主机的规则定义。

description域

描述脚本用途以及任何需要使用者注意的东西。包括脚本的大纲。

categories域

定义几个或多个脚本所属类别。

author域

作者姓名,联系方式

license域

确定有合法许可可以分享

runlevel域

决定脚本执行顺序

端口和主机规则

nmap使用脚本规则决定是否应该在目标运行,一个脚本包含一个端口规则,管理脚本应该针对目标的哪个端口运行,或者一个主机规则,确保在条件成立时脚本针对目标IP只运行一次。规则是一个Lua函数返回true或false。主机规则接受一个主机表昨为他们的参数并测试,例如,ip地址和目标的主机名。端口规则接受丢与任何open,open|filtered,或unfiltered的TCP或UDP端口主机和端口表作为参数。端口规则通常测试如端口好,端口状态,或监听服务,是否针对端口运行。

Action运行

包含任何满足端口和主机规则的条件触发后,会运行的指令。是一个Lua函数,返回nil或者字符串。如果返回字符串,将在nmap端口表后打印。

脚本语言

NSE内部有一个Lua解释器,一个NSE库,后者连接Lua和Nmap。负责处理初始化Lua解释器,调度并行脚本运行,脚本恢复或其他。同时也是NSE网络I/O架构以及异常处理的核心。同样包含一个使用的苦,使脚本更加方便有效。

基于Lua的语言

nmap相关函数在命名空间nmap中,如nmap.socket()

脚本中也可以引用C语言模块,模块必须遵循lua_CFunction类型。一个特别的初始化函数提供在模块和剩余NSE代码的初始化。初始化函数在luaopen_

270页具体函数注册方法

以md5为例

Nmap API

Nmap获得的关于目标主机信息以参数形式给到脚本action方法。host和port是Lua表,如果脚本符合一条主机规则,只得到host表,如果符合端口规则,得到host和port表。

包含内容:

host表:host, host.os, host.ip(如果使用主机名扫描,从反向DNS得到多余一个IP,则选择相同的IP进行扫描), , host.targetname, host.directly_connected, host.mac_addr, host.mac_addr_src(可以用来欺骗), host.interface, host.bin_ip, host.bin_ip_src

port表:port, port.number, port.protocol, port.service, port.version, port.state

网络I/O API

支持两种接口为:连接类型和未加工数据包

connect-style network I/O连接类型网络I/O用于传统网络使用,建立socket连接,发送接收数据等。

raw packet network I/O 未加工数据包I/O

未加工数据包接收依靠在Nsock库中的Libpacap封装器。一般步骤为打开一个捕获设备,注

相关文档
最新文档