聚锋实验室 · 2015/09/15 10:50

作者:Mr.Right、K0r4dji 申明:文中提到的攻击方式仅为曝光、打击恶意网络攻击行为,切勿模仿,否则后果自负。

0x00 简单介绍


“知己知彼,百战不殆。”扫描探测,目的就是“知彼”,为了提高攻击命中率和效率,基本上常见的攻击行为都会用到扫描探测。

扫描探测的种类和工具太多了,攻击者可以选择现有工具或自行开发工具进行扫描,也可以根据攻击需求采用不同的扫描方式。本文仅对Nmap常见的几种扫描探测方式进行分析。如:地址扫描探测、端口扫描探测、操作系统扫描探测、漏洞扫描探测(不包括Web漏洞,后面会有单独文章介绍Web漏洞扫描分析)。

0x01 地址扫描探测


地址扫描探测是指利用ARPICMP请求目标网段,如果目标网段没有过滤规则,则可以通过回应消息获取目标网段中存活机器的IP地址和MAC地址,进而掌握拓扑结构。

如:192.1.14.235向指定网段发起ARP请求,如果IP不存在,则无回应。

如果IP存在,该IP会通过ARP回应攻击IP,发送自己的MAC地址与对应的IP

ARP欺骗适用范围多限于内网,通过互联网进行地址扫描一般基于Ping请求。

如:192.1.14.235向指定网段发起Ping请求,如果IP存在,则返回Ping reply

0x02 端口扫描探测


端口扫描是扫描行为中用得最多的,它能快速获取目的机器开启端口和服务的情况。常见的端口扫描类型有全连接扫描、半连接扫描、秘密扫描和UDP扫描。

1、全连接扫描

全连接扫描调用操作系统提供的connect()函数,通过完整的三次TCP连接来尝试目标端口是否开启。全连接扫描是一次完整的TCP连接。

1)如果目标端口开启 攻击方:首先发起SYN包;

目标:返回SYN ACK

攻击方:发起ACK

攻击方:发起RST ACK结束会话。

2)如果端口未开启 攻击方:发起SYN包;

目标:返回RST ACK结束会话。

如:192.1.14.235172.16.33.162进行全连接端口扫描,首先发起Ping消息确认主机是否存在,然后对端口进行扫描。

下图为扫描到TCP3389端口开启的情况。

下图为扫描到TCP1723端口未开启的情况。

2、半连接扫描

半连接扫描不使用完整的TCP连接。攻击方发起SYN请求包;如果端口开启,目标主机回应SYN ACK包,攻击方再发送RST包。如果端口未开启,目标主机直接返回RST包结束会话。

如:192.1.14.235172.16.33.162进行半连接端口扫描,首先发起Ping消息确认主机是否存在,然后对端口进行扫描。

扫描到TCP80端口开启。

TCP23端口未开启。

3、秘密扫描TCPFIN

TCP FIN扫描是指攻击者发送虚假信息,目标主机没有任何响应时认为端口是开放的,返回数据包认为是关闭的。

如下图,扫描方发送FIN包,如果端口关闭则返回RST ACK包。

4、秘密扫描TCPACK

TCP ACK扫描是利用标志位ACK,而ACK标志在TCP协议中表示确认序号有效,它表示确认一个正常的TCP连接。但是在TCP ACK扫描中没有进行正常的TCP连接过程,实际上是没有真正的TCP连接。所以使用TCP ACK扫描不能够确定端口的关闭或者开启,因为当发送给对方一个含有ACK表示的TCP报文的时候,都返回含有RST标志的报文,无论端口是开启或者关闭。但是可以利用它来扫描防火墙的配置和规则等。

5、UDP端口扫描

前面的扫描方法都是针对TCP端口,针对UDP端口一般采用UDP ICMP端口不可达扫描。

如:192.1.14.235172.16.2.4发送大量UDP端口请求,扫描其开启UDP端口的情况。

如果对应的UDP端口开启,则会返回UDP数据包。

如果端口未开启,则返回“ICMP端口不可达”消息。

0x03 操作系统的探测


NMAP进行操作系统的探测主要用到的是OS探测模块,使用TCP/IP协议栈指纹来识别不同的操作系统和设备。Nmap内部包含了2600多种已知操作系统的指纹特征,根据扫描返回的数据包生成一份系统指纹,将探测生成的指纹与nmap-os-db中指纹进行对比,查找匹配的操作系统。如果无法匹配,则以概率形式列举出可能的系统。

如:192.168.1.50192.168.1.90进行操作系统的扫描探测。首先发起Ping请求,确认主机是否存在。

发起ARP请求,获取主机MAC地址。

进行端口扫描。

根据综合扫描情况,判断操作系统类型。

0x04 漏洞扫描


操作系统的漏洞探测种类很多,本文针对“smb-check-vulns”参数就MS08-067CVE2009-3103MS06-025MS07-029四个漏洞扫描行为进行分析。

攻击主机:192.168.1.200(Win7),目标主机:192.168.1.40(WinServer 03);

Nmap扫描命令:nmap --script=smb-check-vulns.nse --script-args=unsafe=1 192.168.1.40

1、端口扫描

漏洞扫描前,开始对目标主机进行端口扫描。

2、SMB协议简单分析

由于这几个漏洞多针对SMB服务,下面我们简单了解一下NAMP扫描行为中的SMB命令。

SMB Command:Negotiate Protocol(0x72):SMB协议磋商

SMB Command: Session Setup AndX(0x73):建立会话,用户登录

SMB Command: Tree Connect AndX (0x75):遍历共享文件夹的目录及文件

SMB Command: NT Create AndX (0xa2):打开文件,获取文件名,获得读取文件的总长度

SMB Command: Write AndX (0x2f):写入文件,获得写入的文件内容

SMB Command:Read AndX(0x2e):读取文件,获得读取文件内容

SMB Command: Tree Disconnect(0x71):客户端断开

SMB Command: Logoff AndX(0x74):退出登录

3、MS08-067漏洞

(1)MS08-067漏洞扫描部分源码如下:

function check_ms08_067(host)if(nmap.registry.args.safe ~= nil) thenreturn true, NOTRUNendif(nmap.registry.args.unsafe == nil) thenreturn true, NOTRUNendlocal status, smbstatelocal bind_result, netpathcompare_result-- Create the SMB session  \\创建SMB会话status, smbstate = msrpc.start_smb(host, "\\\\BROWSER")if(status == false) thenreturn false, smbstateend-- Bind to SRVSVC servicestatus, bind_result = msrpc.bind(smbstate, msrpc.SRVSVC_UUID, msrpc.SRVSVC_VERSION, nil)if(status == false) thenmsrpc.stop_smb(smbstate)return false, bind_resultend-- Call netpathcanonicalize
--  status, netpathcanonicalize_result = msrpc.srvsvc_netpathcanonicalize(smbstate, host.ip, "\\a", "\\test\\")local path1 = "\\AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\..\\n"local path2 = "\\n"status, netpathcompare_result = msrpc.srvsvc_netpathcompare(smbstate, host.ip, path1, path2, 1, 0)-- Stop the SMB sessionmsrpc.stop_smb(smbstate)
复制代码

(2)分析

尝试打开“\\BROWSER”目录,下一包返回成功。

同时还有其它尝试,均成功,综合判断目标存在MS08-067漏洞。通过Metasploit进行漏洞验证,成功溢出,获取Shell。

4、CVE-2009-3103漏洞

(1)CVE-2009-3103漏洞扫描部分源码如下:

host = "IP_ADDR", 445
buff = (
"\x00\x00\x00\x90" # Begin SMB header: Session message
"\xff\x53\x4d\x42" # Server Component: SMB
"\x72\x00\x00\x00" # Negociate Protocol
"\x00\x18\x53\xc8" # Operation 0x18 & sub 0xc853
"\x00\x26"# Process ID High: --> :) normal value should be "\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xfe"
"\x00\x00\x00\x00\x00\x6d\x00\x02\x50\x43\x20\x4e\x45\x54"
"\x57\x4f\x52\x4b\x20\x50\x52\x4f\x47\x52\x41\x4d\x20\x31"
"\x2e\x30\x00\x02\x4c\x41\x4e\x4d\x41\x4e\x31\x2e\x30\x00"
"\x02\x57\x69\x6e\x64\x6f\x77\x73\x20\x66\x6f\x72\x20\x57"
"\x6f\x72\x6b\x67\x72\x6f\x75\x70\x73\x20\x33\x2e\x31\x61"
"\x00\x02\x4c\x4d\x31\x2e\x32\x58\x30\x30\x32\x00\x02\x4c"
"\x41\x4e\x4d\x41\x4e\x32\x2e\x31\x00\x02\x4e\x54\x20\x4c"
"\x4d\x20\x30\x2e\x31\x32\x00\x02\x53\x4d\x42\x20\x32\x2e"
"\x30\x30\x32\x00"
)
复制代码

(2)分析

十六进制字符串“0x00000000202e30303200”请求,通过ASCII编码可以看出是在探测NTLMSMB协议的版本。无响应,无此漏洞。

5、MS06-025漏洞

(1)MS06-025漏洞扫描部分源码如下:

--create the SMB session
--first we try with the "\router" pipe, then the "\srvsvc" pipe.
local status, smb_result, smbstate, err_msg
status, smb_result = msrpc.start_smb(host, msrpc.ROUTER_PATH)
if(status == false) then
err_msg = smb_result
status, smb_result = msrpc.start_smb(host, msrpc.SRVSVC_PATH) --rras is also accessible across SRVSVC pipe
if(status == false) thenreturn false, NOTUP --if not accessible across both pipes then service is inactive
end
end
smbstate = smb_result
--bind to RRAS service
local bind_result
status, bind_result = msrpc.bind(smbstate, msrpc.RASRPC_UUID, msrpc.RASRPC_VERSION, nil)
if(status == false) then
msrpc.stop_smb(smbstate)
return false, UNKNOWN --if bind operation results with a false status we can't conclude anything.
End
复制代码

(2)分析

先后尝试去连接“\router”、“ \srvsvc”路径,均报错,无RAS RPC服务。

6、MS07-029漏洞

(1)MS07-029漏洞扫描部分源码如下:

function check_ms07_029(host)--check for safety flag
if(nmap.registry.args.safe ~= nil) thenreturn true, NOTRUN
end
if(nmap.registry.args.unsafe == nil) then
return true, NOTRUN
end--create the SMB sessionlocal status, smbstatestatus, smbstate = msrpc.start_smb(host, msrpc.DNSSERVER_PATH)if(status == false) thenreturn false, NOTUP --if not accessible across pipe then the service is inactiveend--bind to DNSSERVER servicelocal bind_resultstatus, bind_result = msrpc.bind(smbstate, msrpc.DNSSERVER_UUID, msrpc.DNSSERVER_VERSION)if(status == false) thenmsrpc.stop_smb(smbstate)return false, UNKNOWN --if bind operation results with a false status we can't conclude anything.end--calllocal req_blob, q_resultstatus, q_result = msrpc.DNSSERVER_Query(smbstate, "VULNSRV", string.rep("\\\13", 1000), 1)--any op num will do--sanity checkmsrpc.stop_smb(smbstate)if(status == false) thenstdnse.print_debug(3,"check_ms07_029: DNSSERVER_Query failed")if(q_result == "NT_STATUS_PIPE_BROKEN") thenreturn true, VULNERABLEelsereturn true, PATCHEDendelsereturn true, PATCHEDend
end
复制代码

(2)分析

尝试打开“\DNSSERVER”,报错,未开启DNS RPC服务。

0x05 总结


1、扫描探测可以说是所有网络中遇到最多的攻击,因其仅仅是信息搜集而无实质性入侵,所以往往不被重视。但扫描一定是有目的的,一般都是攻击入侵的前兆。

2、修补漏洞很重要,但如果在扫描层面进行防御,攻击者就无从知晓你是否存在漏洞。

3、扫描探测一般都无实质性通信行为,同时大量重复性动作,所以在流量监测上完全可以做到阻止防御。

WireShark黑客发现之旅(5)—扫描探测相关推荐

  1. WireShark黑客发现之旅—肉鸡邮件服务器

    聚锋实验室 · 2015/07/06 10:45 0x00 背景 肉鸡也称傀儡机,是指可以被黑客远程控制的机器.一旦成为肉鸡,就可以被攻击者随意利用,如:窃取资料.再次发起攻击.破坏等等.下面将利用W ...

  2. WireShark黑客发现之旅(7)—勒索邮件

    聚锋实验室 · 2016/04/14 10:11 作者:Mr.Right.Gongmo.K0r4dji 申明:文中提到的攻击方式仅为曝光.打击恶意网络攻击行为,切勿模仿,否则后果自负. 0x00 前言 ...

  3. WireShark教程 – 黑客发现之旅(5) – (nmap)扫描探测

    0×00 简单介绍 这一章在博主我个人看来,对于web渗透的学习意义还是非常重大的.建议大家深度学习一下各种扫描的原理. 另外这篇文章针对的各种网络扫描分析,用的是nmap,同时也有助于大家理解nma ...

  4. C#发现之旅第九讲 ASP.NET验证码技术

    C#发现之旅第九讲 ASP.NET验证码技术 袁永福 2008-5-15 系列课程说明     为了让大家更深入的了解和使用C#,我们将开始这一系列的主题为"C#发现之旅"的技术讲 ...

  5. mysql 注入 绕过防火墙_绕过阿里云防火墙继续扫描探测和SQL注入

    前言 如今的互联网,WAF泛滥的年代,实在让我等脚本小子苦恼ing,尤其是阿里云服务器的自带防护,那不是一般的叫人牙疼,十个站8个站都是阿里云.... 最近遇到几个站都是阿里云的服务器,比如:泛微e- ...

  6. C#发现之旅第一讲 C#-XML开发

    C#发现之旅第一讲 C#-XML开发 袁永福 2008-5-15 系列课程说明     为了让大家更深入的了解和使用C#,我们将开始这一系列的主题为"C#发现之旅"的技术讲座.考虑 ...

  7. MultiRow发现之旅(六)- 使用MultiRow开发票据应用(附源码)

    前文回顾 MultiRow发现之旅(一)- 高效模板设计器 MultiRow发现之旅(二)- 详解属性管理器 MultiRow发现之旅(三)- 模板管理器和Table MultiRow发现之旅(四)- ...

  8. MultiRow发现之旅(二)- 详解属性管理器

    前文回顾 MultiRow发现之旅(一)- 高效模板设计器 属性管理器 上一篇提到MultiRow模板设计器中有一个"属性管理器",这里就聊一聊这个属性管理器.在MultiRow模 ...

  9. C#发现之旅第十四讲 基于动态编译的VB.NET脚本引擎

    本章说明 在前面章节中,笔者使用了反射和动态编译技术实现了快速ORM框架,在本章中笔者将继续使用这些技术来实现一个VB.NET的脚本引擎,使得人们在开发中能实现类似MS Office那样实现VBA宏的 ...

最新文章

  1. 在Ubuntu下FFmpeg编译,支持x264和x265(HECV)
  2. java rhino js类_让Rhino JS看Java类
  3. [C++] 指向常量的指针 VS 指针类型的常量
  4. centos在yum install报错:Another app is currently holding the yum lock解决方法
  5. python解初中题_用python解一道数独小题
  6. 机器学习篇-指标:AUC
  7. 使用python和pandas进行同类群组分析
  8. android profiler 简书,(四)Android 性能优化 Energy Profiler
  9. !DOCTYPE标签的定义与用法
  10. win10 动态磁盘 linux,windows10系统下基本磁盘变成动态磁盘了如何解决
  11. vue项目打包成app
  12. python 比对两个excel表数据_如何使用python比对两个excel表中的不同?
  13. java获取当前目录_java获得当前文件路径
  14. 运算放大器:加法电路
  15. IDEA 重复执行 updating indices问题
  16. 12306 外包给阿里巴巴、IBM 等大企业做是否可行?
  17. 人工智能 | ShowMeAI资讯日报 #2022.06.25
  18. 欧拉筛法(线性筛)的学习理解
  19. FilterConfig 的作用
  20. 《极简GDP史》精髓:GDP虽有诸多局限性,但是对于社会经济发展仍然有举足轻重的作用

热门文章

  1. 1. ELK docker部署
  2. 自由修改机型名称、手机型号工具-QQ微博尾巴装X神器
  3. Levenshtein Distance编辑距离应用实践——拼写检查(Java fork/join框架实现)
  4. 「Adobe国际认证」关于 Adobe Photoshop启动“选择并遮住”工作区
  5. Itext使用 Java导出PDF
  6. 殇城的伤感心情日志分享:青春容颜,我却一笔流伤
  7. 写一函数,将两个字符串中的元音字母复制到另一个字符串,然后输出。
  8. MPU6050原始数据分析——学习笔记
  9. facenet无法检测到的三张人脸照片
  10. SmartUplod中文乱码问题(已解决)