实习过程中要做一些渗透测试的工作,这段时间侧重来学习一下红队知识。
本次学习的实践操作使用了vulhub提供的靶机,整个流程完全合法合规。请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者无关。
在获得边界域名和IP资产之后,下一步我们要思考的,就是如何探测这些边界资产开放了哪些端口和服务。
端⼝扫描是指某些别有⽤⼼的⼈发送⼀组端⼝扫描消息,试图以此侵⼊某 台计算机,并了解其提供的计算机⽹络服务类型(这些⽹络服务均与端⼝号相 关)。攻击者可以通过它了解到从 哪⾥可探寻到攻击弱点。实质上,端⼝扫描包括向每个端⼝发送消息,⼀次只发 送⼀个消息。接收到的回应类型表示是否在使⽤该端⼝并且可由此探寻弱点。
扫描器是⼀种⾃动检测远程或本地主机安全性弱点的程序,通过使⽤扫描 器你可以不留痕迹的发现远程服务器的各种TCP端⼝的分配及提供的服务和它们的软件版本!
端口(port),可以认为是设备与外界通讯交流的出口,端口(虚拟端口)的范围是从0 到 65535,主机通常通过“IP地址+端口号”来区分不同的服务的。
如果百科定义比较抽象,可以做这样的⽐喻,端⼝相当于两台计算机进程间的⼤⻔,可随便定义,其⽬的只是为了让两台计算机能找到对⽅的进程。 计算机就像⼀座⼤楼,这个⼤楼有好多⼊⼝(端⼝),进到不同的⼊⼝中就可以 找到不同的公司(进程)。如果要和远程主机A的程序通信,那么只要把数据发 向[A;端⼝]就可以实现通信了。
有⼈曾经把服务器⽐作房⼦,⽽把端⼝⽐作通向不同房间(服务)的⻔, 如果不考虑细节的话,这是⼀个不错的⽐喻。⼊侵者要占领这间房⼦,势必要破 ⻔⽽⼊(物理⼊侵另说),那么对于⼊侵者来说,了解房⼦开了⼏扇⻔,都是什 么样的⻔,⻔后⾯有什么东⻄就显得⾄关重要。
要注意,计算机广义上的“端口”可分为 虚拟端口和 物理端口
虚拟端口:计算机内部或交换机路由器内的端口,不可见例如计算机中的80端口、21端口、23端口等
物理端口:又称为接口,可见,计算机背板的RJ45网口,交换机路由器集线器等RJ45端口,电话使用RJ11插口也属于物理端口的范畴
我们今天关注的只有计算机的虚拟端口。
端口范围:0-65535
固定(通用)端口:0-1023 1024保留
动态端口:1024-65535
固定端口(0-1023):
使⽤集中式管理机制,即服从⼀个管理机构对端⼝的指派,这个机构负责 发布这些指派。由于这些端⼝紧绑于⼀些服务,所以我们会经常扫描这些端⼝来 判断对⽅ 是否开启了这些服务,如TCP的21(ftp),80(http),139 (netbios),UDP的7(echo),69(tftp)等等⼀些⼤家熟 知的端⼝;
动态端⼝(1024-49151):
这些端⼝并不被固定的捆绑于某⼀服务,操作系统将这些端⼝动态的分配给 各个进程, 同⼀进程两次分配有可能分配到不同的端⼝。不过⼀些应⽤程序并 不愿意使⽤操作系统分配的动态端⼝,他们有其⾃⼰的‘商标性’端⼝,如oicq客 户端的 4000端⼝,⽊⻢冰河的7626端⼝等都是固定⽽出名的。
根据协议,端口又可分为TCP 和 UDP
TCP端口:Transmission Control Protocol传输控制协议,TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。
UDP端口:User Datagram Protocol用户数据报协议,UDP是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP 协议基本上是IP协议与上层协议的接口。UDP协议适用端口分别运行在同一台设备上的多个应用程序。
FTP: 21
SSH: 22
Telnet: 23
SMTP: 25
Finger: 79
HTTP: 80
Kerberos: 88
POP3: 110
SUNRPC (Unix RPC): 111 (think: rpcinfo)
NetBIOS: 139
IMAP 143
LDAP: 389
HTTPS: 443
LotusNotes: 1352
Microsoft DS: 445
RSH: 514
CUPS: 631
NFS: 2049
Webrick(Ruby Webserver): 3000
RDP: 3389
Munin: 4949
SIP: 5060
PCAnywhere: 5631 (5632)
NRPE (*nix) /NSCLIENT++ (win): 5666 (evidence of Nagios server on network)
Alt-HTTP: 8080
Alt-HTTP tomcat: 9080
Another HTTP: 8000 (mezzanine in development mode for example)
Nessus HTTPS: 8834
Proxmox: 8006
Splunk: 8089 (also on 8000)
Alt HTTPS: 8443
vSphere: 9443
X11: 6000-6009 (+1 to portnum for additional displays) (see xspy, xwd, xkey for exploitation)
VNC: 5900, 5901+ (Same as X11; +1 to portnum for each user/dipslay over VNC. SPICE is usually in this range as well)
Printers: 9100, 515
Dropbox lansync: 17500
DNS: 53
XDMCP: 177 (via NSE script –script broadcast-xdmcp-discover, discover nix boxes hosting X)
OpenV*N: 1194
MSSQL Ping: 1434
SUNRPC (Unix RPC): 111 (yeah, it’s UDP, too)
SNMP 161
Network Time Protocol (NTP): 123
syslog : 514
UPNP: 1900
Isakmp - 500 (ike PSK Attack)
vxworks debug: 17185 (udp)
Citrix: 1494
WinRM: 80,5985 (HTTP), 5986 (HTTPS)
VMware Server: 8200, 902, 9084
DameWare: 6129
Java RMI - 1099, 1098
coldfusion default stand alone - 8500
IPMI UDP(623) (easy crack or auth bypass)
6002, 7002 (sentinel license monitor (reverse dir traversal, sometimes as SYSTEM))
GlassFish: 4848
easy copy -9060
IBM Web Sphere: 9060
Webmin or BackupExec: 10000
memcached: 11211
DistCC: 3632
SAP Router: 3299
MySQL: 3306
PostgreSQL: 5432
PostgreSQL 9.2: 5433
Oracle TNS Listener: 1521-1527
Oracle XDB: 2100
MSSQL: 1433
Firebird / Interbase: 3050
PervasiveSQL: 3351, 1583
DB2/AS400 8471, 9471
Sybase 5000
MongoDB: 27017,28017,27080
CouchDB: 5984
Hbase 9000
Cassandra:9160
Neo4j: 7474
Redis: 6379
Riak: 8098
BACnet/IP: UDP/47808
DNP3: TCP/20000, UDP/20000
EtherCAT: UDP/34980
Ethernet/IP: TCP/44818, UDP/2222, UDP/44818
FL-net: UDP/55000 to 55003
Foundation Fieldbus HSETCP/1089 to 1091, UDP/1089 to 1091
ICCP: TCP/102
Modbus TCP: TCP/502
OPC UA Binary: Vendor Application Specific
OPC UA Discovery Server: TCP/4840
OPC UA XML: TCP/80, TCP/443
PROFINET: TCP/34962 to 34964, UDP/34962 to 34964
ROC PLus: TCP/UDP 4000
可能会有人说这部分内容与上述内容有部分重叠,但是这里我还是坚持要开设这么一部分内容列出来,毕竟我们学习端口扫描的目的是为了更好的渗透。因此接下来这部分内容对我们来说更是重中之重,更需要我们完全掌握。
21:FTP
22:SSH
23:Telnet
25:SMTP
53:DNS(UDP)
69:TFTP(cisco,类似FTP)
79:Finger
80:HTTP
110:POP3
111:RPC 远程过程调用
113:windows 验证服务
119:NNTP 网络新闻组传输协议
135:RPC 远程过程调用
137:NetBIOS
139:windows文件和打印机共享,Unix中的samba服务
161:SNMP 简单网络管理协议
389:LDAP
443:HTTPS
445:SMB
1080:socks代理服务
2601,2604:zebra路由,默认密码zebra
5900:vnc
8080:用户www代理服务
5554:worm.Sasser病毒利用端口
7626:冰河病毒
8011:WAY2.4病毒
7306:Netspy3.0病毒
1024:YAI病毒
7001,7002:weblogic
9080:webshpere应用程序
9090:webshpere管理工具
8080:tomcat默认端口
p.s:Jboss通常占用的端口是1098,1099,4444,4445,8080,8009,8083,8093,默认为8080
3306:mysql
1433:sqlserver server
1434:sqlserver monitor
1521:oracle
5432:PostgreSQL
1158:ORACLE EMCTL
8080:Oracle XDB
2100:Oracle XDB FTP
443:SSL心脏滴血
512,513,514:Rsync未授权访问
873:Rsync未授权访问
2375:docker remote api漏洞
5984:CouchDB
6379:redis未授权
7001,7002:WebLogic 默认弱口令,反序列化
9200,9300:elasticsearch未授权访问
11211:memcache未授权访问
27017,27018:Mongodb 未授权访问
28017:mongodb统计页面
50000:SAP命令执行
50070,50030:hadoop默认端口未授权访问
废话少说,我们先研究一下对于单个目标(ip、域名)的端口扫描。主要学习一下端口扫描常用工具的使用(以nmap为主)
安装:到https://nmap.org 下载安装即可。
更新:
1.更新nmap 1-1.在windows安装目录下找到nmap-update.exe 基于SVN更新 1-2.手动重
新安装
2.更新nmap-script-database
nmap --script-updatedb
简单扫描
nmap <your ip>
nmap默认发送⼀个arp的ping数据包,来探测⽬标主机在1- 10000范围内所开放的端⼝。
指定端口扫描
探测内置的 1000 个常见端口,如果我们想要扫描指定端口范围,需要使用-p
参数:
nmap -p 1-65535 localhost
示例命令指定了 1 到 65535 全端口,扫描速度会很慢,可以指定若干端口,比如:
nmap -p 80,443 <ip>
如果需要输出详细结果 使用 -vv参数
nmap -p <port> -vv <your ip> 设置详细输出结果。
nmap ping扫描
nmap可以利⽤类似windows/linux系统下的ping⽅式进⾏扫描。
命令语法
nmap -sP 5.182.217.100
nmap路由跟踪
路由器跟踪功能,能够帮⽹络管理员了解⽹络通⾏情况,同时也是 ⽹络管理⼈员很好的辅助⼯具。通过路由器跟踪可以轻松的查处从我们电脑 所在地到⽬标地之间所经常的⽹络节点,并可以看到通过各个节点所花费的时间.
nmap --traceroute <target ip>
保存结果到xml文件
nmap <ip> -oX test1.xml
-sP/-sn | 不进行端口扫描 -p指定端口扫描 |
---|---|
-sT | TCP全链接扫描,建立完整三次握手过程 |
-sS | SYN半连接扫描,只进行三次握手的前两次 |
-O | 显示服务的详细版本 |
-b | 显示banner信息 |
-T0~-T5 | 时序选项 |
1-sS/sT/sA/sW/sM:指定使⽤ TCP SYN/Connect()/ACK/Window/Maimon scans的⽅式探测对方主机
2 -sU: 指定使⽤UDP扫描⽅式确定⽬标主机的UDP端⼝状况。
3 -sN/sF/sX: 指定使⽤TCP Null, FIN, and Xmas scans秘密扫描⽅式来协助探测对⽅的主机
4 --scanflags <flags>: 定制TCP包的flags。
5 -sI <zombiehost[:probeport]>: 指定使⽤idle scan⽅式来扫描⽬标主机
6 -sY/sZ: 使⽤SCTP INIT/COOKIE-ECHO来扫描SCTP协议端⼝的开放的情况。
7 -sO: 使⽤IP protocol 扫描确定⽬标机⽀持的协议类型。
8 -b <FTP relay host>: 使⽤FTP bounce scan扫描⽅式
实操使用 vulhub的 billu_b0x靶机。 安装过程网上很多,不再赘述。
先使用常规手段找到靶机ip地址为192.168.160.146 发现开放了 22 和80端口。接下来利用该靶机测试各种端口扫描方式
1.TCP SYN扫描
SYN扫描,是连接使用频率最高的扫描选项:它不打开一个完全的TCP连接,执行得很快,效率高(一个完整的tcp连接需要3次握手,而-sS选项不需要3次握手(因为它从来不完成RCP))具有默认的、执行快、不易被注意到的特点。
nmap -sS 125.64.43.0-255
2.-sT (TCP connect扫描)
这是最基本的TCP扫描。操作系统提供的connect()系统调⽤,⽤来与 每⼀个感兴趣的⽬标计算机的端⼝进⾏连接。如果端⼝处于侦听状态,那么 connect()就能成功。否则,这个端⼝是不能⽤的,即没有提供服务。这个技术 的⼀个最⼤的优点是,你不需要任何权限。系统中的任何⽤户都有权利使⽤这个 调⽤。
nmap -sT 125.64.43.0-255
3.-sU (UDP扫描)
nmap -sU --host-timeout 1 125.64.43.0-255
4.-sA (TCP ACK扫描)
扫描主机向⽬标主机发送ACK数据包。根据返回的RST数据包有两种 ⽅法可以得到端⼝的信息。⽅法⼀是: 若返回的RST数据包的TTL值⼩于或等于 64,则端⼝开放,反之端⼝关闭。
Nmap -sA参数是发送tcp的ack包进行探测,可以探测主机是否存活:
5.-sW (TCP窗口扫描)
6.-sN;-sF-sX (TCP null, FIN, and Xmas)
Xmas与Null扫描
Xmas-Tree扫描 通过发送带有下列标志位的tcp数据包
1 URG:指示数据时紧急数据,应⽴即处理。
2 PSH:强制将数据压⼊缓冲区。
3 FIN:在结束TCP会话时使⽤。
当然在正常情况下,三个标志位不能被同时设置。但在此种扫描中可以⽤来 判断哪些端⼝关闭还是开放。将TCP数据包中的ACK、FIN、 RST、SYN、URG、PSH标志位置1后发送给⽬标主机。在⽬标端⼝开放的情况 下,⽬标主机将不返回任何信息。
NULL扫描原理与XMAS扫描的类似。
FIN扫描
**sF **也是tcp的扫描一种,发送一个FIN标志的数据包FIN scan(sF)
有时候TcpSYN扫描不是最佳的扫描模式,因为有防火墙的存在.目标主机有时候可能有IDS和IPS系统的存在,防火墙会阻止掉SYN数据包。发送一个设置了FIN标志的数据包并不需要完成TCP的握手.
nmap -sN 125.64.43.0-254
nmap -sF 125.64.43.0-254
nmap -sX 125.64.43.0-254
-sM (TCP Maimon扫描)
Maimon 扫描的名字来源于它的发现者,Uriel Maimon。他在Phrack杂志问题#49(1996年11月)中描述的技术。这种技术与NULL,FIN和Xmas扫描类似,唯一的不同之处在于探针是FIN/ ACK。
-sO (IP协议扫描)
p.s:这种方法速度挺慢的
nmap -sO --data-length 100 <IP>
-sI (Idlescan,空闲扫描)
对目标进行真正的TCP端口盲扫描
nmap --script ipidseq 125.64.43.0-254
--scanflflags(定制的TCP扫描)
nmap --scanflags URGACK 125.64.43.0-254
nmap -sS --scanflags URGACK 125.64.43.0-254
**-b (FTP弹跳扫描)**参数格式:
nmap <username>:<password>@<server IP>:<port>
server是指FTP服务的名字或IP地址。如果FTP服务器允许匿名用户登录的话,则可以省略username:password。另外,当FTP服务使用默认端口21时,也可以省略端口号(以及前面的冒号)。
如:利用ftp服务器192.168.1.5对靶机192.168.1.7的21,22,80端口进行扫描
nmap -p 21,22,80 -b 192.168.1.5 -Pn 192.168.1.7 -v
以下还有几种端口扫描的姿势:
-p (只扫描指定的端口) 当扫描TCP端口又扫描UDP端口时,可以在端口号前加上T:或者U:指定协议
-F (快速(有限的端口)扫描)
-r (按随机顺序扫描端口)
-Pn (不能ping 跳过主机发现)
当我们明确的知道了主机的存活,可以使用-Pn,跳过主机发现,减少扫描时间
open(开放的)
closed(关闭的) 关闭的端口对于Nmap也是可访问的,但没有应用程序在其上监听。
open|fifiltered(开放或者被过滤的)
closed|fifiltered(关闭或者被过滤的)
一般扫描端口的时候常常需要同时探测网站服务,版本,搜集尽量更全的信息来
-sV (版本探测)
打开版本探测。 也可以用-A同时打开操作系统探测和版本探测。
nmap -sV www.yourdomains.com
--allports (不为版本探测排除任何端口)
默认情况下,Nmap版本探测会跳过9100 TCP端口,因为一些打印机简单地打印送到该端口的 任何数
据,这回导致数十页HTTP get请求,二进制 SSL会话请求等等被打印出来。这一行为可以通过修改或删
除nmap-service-probes 中的Exclude指示符改变, 您也可以不理会任何Exclude指示符,指定--
allports扫描所有端口
nmap -sV --allports www.baidu.com
--version-intensity (设置 版本扫描强度)
当进行版本扫描(-sV)时,nmap发送一系列探测报文 ,每个报文都被赋予一个1到9之间的值。 被赋予
较低值的探测报文对大范围的常见服务有效,而被赋予较高值的报文 一般没什么用。强度水平说明了应
该使用哪些探测报文。数值越高, 服务越有可能被正确识别。 然而,高强度扫描花更多时间。强度值
必须在0和9之间。 默认是7。当探测报文通过nmap-service-probes ports指示符 注册到目标端口时,无论什么强度水平,探测报文都会被尝试。这保证了DNS 探测将永远在任何开放的53端口尝试, SSL探测将在443端口尝试,等等。
--version-light (打开轻量级模式)
这是 --version-intensity 2的方便的别名。轻量级模式使 版本扫描快许多,但它识别服务的可能性也略微小一点。
--version-all (尝试每个探测)
--version-intensity 9的别名, 保证对每个端口尝试每个探测报文。
-sR (RPC扫描)
这种方法和许多端口扫描方法联合使用。 它对所有被发现开放的TCP/UDP端口执行SunRPC程序NULL
命令,来试图 确定它们是否RPC端口,如果是, 是什么程序和版本号。因此您可以有效地获得和
rpcinfo -p一样的信息, 即使目标的端口映射在防火墙后面(或者被TCP包装器保护)。Decoys目前不能
和RPC scan一起工作。 这作为版本扫描(-sV)的一部分自动打开。 由于版本探测包括它并且全面得多,-
sR很少被需要
-O (启用操作系统检测)
也可以使用**-A**来同时启用操作系统检测和版本检测。
--osscan-limit (针对指定的目标进行操作系统检测)
如果发现一个打开和关闭的TCP端口时,操作系统检测会更有效。 采用这个选项,Nmap只对满足这个
条件的主机进行操作系统检测,这样可以 节约时间,特别在使用-P0扫描多个主机时。这个选项仅在使
用 -O或-A 进行操作系统检测时起作用。
--osscan-guess; --fuzzy (推测操作系统检测结果)
当Nmap无法确定所检测的操作系统时,会尽可能地提供最相近的匹配,Nmap默认 进行这种匹配,使
用上述任一个选项使得Nmap的推测更加有效。
Zmap的基 本功能是扫描发现主机的开放端⼝。
可以使⽤以下命令进⾏指定端⼝扫描:
zmap -p 135 -o results.csv 192.168.188.0/24
Zmap采⽤了⽆状态的扫描技术,没有进⾏完整的TCP三次握⼿,因此扫描速度极⼤提升。
Masscan号称是最快的互联⽹端⼝扫描器,最快可以在六分钟内扫遍互联⽹。可以使⽤以下命令做简 单的端⼝扫描:
masscan -p1-1000 192.168.188.149 --rate=10000
可以看到没有扫出开放的22端口 准确性不如nmap 就图一乐?
单端⼝扫描
扫描443端⼝的B类⼦⽹
masscan 10.11.0.0/16 -p 443
多端⼝扫描
扫描80或443端⼝的B类⼦⽹
masscan 10.11.0.0/16 -p80,443
扫描⼀系列端⼝
扫描22到25端⼝的B类⼦⽹
masscan 10.11.0.0/16 -p22-25
结果保存
您可以使⽤标准的Unix重定向器将输出发送到⽂件:
1 masscan 10.11.0.0/16 --top-ports 100 > results.txt
除此之外,您还具有以下输出选项:
1 -oX filename:输出到filename的XML。
2 -oG filename:输出到filename在的grepable格式。
使⽤Powershell判断⼀个端⼝是否开放?,可以使⽤如下代码
$tcp = new-object Net.Sockets.TcpClient
$tcp.Connect("<ip>",80)
如果端⼝开放,其结果为空,如果不开放,将会报错,测试如下:
netcat netcat是⽹络⼯具中的瑞⼠军⼑,它能通过TCP和UDP在⽹络中读写数据。通过与其他⼯具结合和重 定向,你可以在脚本中以多种⽅式使⽤它,利⽤nc也可以完成简单的端⼝扫描。使⽤下⾯的命令查看 端⼝是否开启:
nc -vv <ip> 80
这种方式可以隐藏自身 IP,防止被目标所关注,溯源到自身,还可以在不安装任何端口扫描工具的情况下,了解目标的端口开放情况。
https://hackertarget.com/nmap-online-port-scanner/
http://www.ipfingerprints.com/portscan.php
https://spiderip.com/online-port-scan.php
实现对于端口的批量检测,我们主要使用nmap工具
如果是几个不连续的IP,那么直接在 nmap 的参数中以空格将多个 IP 隔开就好,比如:
nmap -p 53 114.114.114.114 8.8.8.8
如果是几个连续的 IP,命令格式如下:
nmap -p 53 114.114.114.114,115,116,117,118
如果扫描的 IP 范围是某个子网,通过指定 CIDR IP 范围来对目标 IP 段进行扫描,例如:
nmap -p 53 114.114.114.0/28
114.114.114.0/28 的意思是 114.114.114.1-114.114.114.8 这几个 IP,也可以使用下面的格式:
nmap -p 53 114.114.114.1-114.114.114.8
如果是扫描一个 C 段,还可以使用通配符,如下:
nmap -p 53 114.114.114.*
如果不想扫码某个 IP,可以使用参数--exclude
排除该 IP,如:
nmap -p53 114.114.114.* –exclude 114.114.114.1
对于目标过多的情况下,存在 IP 、域名时,如何使用 nmap 一条命令扫描所有资产?nmap 支持指定目标文件来扫码文件中保存的资产列表,使用参数-iL
指定目标文件名,如下:
nmap -p 80,443 -iL list.txt
保存结果有几种格式,比如-oN
表示将结果保存在文本文件中,-oX
表示将结果保存在 XML 文件中,下面以-oN
参数为例, 将上面的结果保存在文件中:
nmap -p 80,443 -iL list.txt -oN result.txt
有的时候不需要针对 IP 地址进行反解析,因为多一步就要多一些时间消耗,禁用 DNS 反解析可以提升扫描速度,使用方式增加-n
参数即可:
nmap -p 53 -n 114.114.114.114
端口扫描 方式比较简单,变化也不多。网上看到的文章内容要么过于简略,要么过于杂乱。写这篇文章的目的主要就是为了 较为完整,条理清晰地总结一下渗透测试中端口扫描的各种方法,为读者提供一本端口扫描的小百科,方便端口扫描工作。毕竟渗透测试中每一流程环环相扣,作为渗透测试中不可或缺的一环,扎实的学好端口扫描,在我看来是每个渗透测试工作者都应该做到的。
https://www.cnblogs.com/Nedved/p/10472420.html
https://www.sohu.com/a/487267610_121124365
https://blog.csdn.net/weixin_43838889/article/details/122876220
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv