漏洞复现

背景

近年来网络安全问题在日常生活工作中显得愈发重要,随着科技的发展和越来越多新技术的出现,更多的安全漏洞也会随之出现,当新安全漏洞出现时,一些网站或服务器往往会被黑客攻击或利用,当网站维护者紧急修复网站后,有些漏洞会产生连带漏洞,如果不能及时搞明白漏洞原理则会产生更大的损失。

定义

漏洞复现是通过已公布漏洞的POC(检测)模拟恶意黑客的攻击方法,来实现对于漏洞的利用与掌握。定期漏洞复现可知道漏洞的利用方法及防范的措施,能有效提高安全水平,及时更新并检测网站,避免黑客入侵,保护网站安全。

目的

漏洞复现一般有两种方式:

一种是简单的搭建环境,然后拿公开exp(检测与利用代码的结合)打一次:这样能在以后你看到类似有漏洞的程序的时候能直觉 看出来,而且在实战的时候避开一些坑,提高熟练度手速。

另一种是对程序进行代码动态调试,代码审计,配合exp poc分析漏洞成因。

当渗透测试人员在对网站进行渗透测试时,如果前期进行过某些漏洞的复现,而恰好目标网站存在这些漏洞,则会事半功倍,用更短的时间取得网站的数据信息或权限,而不是再查阅资料,准备漏洞环境,进行漏洞复现,这样会让渗透测试的效率变得低下或超过规定测试时间。

种类

一般来讲,漏洞复现主要是复现通用漏洞。什么是通用漏洞?通用漏洞指的是某一类的网站或应用的漏洞, 比如各种CMS(内容管理系统)、通用组件等漏洞。比如我们所使用的Windows操作系统和Linux系统,那他们所发生、存在的漏洞就叫通用漏洞。通用漏洞的影响范围通常都比较广。

  • CMS漏洞
  • OA漏洞
  • 操作系统漏洞
  • 开发框架漏洞

未授权访问漏洞

未授权访问

未授权访问漏洞是一个在企业内部非常常见的问题。未授权访问漏洞可以理解为需要安全配置或权限 认证的地址、授权页面存在缺陷导致其他用户可以直接访问从而引发重要权限可被操作、数据库或网站目录等敏感信息泄露。常见于服务端口,接口无限制开放,网页功能通过链接无限制用户访问等。

越权

通俗的理解为用户可以操作超出自己管理权限范围的功能,从而进行非一般用户可以操作的行为。越权一般可以分为:垂直越权,水平越权。而在非用户登陆模式下,任意用户访问特定地址或链接均可以访问到需要用户身份后才可以访问到的功能。越权也可以看为安全配置不当导致的未授权访问。

原理

未授权访问是系统对用户限制不全,或者无限制,可以让任意用户或者限制访问用户,可以访问到内部敏感信息,导致的信息泄露,以及系统功能的执行。

危害

未授权访问通常是会泄露用户信息,系统信息。某些服务和系统中,未授权访问还可以执行系统命令,操作系统文件,导致系统的整体安全遭到破坏。

常见的未授权

Active MQ 未授权访问
Atlassian Crowd 未授权访问
CouchDB 未授权访问
Docker 未授权访问
Dubbo 未授权访问
Druid 未授权访问
Elasticsearch 未授权访问
FTP 未授权访问
Hadoop 未授权访问
JBoss 未授权访问
Jenkins 未授权访问
Jupyter Notebook 未授权访问
Kibana 未授权访问
Kubernetes Api Server 未授权访问
LDAP 未授权访问
MongoDB 未授权访问
Memcached 未授权访问
NFS 未授权访问
Rsync 未授权访问
Redis 未授权访问
RabbitMQ 未授权访问
Solr 未授权访问
Spring Boot Actuator 未授权访问
Spark 未授权访问
VNC 未授权访问
Weblogic 未授权访问
ZooKeeper 未授权访问
Zabbix 未授权访问

SpringBoot Actuator未授权

  1. Spring和SpringBoot

Spring 是java web开发里非常常见的开发框架,SpringBoot不是Spring官方的框架模式,而是一个团队在Spring4.0版本上二次开发并开源公布出来的。简而言之,SpringBoot就是一个轻量级,简化配置和开发流程的web整合框架。

  1. Actuator

Actuator 是 Springboot 提供的用来对应用系统进行自省和监控的功能模块,借助于 Actuator ,开发 者可以很方便地对应用系统的某些监控指标进行查看、统计等。在 Actuator 启用的情况下,如果没有 做好相关权限控制,非法用户可通过访问默认的执行器端点(endpoints)来获取应用系统中的监控信 息。

  1. 常见未授权端点

Spring Boot 1.x 版本默认内置路由的根路径以/开始,2.x则统一以 /actuator 开始

路径 描述
/autoconfig 提供了一份自动配置报告,记录哪些自动配置条件通过了,哪些没通过
/beans 描述应用程序上下文里全部的Bean,以及它们的关系
/env 获取全部环境属性
/configprops 描述配置属性(包含默认值)如何注入Bean
/dump 获取线程活动的快照
/health 报告应用程序的健康指标,这些值由HealthIndicator的实现类提供
/info 获取应用程序的定制信息,这些信息由info打头的属性提供
/mappings 描述全部的URI路径,以及它们和控制器(包含Actuator端点)的映射关系
/metrics 报告各种应用程序度量信息,比如内存用量和HTTP请求计数
/shutdown 关闭应用程序,要求endpoints.shutdown.enabled设置为true
/trace 提供基本的HTTP请求跟踪信息(时间戳、HTTP头等)
  1. 网站特征

小绿叶 、404报错

image-20230409114413802

image-20230409114408652

批量识别

在收集了目标站点之后,可以通过脚本进行批量识别有哪些站点是存在未授权端点

1
https://github.com/rabbitmask/SB-Actuator

image-20230409125902286

  1. 未授权获取敏感信息

由于 actuator 会监控站点 mysql、mangodb 之类的数据库服务,所以通过监控信息有时可以拿下 mysql、mangodb 数据库账号密码;这个主要通过/env 路径获取这些服务的配置信息。

image-20230409114600401

docker API未授权

  1. API

API这个词在维基百科里解释是这样的:应用程序接口(英语:application programming interface, 缩写作 API),又称为应用编程接口,就是软件系统不同组成部分衔接的约定。看完这个解释估计你 还是有点懵逼,不过没关系,下面我们会用通俗的语言来介绍什么是API。 我们每个人都有手机,当手机没电了我们肯定会找固定的充电器和充电线来充电。苹果的用苹果,安 卓的用安卓。但是你肯定不会用安卓的线去充苹果的手机,这道理很简单,因为你的苹果手机是 Lightning 接口,安卓的是type-c接口。你要想充电或者对你手机传输数据,那么必须买合适的充电线 和数据线, 这是对于接口最简单易懂的认识。 类似的,程序的接口也是如此。每个程序都有固定对外的标准接口,这个接口由开发这个程序的开发 者定义的,你要想连接它们,那么就应该遵循它们的接口标准。

  1. docker API

docker官方主要有三大对外api:

Docker Registry API
这个是docker镜像仓库的api,通过操作这套API,你可以自由的自动化、程序化的管理你的镜像仓库。

Docker Hub API
Docker Hub API是用户管理操作的API,docker hub是使用校验和公共 namespaces 的方式来存储账户 信息、认证账户、进行账户授权。API同时也允许操作相关的用户仓库和 library 仓库。

Docker Remote API
这套API用于控制主机 Docker 服务端的 API,等价于 docker命令行客户端。 有了它,你能远程操作 docker容器,更重要的是你可以通过程序自动化运维docker进程。

  1. 漏洞成因

在Docker的部署文档中,由于某些不安全的配置,导致2375管理端口对外,该未授权访问漏洞是因为 Docker API可以执行Docker命令,该接口是目的是取代Docker命令界面,通过URL操作Docker。

Swagger UI未授权

Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。相关的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。Swagger-UI会根据开发人员在代码中的设置来自动生成API 说明文档。

成因

Swagger未开启页面访问限制,Swagger未开启严格的Authorize认证。

危害

若存在相关的配置缺陷,攻击者可以未授权翻查Swagger接口文档,得到系统功能API接口的详细参数,再构造参数发包,通过回显获取系统大量的敏感信息。

Swagger UI文档

未授权测试

访问/swagger-ui/index.html即可查看生成的API接口文档。