2023年福建省第四届“闽盾杯”-黑盾赛道-从线上初赛到线下决赛-WriteUp
2023-6-6 09:59:26 Author: Mo60(查看原文) 阅读量:52 收藏

0x00 前言

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

关注公众号回复 "2023黑盾杯" 获取线上到线下的所有附件

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提权去读根目录的[email protected]_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高职组

博客发表链接: https://blog.mo60.cn/index.php/archives/2023-HeiDun.html


文章来源: http://mp.weixin.qq.com/s?__biz=Mzg5NTIxNDE3NQ==&mid=2247484558&idx=1&sn=5859482b6022f1b5d3c9d06db171244e&chksm=c012f3bef7657aa84084260e96f2a62beec0cfbb06aad252759eb6d735bcc14e08ec3b10abe6#rd
如有侵权请联系:admin#unsafe.sh