HiddenGate靶场学习笔记

前言

本篇内容聚焦 CTF 实战中高频出现的渗透流程与技术要点,从基础的端口和目录扫描切入,逐步深入讲解 SQL 联合注入、NC 提权、Linux 文件备份漏洞利用、端口代理、SSH 私钥爆破及 Pwn 栈溢出攻击等核心技法。

正文

1、端口扫描与目录扫描

对靶场全端口扫描:

bash 复制代码
nmap -p- 192.168.31.102

扫出一个25565端口:

对扫描出来的端口地址,利用Gobuster 暴力破解工具,扫描根目录 /下的所有.php的网页:

bash 复制代码
gobuster dir -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt -u http://192.168.31.102:25565/ -x php
部分 含义 通俗解释
dir 子命令 指定 Gobuster 的工作模式为「目录 / 文件扫描」(dir = directory)
-w 字典文件参数 w = wordlist(字典),后面跟的是 "密码本" 路径,工具会按这个文件里的内容逐个尝试
/usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt 字典文件路径 这是 Kali Linux 系统自带的目录名字典文件(中等规模,包含常见的网站目录名,比如 admin、api、uploads 等)
-u 目标 URL 参数 u = URL,指定要扫描的目标地址
http://192.168.31.102:25565/ 目标地址 要扫描的服务器 IP 是 192.168.31.102,端口是 25565(不是默认的 80 端口),扫描根目录 /
-x 文件扩展名参数 x = extensions(扩展名),指定要尝试的文件后缀
php 扩展名 工具会在字典里的每个名字后加 .php 尝试,比如字典里有 admin,就会试 admin.php

要注意的是,要提前装好 seclists字典:

等待一会儿,出扫描结果:

可以看到扫出2个目录,访问http://192.168.31.102:25565/mine能看到一个登录界面:

先用brup对登录界面抓包:

2、SQL联合注入

把上图的请求包代码,写到a.txt里,用sqlmap对可能存在的注入点,进行命令注入:

部分 含义 通俗解释
-l 从文件加载目标参数 l = list(列表),指定从文本文件中读取待测试的目标 URL / 请求
a.txt 目标列表文件 你本地的a.txt文件里,需要提前写好要测试的目标(比如http://192.168.31.102:25565/index.php?id=1这类带参数的 URL)
--batch 全自动模式 禁用交互式提问,所有选项都用默认值自动执行(不用手动按回车确认),适合批量扫描 / 无人值守
--dbs 列出数据库名 核心功能参数:检测到 SQL 注入后,自动枚举目标数据库服务器上所有的数据库名称(比如 mysql、information_schema、test 等)

发现存在注入点,在用户名输入框中编写注入语句:

sql 复制代码
admin' or 1=1-- -
部分 作用
'admin' 闭合前面的单引号,让语法合法
or 1=1 核心攻击点1=1 是永远成立的条件,or 表示 "或者"------ 只要满足一个条件就成立
-- - SQL 的注释符,把后面的 ' AND 密码='xxx' 全部注释掉(相当于作废)

成功进入网站后台:

进去发现右下角有个repair模块,但是提示当前用户不是管理员权限。

回到 Kali里面,伪造一条 "admin 用户名 + 密码为1的MD5值" 的记录:

bash 复制代码
echo -n '1' | md5sum

在用户名输入框里,利用 UNION 联合查询注入1,admin,密码为1的MD5值3条信息:

sql 复制代码
' UNION SELECT 1,'admin','c4ca4238a0b923820dcc509a6f75849b' -- -

在密码输入框里,输入1,点击登录后,再进入repair模块,是一个新的命令执行窗口界面,就可以拿flag。

3、NC获取低级用户权限

再新的命令执行窗口界面,执行语句:

再回到kali里,就可拿到最低www-data用户权限了:

这里我在调整Bash交互界面的格式,看不懂的可以参考我写的MAZESEC-X1靶场学习笔记[1](#1)

bash 复制代码
/usr/bin/script -qc /bin/bash /dev/null
stty raw -echo;fg
reset
xterm

4、Linux文件备份漏洞利用

然后看一看可执行的sudo权限操作:

创建一个 " 符号链接(软链接)"(简单说就是给 /home/xiaoyuega 这个文件 / 目录,在当前目录下创建一个名叫 aaa 的 "快捷方式",并且会输出创建的详细信息):

bash 复制代码
cd /opt/minecraft_server
ln -sv /home/xiaoyuega aaa
部分 含义 通俗解释
ln 命令主体 Linux 系统中用于创建 "链接" 的核心命令(link 的缩写),类似 Windows 的快捷方式
-s 符号链接参数 s = symbolic(符号的),指定创建软链接(而非硬链接),这是最常用的链接类型
-v 详细输出参数 v = verbose(详细的),执行命令时会输出 "创建了哪个链接指向哪个目标" 的提示,方便确认是否创建成功
/home/xiaoyuega 源文件 / 目录(目标) 你要创建快捷方式的 "原对象",可以是文件或目录,这里是绝对路径(从根目录开始的完整路径)
aaa 链接文件名(快捷方式) 要创建的软链接名称,保存在当前工作目录 下(这里是 /opt/minecraft_server/

PS:执行场景与效果

  • 当前环境背景?
    执行用户:www-data(Web 服务的默认用户,常见于 Apache/Nginx)
    当前目录:/opt/minecraft_server/(我的世界服务器目录)
    操作目标:给 /home/xiaoyuega 这个路径创建名为 aaa 的软链接
  • 执行后会发生什么?
    /opt/minecraft_server/ 目录下,会生成一个名为 aaa 的软链接文件;
    访问 /opt/minecraft_server/aaa 就等同于访问 /home/xiaoyuega(比如 ls aaa 就是看 /home/xiaoyuega 里的内容);
    因为加了 -v 参数,终端会输出类似这样的提示:'aaa' -> '/home/xiaoyuega'(告诉你链接创建成功,以及指向关系)。
  • 软链接的核心特点(为什么要用?)
    跨目录便捷访问:不用每次输入长长的 /home/xiaoyuega 路径,直接输 aaa 就行;
    不占额外空间:软链接只是一个 "指向标记",不是复制文件 / 目录,占用磁盘空间可以忽略;
    修改源路径不影响链接:如果 /home/xiaoyuega 里的内容变了,访问 aaa 看到的内容也会同步变。
  • 补充说明(新手易踩坑)
    如果 /home/xiaoyuega 不存在,命令会报错(提示 "没有那个文件或目录");
    如果当前目录已有名为 aaa 的文件 / 目录,命令会报错(需先删除旧的 aaa,或加 -f 参数强制覆盖);
  • 软链接和硬链接的区别?
    -s 是软链接(常用),不加 -s 是硬链接(极少用,只能链接文件,不能跨分区)。

最后sudo执行备份操作,拿到flag:

5、端口代理

检查一下开放的端口:

bash 复制代码
ss -lntup

想办法把靶场22本地端口代理出去,让攻击机kali能够访问到靶机。在kali上配置:

bash 复制代码
tldr socat

然后在靶机里输入:

bash 复制代码
cd /tmp
socat TCP-LISTEN:2222,fork TCP4:127.0.0.1:22 &

通过 ss -lntup监控端口转发情况:

6、SSH私钥爆破

尝试读取.ssh目录下的id_rsa文件,另存为id1,然后想办法破解id1这个文件,

bash 复制代码
cd - #返回前一个目录
ls
cat id_rsa #全复制出来,粘贴到id1里
ssh2john id1 > tmp  #格式转换一下,重命名未tmp

这里我用大字典对tmp文件(用 ssh2john 转换后的哈希文件,破解用)爆破,推荐替换字典(任选其一):

bash 复制代码
# 方案1-1:最常用的弱密码字典(小而快,覆盖90%弱密码)
john tmp --wordlist=/usr/share/seclists/Passwords/Common-Credentials/10-million-password-list-top-100000.txt

# 方案1-2:综合型密码字典(中等规模,破解成功率更高)
john tmp --wordlist=/usr/share/seclists/Passwords/Leaked-Databases/rockyou.txt.tar.gz

# 方案1-3:Clarkson大学整理的密码字典(和xato-net同级别)
john tmp --wordlist=/usr/share/seclists/Passwords/clarkson-university-82.txt

拿到密钥信息:fish ,通过命令:

bash 复制代码
ssh xiaoyuega@192.168.31.102 -i id1 -p 2222

登录成功:

7、Pwn攻击

里面有个tmp文件,把id1导入到mobaxterm上,远程登录下载下来:

F5反编译一下,读下代码逻辑:

鼠标双击进入__int64 process_command()函数,发现flag产生逻辑:

那就尝试栈溢出攻击,生成一串长度为 300 的、唯一且可回溯的字符模式(pattern),用于在 Pwn / 漏洞调试中精准计算栈溢出的偏移量:

bash 复制代码
msf-pattern_create -l 300


计算出栈溢出是72,要偏移到地址401433上,对应就是hahaha函数。

编写payload就完事了:

参考文献


  1. 文献1:MAZESEC-X1靶场学习笔记 ↩︎
相关推荐
闵孚龙1 小时前
Claude Code CLAUDE.md 用户指令覆盖层全解析:AI Agent 记忆系统、上下文工程、规则分层、团队协作与安全治理
人工智能·安全
程序猿编码1 小时前
并发SSH口令审计器:多进程协作的安全检测工具设计与原理(C/C++代码实现)
c语言·安全·ssh
YIN_尹1 小时前
关于论文《FLUSH+RELOAD:一种高分辨率、低噪声的L3缓存侧信道攻击》的理解
安全·缓存·系统安全·缓存侧信道攻击
云游牧者2 小时前
K8S安全框架深度解析-从认证到RBAC实战完全指南
安全·容器·kubernetes·rbac·kubeconfig·rolebinding
智者知已应修善业2 小时前
【74ls138+74ls00传送带故障报警】2024-1-9
驱动开发·经验分享·笔记·硬件架构·硬件工程
ljt27249606612 小时前
Vue笔记(四)--组件基础
前端·vue.js·笔记
sheeta19982 小时前
LeetCode 每日一题笔记 日期:2026.05.17 题目:1306. 跳跃游戏 III
笔记·leetcode
会编程的土豆2 小时前
Gin 核心概念 & 前后端交互笔记
笔记·交互·gin
sealaugh322 小时前
react native(学习笔记第五课) 英语打卡微应用(4)- frontend的列表展示
笔记·学习·react native