vulnstack1靶场笔记
vulnstack1
环境搭建
1 | |
win7靶机开启phpstudy

windows2008开启redis服务

信息收集
先用kali扫描网段
1 | |
找到存活主机ip:192.168.89.135
进行端口扫描
1 | |
- 跳过 ping 探测 (
-Pn) - 直接扫描 - 全端口扫描(默认扫描 1000 个常用端口)
- 执行默认安全脚本 (
-sC) - 深度探测服务版本 (
-sV) - 以最快速度运行 (
-T5)
看到80和3306端口开放
webshell打口子
来看一下他的web网站http://192.168.89.143/
访问url打开后发现是phpstudy探针页面,可以看到网站绝对路径

现在来爆破一下看看有没有网站后台
在一开始就扫到了phpmyadmin登陆页面,我们先来访问一下
root/root弱口令直接登录

这里我们关注到网站使用的mysql和php版本都是比较低的,还有一个特别的数据库
利用phpmyadmin后台全局日志文件写入getshell
读写权限+web绝对路径,修改日志文件为webshell
(1) 开启日志记录:
1 | |
(2) 指定日志文件
1 | |
(3) 写入执行代码:
1 | |
使用蚁剑连接一下

此时连接成功实际上是获得了代码执行的权限,获得权限的高低与实际运行该进程的用户有关
一般运行Apache/Nginx (Linux)的是www-data低权限用户,但是在这里可以看到whoami的回显是域管理员
反弹shell给cs
先生成一个payload

把他放在蚁剑终端执行一下
看到成功在cs上线

执行systeminfo命令获取本机信息
发现还有另一张网卡,ip地址为192.168.52.143,安装了四个修补程序

win7提权
使用内核漏洞提权

利用MS14-058漏洞进行提权
这里直接利用脚本提权需要我们提前在cs里加载一些漏洞利用脚本,比较常用的是ElevateKit
https://github.com/rsmudge/ElevateKit
选中上线主机右键 access->elevate->MS14-058
执行脚本完成后发现提权成功,获得system权限

利用屏幕截图查看桌面文件,没有发现什么信息
使用命令 ipconfig /all

发现另一张网卡,判断为内网,DNS服务器地址为192.168.52.138,猜测是域控
域内信息收集
一些可参考的方法
1 | |
比较重要的还有查看防火墙和进程,识别并关闭杀软进程
有关域信息收集需要在域用户权限下执行命令,system身份执行域相关命令会报错
net config Workstation

发现目前域中主机有三台
尝试匿名枚举域内用户
1 | |
该命令只能枚举出机器用户

查找域控机器名
1 | |
域控主机名为OWA

探测内网存活主机和常见开放端口
1 | |
1 | |
获取用户凭据
利用我们提权得到的system账户读取内存密码
1 | |

在view->credential中可以看到用户和密码信息
好像只有Administrator是域用户

攻击域控
之前我们已经得到域控地址是192.168.52.138,同时发现开放了445端口,可以运行SMB服务
这里我想用的是利用psexec夺取域控权限
psexec是微软官方提供的windows远程控制工具,原理是通过SMB连接到服务端的Admin$共享释放二进制文件
需要利用域管理员凭据登录控制远程主机
现在尝试jump
这里需要提前配置一个SMB监听器
view->tragets

上线成功

建立socks代理隧道
拿下一台内网主机后建立sock5代理

记住这个端口号

在kali利用proxychain工具通过此隧道连接
先修改配置文件 vim /etc/proxychains4.conf ,加入服务器ip和port
测试proxychains 是否能正常工作
1 | |
在 Kali 上通过代理使用其他工具
1 | |
利用redis服务实现持久化
域控上是开启着redis服务的(搭建环境时手动开启)
Windows 的启动文件夹中的程序会在用户登录时自动执行。redis服务一般拥有较高权限,攻击者通过 Redis 的 CONFIG SET dir 将 RDB 持久化文件写入启动目录,再SAVE触发写入,将恶意命令保存为 .bat 文件
先生成一个payload

1 | |
需要先进入到redis目录
1 | |
在 redis-cli 交互环境中执行,在cs中需要用管道传入redis-cli.exe执行
1 | |
是因为当前处于实验环境想测试运行,实际环境中拿到域控机器权限可以直接导出krbgt用户hash制作黄金票据实现权限持久化
知识汇总
phpmyadmin后台getshell
https://www.cnblogs.com/liliyuanshangcao/p/13815242.html#_label1_0
上传webshell获取代码执行权限
在渗透测试中,我们常说 WebShell 是一个“口子”,但从技术底层来看,它实际上是利用了 Web 服务器(如 IIS, Apache, Nginx)原本就拥有的执行能力。
简单来说,WebShell 并不是它“创造”了权限,而是它**“借用”并“导出”**了权限。
- 权限的“寄生”关系
Web 服务器为了处理动态请求(比如用户登录、提交表单),必须具备执行代码的能力(PHP, ASP.NET, Java 等)。
- 正常流程:用户访问
index.php-> Web 服务启动 PHP 解释器 -> 执行官方代码 -> 返回网页。 - WebShell 流程:你上传了
shell.php-> 用户访问shell.php-> Web 服务启动 PHP 解释器 -> 执行你的代码。
此时,你的代码运行在 Web 服务的进程空间里。因此,Web 服务进程在操作系统里有什么权限,你的 WebShell 就有什么权限。
- 为什么它能执行系统命令?
绝大多数 Web 开发语言都提供了一些“后门”函数,用来让开发者调用系统底层的工具。WebShell 正是利用了这些函数:
- PHP:
system(),exec(),shell_exec(),passthru() - ASP.NET:
System.Diagnostics.Process.Start() - Java:
Runtime.getRuntime().exec()
执行命令的过程
当你在蚁剑里输入 whoami 时,蚁剑实际上是发送了一个 HTTP 请求,告诉 shell.php 去调用 system("whoami")。Web 服务进程接收到指令,向操作系统申请开启一个 cmd.exe 或 /bin/sh 子进程,运行命令并将结果通过网页再传回给你。
这是一个非常经典的疑惑。表面上看,你只写了一行简单的 PHP 代码,但实际上这行代码起到了**“开门人”**的作用。
简单直接的回答是:有关系,但 WebShell 只是“载体”,真正的权限是由运行 PHP 的“Web 服务进程”赋予的。
我们可以把这个过程拆解成三个层面来理解:
- WebShell 的本质:动态指令接收器
你写入的 <?php eval($_POST["cmd"]);?> 实际上是一台**“远程指令翻译机”**:
eval():这是 PHP 的一个极高权限函数,它的作用是“把字符串当作 PHP 代码来执行”。$_POST["cmd"]:这是接收你(蚁剑)通过 HTTP 请求传过来的数据。
当你用蚁剑连接时,蚁剑发出的数据其实是长这样的:
1cmd = system("whoami");
你的 WebShell 接收到这段字符串,通过 eval() 把它变成了真正的指令。所以,代码执行权限的“入口”确实是 WebShell 提供的。
- 权限的“天花板”:Web 服务器的身份
虽然你的 WebShell 能执行任何指令,但它执行指令时,必须遵守操作系统的规则。
关键点在这里: 当你通过 eval 调用系统命令(比如 system())时,操作系统会查看**“是谁在申请运行这个命令?”**。
- 因为你的
shell.php是由 Apache / Nginx / IIS 调用的。 - 所以,操作系统认为申请者就是 Web 服务器进程。
为什么需要配置单独的SMB监听器
Listener:选择一个 SMB Beacon(内网横向的首选,通过 445 端口建立加密管道)。
选择 SMB Beacon 作为 psexec 攻击的监听器,主要是基于流量隐蔽性、网络拓扑限制以及权限维持这三个核心维度的考虑。
以下是详细的原因分析:
- 突破内网隔离(无法直接连外网)
在真实的内网环境中,域控(DC)通常被保护在最核心的区域,严禁直接访问互联网。
- 普通 Beacon (HTTP/DNS):如果给域控下发一个 HTTP 类型的 Payload,域控会尝试直接连接你的云服务器,但由于防火墙规则,连接会被直接丢弃。
- SMB Beacon:它是一种“被动”或“点对点”的通信方式。它不直接和外网联系,而是通过 命名管道 (Named Pipe) 依靠 445 端口 与已经上线的机器(如你的 STU1)通信。流量路径是:
域控 <-> STU1 <-> 你的 TeamServer。
- 利用合法端口和协议(隐蔽性)
在内网中,445 端口(SMB 协议)是 Windows 机器之间共享文件、打印机和管理操作的“刚需”端口,流量极其频繁。
- 混淆视听:SMB Beacon 的所有指令和数据传输都封装在标准的 SMB 协议中。对于流量监控设备(如 IDS/IPS)来说,这看起来就像是一次普通的管理员远程管理操作或文件传输,很难通过行为分析将其与恶意软件区分开。
- 加密管道:CS 的 SMB Beacon 在命名管道中使用了额外的加密,即使流量被截获,也无法直接看到里面的指令内容。
- 链式控制(多级跳板)
SMB Beacon 允许你构建一个“链条”。
- 当你通过 STU1 控制了域控 A,你还可以继续通过域控 A 使用 SMB Beacon 去控制域控 B。
- 这种架构就像串联的灯泡,你只需要维持好第一个“出口点”(STU1)的连接,整个内网的链条就都能保持在线。
- 配合 PsExec 的天然优势
psexec 工具本身的运行原理就是建立在 SMB 协议(445 端口)之上的。
- 既然
psexec已经利用 445 端口在目标机器上成功创建了服务并运行了代码,此时直接在该端口内顺便建立一个通信管道(SMB Beacon),不需要额外开启新的端口,这在逻辑上是效率最高、改动最小的方案。