2023年福建省第四届“闽盾杯”-黑盾赛道-从线上初赛到线下决赛-WriteUp

2023年福建省第四届“闽盾杯”-黑盾赛道-从线上初赛到线下决赛-WriteUp

目录

0x00 前言

0x01 初赛

1.1 DNS流量分析

1.2 1SHELL

1.3 mylog

0x02 复赛

2.1 威胁情报分析1

2.2 QZ

2.3 Py-math-game

2.4 Pypath

0x03 线下决赛

3.1 任务一

3.1.1 任务一第一题

3.1.2 任务一第二题

3.1.2 任务一第三题

3.1.2 任务一第四题

3.2 任务二

3.2.1 任务二第一题

3.2.2 任务二第二题

3.2.3 任务二第三题

3.2.4 任务二第四题

3.3 任务三

3.3 任务三第零题

3.3 任务三第?题

3.3.x 任务三第?题

3.3.x 任务三第?题

3.4 任务四

3.4.1 任务四 第一题

3.4.2 任务四 第二题

3.4.3 任务四 第三题

3.4.4 任务四 第四题

3.5 任务五

3.5.1 任务五第一题

3.5.2 任务五第二题

3.6 任务六

3.6.1 任务六第一题

3.6.2 任务六第二题

3.7 任务七

3.7 任务七第一题

3.7 任务七第二题

0x04 最终成绩

4.1本科组

4.2高职组


 

0x00 前言

今年黑盾杯改为了全国赛道,然后高职组跟本科组的题目也有了区别,今年线下也见到了好多朋友,也认识了很多新的师傅,感谢各位师傅的帮助,线下部分wp来自各位好朋友各位大师傅们,这里特别感谢一下AhiSec跟F5n的师傅。

0x01 初赛

相比较去年的初赛不只有理论题还加上了几道Ctf题,理论题部分还是各种法律题

CTF的就是正常的杂项,web等

1.1 DNS流量分析

打开数据包就能看到很明显的压缩包头504b,这里猜测就是个压缩包

先过滤出请求的数据,然后导出name那块

dns  and ip.dst==192.168.50.1

去掉域名部分只保留前缀部分,然后另存为zip,发现是一个加密的压缩包

然后爆破得到密码Ap3l

1.2 1SHELL

扫目录可以得到1.php,使用工具爆破密码我这里的密码是aj每次启动都会不一样

连接得到flag

1.3 mylog

mysql的二进制文件,在kali下用mysqlbinlog 得到sql语句

然后在里面搜索f1ag 得到关键的sql语句

他里面有用到database() 这里我们搜索 create database可以得到库名是黑盾

执行那些语句出来的结果并不完整,可以看到有替换FLAG为flag,但是插入的里面并没有flag

这里在搜索一下F14g可以看到flag{是这里插入的(手动补个FLAG{也是可以的)

最终得到语句,拿到数据库执行即可获得flag

CREATE DATABASE  `heidun` DEFAULT CHARACTER SET utf8;
CREATE TABLE `heidun`.`f1ag` (
  `Id` int(11),
  `data` varchar(50) default NULL
);
use heidun;
insert into f1ag values (1,'FLAG');
insert into f1ag values (null,'{');
insert into f1ag values(null,'heidun');
insert into f1ag values(null,'_');
insert into f1ag values(null,year(now()));
insert into f1ag values(null,'_');
insert into f1ag values(null,database());
insert into f1ag values(null,']');
update f1ag set data=replace(data,'_','-');
update f1ag set data=replace(data,']','}');
update f1ag set data=replace(data,'FLAG','flag');
select replace(group_concat(data),',','') from f1ag ;

0x02 复赛

复赛10题Ctf题

2.1 威胁情报分析1

给了两个txt一个是访问的ip或域名,一个是恶意地址的

访问日志 and 威胁情报

思路是提取出来然后做比对,首先提取ioc文件,去掉文件首尾的[] 然后在最后一行加上,使用脚本提取出ioc字段

for i in open(r'ioc.txt',encoding="UTF-8"):
    print(eval(i[:-2]).get("ioc",''))

然后改一下脚本同样的去掉文件首尾的[] 然后在最后一行加上,处理一下提取出访问的url

for i in open(r'network.txt',encoding="UTF-8"):
    print(eval(i[:-2]).get("DestHost",''))

然后用命令提取出相同的行得到答案46.21.82.234

sort okioc.txt oknet.txt | uniq -d

2.2 QZ

非预期解

strings 镜像 | grep Zxm

base64解码得到flag

2.3 Py-math-game

开启给了个端口,nc连接发现返回了信息要3秒内完成算术题

用python socket连接然后计算完成发送过去,发现能计算猜测后端是用的eval来接收我们传入的值

传个os.popen('cat flag.txt').readline() 成功读取到flag

脚本只有个截图了

2.4 Pypath

源码

from flask import Flask, request, Response
import os
import shutil
import site



app = Flask(__name__)


@app.route('/')
def index():
    return app.send_static_file('index.html')


@app.route('/upload', methods=['POST'])
def upload():
    f = request.files["data"]
    with open(f'/tmp/storage/{f.filename}', 'wb+') as destination:
        destination.write(f.read())
    return Response("File is uploaded!", 200)


@app.route('/install', methods=['GET'])
def install():
    package_name = request.args.get('package_name')
    if '..' in package_name:
        return Response("Not allowed!", 400)

    src = os.path.join('contrib', 'packages', package_name)
    dst = os.path.join('/tmp/extract', package_name)

    shutil.copy(src, dst)
    shutil.unpack_archive(dst, extract_dir='/tmp/extract')

    return Response("Installed!", 200)


@app.route('/clean', methods=['GET'])
def clean():
    file = os.path.basename(request.args.get('file'))
    file_safe = f'/tmp/storage/{file}'
    os.unlink(file_safe)
    return Response("file removed!", 200)


@app.route('/add', methods=['GET'])
def add():
    site_dir = "/tmp/extract"
    name = request.args.get('name')
    site.addpackage(site_dir, name, None)



if __name__ == "__main__":
    app.run(debug=True, host='0.0.0.0')

upload方法默认传/tmp/storage/到下没有限制,可目录穿越,add方法是/tmp/extract目录,这里先上传到add方法的目录下,内容是通过dnslog外带信息

add方法时候触发

dnslog接到flag

0x03 线下决赛

今年线下决赛开始了收手机,比赛开始的时候要把手机交上去后面也会有人巡逻看你是否上网,赛题数量也比去年更多了。

3.1 任务一

总共4个小题

用的onenav版本v0.9.12-20210726 下载地址 https://github.com/helloxz/onenav

3.1.1 任务一第一题

通过备份文件的config.simple.php得到账号密码

登入后台即可看到flag

3.1.2 任务一第二题

提示数据库好小巧

通过备份文件知道数据库路径然后去访问下载data/onenav.db3,然后打开里面就有flag

3.1.2 任务一第三题

Fscan扫描得到CVE-2012-1823

然后cat web目录下的flag.php

3.1.2 任务一第四题

提示缓存数据库,这里6379开放那就是Redis

去找Redis配置文件得到密码,然后连接发现有很多键

分别查看f l a g这4个键的值然后里面是base64的解密拼接即可得到flag

3.2 任务二

题目是java_web 用的程序是ofcms,同样也是4小题

3.2.1 任务二第一题

admin 123456 登入

然后F12在flag1的分类下找到flag1

3.2.2 任务二第二题

tomcat tomcat直接登入tomcat

部署war包上webshell

上了shell试试看suid提权,发现了less这个可以用于读文件,还有pkexec让我想到了CVE-2021-4043

这里提一嘴ssh 账号ubuntu 密码 123456直接上然后上POC提权去读根目录的FI@G_2文件

3.2.3 任务二第三题

找配置文件得到数据库账号密码root toor

然后连接数据库查询得到flag3

3.2.4 任务二第四题

root 目录下有fLog_4

3.3 任务三

题目名称内网渗透用的系统是 dreamer cms 总共7个小题不过他第一题用是0 ,这里flag不一定对位置因为图片没有全截赛后也忘记了哪个是哪个,所以可能顺序会有点问题

漏洞详细链接 : https://forum.butian.net/share/2183

3.3 任务三第零题

首页有个base64编码的解密后是admin888

admin admin888登入

然后在编辑权限的位置得到flag

3.3 任务三第?题

附件处存在任意文件读取,读取根目录flag

然后下载即可

3.3.x 任务三第?题

备份数据库然后通过读取数据库文件得到flag

3.3.x 任务三第?题

通过写计划任务反弹shell然后查看flag

3.4 任务四

4个小题,给了一个防火墙日志

3.4.1 任务四 第一题

要找出总共有多少个ip,得到39个ip

cat FwLog.txt |cut -d ',' -f 2 | sort | uniq -c  |grep "sa"  | wc -l
3.4.2 任务四 第二题

这里我搜了一下bak.php 因为只有扫描器会访问这种文件然后提交这个ip一次过

3.4.3 任务四 第三题

要找出爆破IP

查看日志能发现爆破的特征是/webfire/portal/sp/login.php?loginFailed=1&error=user_password_incorrect

这里直接脚本找出含有user_password_incorrect的ip

import re
pattern = r"sa=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"
count = {} 
with open(r"FwLog.txt",encoding='utf-8')  as f:
    for line in f:
        if "user_password_incorrect" in line:
            ip = re.search(pattern, line).group(1)
            if ip in count: 
                count[ip] += 1 
            else: 
                count[ip] = 1 

for ip, freq in count.items(): 
    print(ip, freq)

然后排序一下 答案就就是 10_6_4_4_2_2

3.4.4 任务四 第四题

找出ssrf的ip,搜索http即可 得到 192.168.80.1

3.5 任务五

一个日志一个流量分析

3.5.1 任务五第一题

数据量太大没做出来

3.5.2 任务五第二题

打开发现是sql注入的流量

这里需要取出sbustrings取的某个位数最后一次判断的字符,也就是比较成功的这里用的是遍历所以到成功的就会停止

举个例子这里为1的最后一次比较是102然后就判断第二位了102转为ascii字符为f

这里直接脚本提取出来

import re
 
with open("misc.pcapng", "rb") as f:
    contents = f.read()
    res = re.compile(r'0,1\),(\d+),1\)\)=(\d+)%23').findall(str(contents))
    dic = {}
    for a, b in res:
        if a in dic:
            if int(b) > dic[a]:
                dic[a] = int(b)
        else:
            dic[a] = int(b)
    flag = ""
    for i in range(1,39):
        flag += chr(dic[str(i)])
    print(flag)

3.6 任务六

两个木马查杀题

题目说明

3.6.1 任务六第一题

需要将webshell的路径sha1编码后提交

直接上系统把web打包下来然后d盾扫,最后是扫出两个木马

这里是第一个,把路径写入到文件,然后sha1sum即可

3.6.2 任务六第二题

说要让webshell失效五分钟查杀一次

这里选择把两个扫出来的shell删除,等五分钟查看secret即可

3.7 任务七

是去防火墙上操作,给了账号admin 密码abc12345

3.7 任务七第一题

需要提交域名

在基础策略里面->应用内容->HTTP特征即可找到

3.7 任务七第二题

这里来到基础策略配置->地址转换->目的地址转换->提交web4 IP+端口即可

0x04 最终成绩

4.1本科组

4.2高职组

原文链接:2023年福建省第四届“闽盾杯”-黑盾赛道-从线上初赛到线下决赛-WriteUp

OSCP 2023 Challenge Writeup-MedTech-CSDN博客是一个关于OSCP挑战赛的技术解析博客。在这篇博客中,作者详细讲解了一个名为MedTech的挑战项目,并提供了解决该挑战所需的步骤和工具。 这篇博客的开头介绍了OSCP证书的重要性和它在信息安全领域的认可度。接着,作者向读者介绍了挑战项目MedTech的背景和目标。MedTech是一个模拟医疗技术公司的网络环境,参与者需要在该环境中寻找漏洞、获取权限,最终控制主机,获取FLAG。 在解决这个挑战的过程中,作者详细介绍了使用的工具和技术。例如,他讲解了利用漏洞扫描工具Nmap进行主机发现和服务探测的步骤,以及如何使用Metasploit框架进行漏洞利用和提权。 博客中还涵盖了其他一些有关网络渗透测试的技术,如枚举、社会工程学和Web应用程序漏洞利用。作者详细解释了每个技术的原理和实际应用。 在解决MedTech挑战的过程中,作者还分享了一些遇到的困难和技巧。他提到了一些常见的错误和陷阱,并分享了如何避免它们的经验。 最后,作者总结了整个挑战的过程,并分享了他在完成挑战时的成就感和收获。他强调了在这个过程中学到的技能和知识的重要性,并鼓励读者积极参与类似的挑战和项目。 这篇博客不仅提供了对OSCP挑战赛的深入了解,而且为读者提供了解决类似问题的思路和方法。它对于那些对信息安全和网络渗透感兴趣的读者来说是一个很有价值的参考资源。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你可知这世上再难遇我

君不见黄河之水天上来

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值