0x00 前言

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

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

05019-0jxdawoctms.png

0x01 初赛

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

63200-vzrj2s4a1lj.png

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

26153-d6s1odp15xt.png

1.1 DNS流量分析

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

31151-dm9hskpydop.png

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

dns  and ip.dst==192.168.50.1

92081-ec79d0n77a8.png

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

00155-ifdto9njgp8.png

然后爆破得到密码Ap3l

63015-oy1q1r5f33i.png

1.2 1SHELL

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

82335-f8rlyb575b7.png

连接得到flag

35419-0ssk2oound8c.png

1.3 mylog

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

34778-evxt5zpau7c.png

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

42665-g3afqz4ksfl.png

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

77094-gj3jtsymyhe.png

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

97749-0hlguqof1y6e.png

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

02058-3vmf3z43mr5.png

最终得到语句,拿到数据库执行即可获得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 ;

94501-unmpjxugna.png

0x02 复赛

复赛10题Ctf题

43444-u8v2tew5xx.png

2.1 威胁情报分析1

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

18474-9wj2slfdxje.png

访问日志 and 威胁情报

68122-yjs72xqlz8.png

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

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

72333-1rl72uwbi5q.png

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

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

56929-67l9vjqo6a9.png

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

sort okioc.txt oknet.txt | uniq -d

98001-bx7c3te4c1.png

2.2 QZ

非预期解

strings 镜像 | grep Zxm

58449-38fl9k1f2a.png

base64解码得到flag

08674-wwprbxyk26o.png

2.3 Py-math-game

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

66861-tm6429bzuy.png

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

83722-mx9yz7dsrs.png

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

脚本只有个截图了

03130-khdhfmf7ql.png

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外带信息
47830-2spqfu2vi6.png

add方法时候触发

70007-9s511lh4qze.png

dnslog接到flag

87967-piq8fa2zri9.png

0x03 线下决赛

今年线下决赛开始了收手机,比赛开始的时候要把手机交上去后面也会有人巡逻看你是否上网,赛题数量也比去年更多了,感谢F5N提供本题大部分wp截图

3.1 任务一

总共4个小题

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

62938-empmixdmxvn.png

3.1.1 任务一第一题

18514-eyat5ieorl.png

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

60747-37hllkornzs.png

登入后台即可看到flag

63706-0utnv53siqk.png

3.1.2 任务一第二题

提示数据库好小巧

27308-rh5iqj5rbvm.png

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

00964-6jfxeiu8zzp.png

3.1.2 任务一第三题

71303-24ei387eceq.png

Fscan扫描得到CVE-2012-1823

56995-6cfgtuxd8q9.png

然后cat web目录下的flag.php

62882-x3wg035qw8.png

3.1.2 任务一第四题

提示缓存数据库,这里6379开放那就是Redis
37646-6bybhellqci.png

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

54305-rmchcmn66xp.png

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

94030-fdl7ggxt13m.png

3.2 任务二

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

11893-s8hqednkg3i.png

3.2.1 任务二第一题

41616-9v8f7bewsb.png

admin 123456 登入

41997-q8cm4bpwwz7.png

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

89115-6ubl4nhig9g.png

3.2.2 任务二第二题

85874-tcnss44lii.png

tomcat tomcat直接登入tomcat

00891-8uj8wanw105.png

部署war包上webshell

11344-di70oflrgx.png

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

38835-tripxcoe7gq.png

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

28715-okprm1m71ko.png

3.2.3 任务二第三题

57429-y3zb4dx0uq.png

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

31189-hqb1n2khiuq.png

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

30363-5ypcmn2dkp.png

3.2.4 任务二第四题

64811-u2kwbi3lc8t.png

root 目录下有fLog_4

57395-084zqb6ow7as.png

3.3 任务三

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

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

77891-0nw5b1w65vua.png

3.3 任务三第零题

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

67628-ozprc3ukvk8.png

admin admin888登入

45911-4ur2y5d8du3.png

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

55373-bz36dlezvm4.png

3.3 任务三第?题

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

76900-3qjoc2j24tg.png

然后下载即可

11169-vyz48jai3rp.png

3.3.x 任务三第?题

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

3.3.x 任务三第?题

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

3.4 任务四

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

33637-2da5capj477.png

3.4.1 任务四 第一题

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

cat FwLog.txt |cut -d ',' -f 2 | sort | uniq -c  |grep "sa"  | wc -l

3.4.2 任务四 第二题

09306-qegn0aeizu.png

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

07039-53l0gr976ho.png

3.4.3 任务四 第三题

要找出爆破IP

65852-x8q1re490s9.png

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

14439-thcc5hdh3ym.png

这里直接脚本找出含有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

66311-eqv5euvzxjb.png

3.4.4 任务四 第四题

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

21720-y00azqja5hs.png

3.5 任务五

一个日志一个流量分析

39154-j52wa5ciwu.png

3.5.1 任务五第一题

数据量太大没做出来

3.5.2 任务五第二题

打开发现是sql注入的流量

10319-7byn6dsjovv.png

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

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

01899-nyz6jquh8mn.png

这里直接脚本提取出来

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 任务六

两个木马查杀题

87292-kyn68h8p3zg.png

题目说明

56233-e42yqflfpt6.png

3.6.1 任务六第一题

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

74350-723ka7ac5ey.png

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

15685-s1uivldkjts.png

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

74444-s6seipfpfr.png

3.6.2 任务六第二题

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

95256-xgaqeqyk8f.png

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

57907-a0ae3zw8tw.png

3.7 任务七

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

35180-be88jxwo4d8.png

3.7 任务七第一题

需要提交域名

59978-hly4e5j99ke.png

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

45831-n5bdu8u29ph.png

3.7 任务七第二题

81381-fngh3qdyo3.png

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

49608-htyu6yoe66s.png

0x04 最终成绩

4.1本科组

14006-ch5iqfckc17.png

4.2高职组

08810-vmou9dyp5ci.png

Last modification:June 6, 2023
  • 本文作者:Juneha
  • 本文链接:https://blog.mo60.cn/index.php/archives/2023-HeiDun.html
  • 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
  • 法律说明:
  • 文章声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任,本人坚决反对利用文章内容进行恶意攻击行为,推荐大家在了解技术原理的前提下,更好的维护个人信息安全、企业安全、国家安全,本文内容未隐讳任何个人、群体、公司。非文学作品,请勿过度理解,根据《计算机软件保护条例》第十七条,本站所有软件请仅用于学习研究用途。
如果觉得我的文章对你有用,请随意赞赏,可备注留下ID方便感谢