NSSCTF Round#22 Reverse个人专项赛 WP

1. ezcrypt(史)

pyinstxtractor.py解包exe,然后pycdc反编译NSSCTF.pyc

得到的源码并不完整,但是重要的部分已经有了,就是一个blowfish加密

但是密钥是crypto.SomeEncode,这并不是字面意义的字符串,而是引用的其他文件

NSSCTF.exe_extracted可以找到可疑文件crypto.cpython.pyc

是一个魔改的TEA(这里出题逻辑有问题,按给的代码逻辑SomeEncode是v加密得到的,但实际上却要我们解密得到)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    unsigned int enc[5] =
    {
        1396533857,
        0xCC8AE275,
        0x89FB8A63,
        940694833
        };
    unsigned int key[4] =
    {
        17,
        34,
        51,
        68
        };
    int i, j;
    for (i = 0; i < 4; i += 2)
    {
        unsigned int v0 = enc[i], v1 = enc[i + 1], sum = 0xC6EF3720;
        unsigned int delta = 0x9e3779b9;
        unsigned int k0 = key[0], k1 = key[1], k2 = key[2], k3 = key[3];
        for (j = 0; j < 32; j++)
        {
            v1 -= ((v0 << 3) + k2 ^ v0 + sum ^ (v0 >> 4) + k3 ^ 2310) & 0xFFFFFFFF;
            v0 -= ((v1 << 3) + k0 ^ v1 + sum ^ (v1 >> 4) + k1 ^ 596) & 0xFFFFFFFF;
            sum -= delta & 0xFFFFFFFF;
        }
        enc[i] = v0; enc[i + 1] = v1;
    }
    for (i = 0; i < 4; i++)
    {
        printf("%u ", enc[i]);
    }
    printf("%s", enc);//sNzEveRsjorPstce
    return 0;
}

这里有个每四位一个逆序(第三行就是ASCII转字符的意思),解出来手动改一下吧,就是 EzNssRevProjects

#ezcrypt wp
from Crypto.Cipher import Blowfish  
from Crypto.Util.Padding import unpad  
from Crypto.Random import get_random_bytes  
  
def decrypt_file(input_path, output_path, key):  
    with open(input_path, 'rb') as f:  
        # 读取整个文件内容,包括IV和密文  
        data = f.read()  
      
    # 分割IV和密文  
    iv = data[:Blowfish.block_size]  
    print(iv)
    ciphertext = data[Blowfish.block_size:]  
    print(ciphertext) 
    # 验证密钥长度  
    #if len(key) != Blowfish.key_size:  
    #    raise ValueError("Invalid key size for Blowfish. It must be exactly 8 bytes long.")  
      
    # 创建一个新的Blowfish cipher对象,并设置密钥和IV  
    cipher = Blowfish.new(key, Blowfish.MODE_CBC, iv=iv)  
     
    # 解密数据  
    plaintext = (cipher.decrypt(ciphertext), Blowfish.block_size)  
    print(plaintext[0])
    # 将解密后的数据写入输出文件  
    with open(output_path, 'wb') as f:  
        f.write(plaintext[0]) 

key = b'EzNssRevProjects'
input_path = 'D:\\下载\\CTF附件\\NSS22re\\output'
output_path = 'D:\\下载\\CTF附件\\NSS22re\\flag'

decrypt_file(input_path, output_path, key)

密钥解码得到一个二进制文件,IDA打开是个虚拟机(笑)

动调不出来(这里逻辑也莫名其妙,明明这个代码就应该能跑出flag,但实际上是要你把代码反过来写)

硬做,动调取出opcode,key

<think>好的,我现在需要帮助用户寻找关于强网杯青少年专项Web部分的解题思路或Writeup。用户明确提到了想要Web部分的解题思路,所以我要集中精力在这部分。 首先,我应该回忆一下自己知道的强网杯比情况。强网杯是一个网络安全竞,通常包括多个方向如Pwn、Reverse、Crypto、Web等。用户提到的引用内容中,引用了两篇Writeup,但里面提到的是Pwn、Reverse、Crypto题目的情况,而Web部分可能没有被详细提及。例如,引用[1]中的用户提到“Pwn 一道题都不会捏qwq Reverse 一道题都不会捏qwq Crypto crypto1&rdquo;,但Web部分可能没有写出来。引用[2]同样没有提到Web题目的具体内容。 接下来,我需要考虑用户可能的需求。用户可能参加了这个比,或者在准备类似的比,需要参考往届的解题思路来提高自己的技能。由于公开的Writeup中Web部分的信息有限,可能需要给出一般性的解题建议,或者指导用户如何寻找相关资料。 另外,我需要确保回答符合用户的要求,结构清晰,分步骤解决问题,并且真实可靠。可能需要建议用户查看官方资料、社区论坛、GitHub仓库或者联系参队伍获取更多信息。同时,提醒用户注意题目中的常见考点,如SQL注入、文件上传漏洞、反序列化等,这些都是Web题目中常见的类型。 还需要检查是否有遗漏的信息。比如,是否有其他年份的强网杯比Writeup中包含了Web部分的内容?如果用户提到的第六届和第八届的Writeup中没有,可能需要建议用户搜索其他届次或者类似比的解题思路。 最后,应该生成相关问题,帮助用户进一步探索。例如,询问常见的Web漏洞类型或CTF中Web题的训练方法,这样可以引导用户深入学习相关知识点。</think>关于强网杯青少年专项Web题目的公开Writeup目前较为有限。根据现有资料显示,第六届和第八届事中公开的解题报告主要聚焦在Crypto、Pwn等方向,Web部分的详细解题思路尚未见完整披露[^1][^2]。以下是可提供的建议思路: 1. **常见漏洞定位** Web题常涉及SQL注入、文件上传漏洞、反序列化攻击等考点。建议通过修改HTTP请求头参数(如`X-Forwarded-For`)测试服务端过滤机制,例如: ```python import requests r = requests.post(url, headers={"X-Forwarded-For": "127.0.0.1"}) ``` 2. **框架特性利用** 若题目使用Spring、Flask等框架,需注意模板注入漏洞,测试如`{{7*7}}`等表达式是否被解析 3. **数据流追踪** 使用浏览器开发者工具分析网络请求,重点关注Cookie字段和JWT令牌的加密方式,使用`jwt.io`在线工具解码验证 建议通过以下渠道获取更多信息: - 访问CTF事平台(如CTFHub、攻防世界)的Web专项训练 - 查阅GitHub仓库搜索"强网杯 Web writeup"关键词 - 联系参战队获取非公开解题文档
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值