PolarCTF网络安全2025春季个人挑战赛 WRITE UP

news/2025/3/26 6:15:27/文章来源:https://www.cnblogs.com/ljnljn/p/18787976

1-1 可老师签到
本题思路如下:
提示“发送的内容为双写字符串拼接”
image

公众号发送flagflag即可
image

1-2 find
本题思路如下:
把表格文件当压缩包解压,找到flag.xlsx\xl\worksheets\sheet1.xml
发现里面存了数据,于是考虑把数据格子上色以得到flag
先将xml文件处理以获得纯数据
image

代码:

from openpyxl import load_workbook
from openpyxl.styles import PatternFill# 加载目标工作簿
wb = load_workbook('flag.xlsx')
ws = wb.active# 定义颜色填充
red_fill = PatternFill(start_color='FF0000', fill_type='solid')# 从文本文件读取单元格地址
with open('1.txt', 'r') as f:cell_positions = [line.strip() for line in f if line.strip()]# 应用颜色
for cell_address in cell_positions:try:ws[cell_address].fill = red_fillexcept:print(f"警告:单元格 {cell_address} 不存在,已跳过")wb.save('colored_target.xlsx')

运行就可以获得一个二维码,扫描获得flag
image

1-3 pfsense
本题思路如下:
T1使用工具分析
image

Base64解密获得flag
image

T2 火眼
image

1-4 WinCS
本题思路如下:
T1
用CurrPorts
image

T2、3使用工具对流量包进行解密
image

从中可以获得flag内容和压缩包密码
用密码解压可以获得压缩包里的flag

第二部分:CRYPTO
2-1 LCG
本题思路如下:

import gmpy2
import libnuma = 156506070439514915241840745761803504236863873655854161309517219593159285490218416513868431750791509039364033002042672969954633160268127141912185884526880436614313300761314810148356686577662643452299620703125833160716418003026915719584690230453993382155777985020586206612864299316237848416232290650753975103343
b = 99238154412252510462155206432285862925162164007834452250464130686978914370223020006347851539449419633688760095534852514797292083351953228730558335170313299274579966373474363445106224340638196799329142279344558612634392675992734275683700752827665429269516389277374408716314038483357418130704741371183923688601
c = 46154227430594568448486764587707836676441274677362557668215680998009402508945237578201692757688901737765923819819981974561807236454825684824157481322486008937560337004555948283870920377643907746645702190355761172293685309340938249454686807948964629553755585562990983237480387614548526918576791297250747752579
m = 94993804003827679355988952056520996247311128806455111011781585397953533782675757682874584547665028872979112598462143541626190903596606261782592703863749024490737374603789002750194481545579020929239629410573307193150780522563772690101754723829224534622557370960012364614566294197235191962517037441643656951249# 计算a的模逆元
def modinv(a, m):g, x, y = gmpy2.gcdext(a, m)if g != 1:return Noneelse:return x % ma_inv = modinv(a, m)
if a_inv is None:print("a和m不互质,无法求逆元")exit()# 从X10 = c开始逆推10次得到X0
current = c
for _ in range(10):current = (current - b) * a_inv % m# 将X0转换为字节
flag = libnum.n2s(int(current))
print("原文:", flag.decode())运行就可以获得flag2-2 knock knock
本题思路如下:2-3 Ununicast
本题思路如下:
import libnum
import gmpy2
from functools import reduce# 给定的n和c值
n1 = 22103870455568232891149694305142888751834308614394265111616851946569600408214771004642537180847811632101335684526571461971168013515137837024900824805617026937904594229522094231161022911739124543737188196687483192656237801622618078066399259928261566545087643719410735482610730976575506701177108423445928193645406926842010985319473171710362525271971508507747952666476652082985675013329629912123828667561346609223913700779782291638584038925201698832368301491167548373412290987271213331940429281040520028261848410995501268272516219976073764836056701179000719299634048587399330114683369803481960168019956231748933059575086
c1 = 11932229075145446680509155897048554062128427256365407597246250504495581359308426337230014475362231568192824606320775755785288148002607456528824047021370456983795336102290050703706457189838464034831160081682076095173411617546158489572376376884672473947738113750437924641752734999601688973523833305072494573210602790160977994408649942476416234572187935125916149727341802693373659080702112924850348826357976589797895053949499171267826718541148026541242636886850084012913015158312606367900952240929619627369492395483334316329627526281924799100659188037308919177852074431004118744919974806767580700568542188744931220106105
n2 = 75527641277099990800438920440041058388427571492243099817050670120985557789492014161535482889418153237600686779752008243731659250445079816272020155052679163716181164111466120389153470493389801068487079484957125572093805976995390398541806299511780722297642464948545911633969882049338027366168822259177038560221615245305724815740962661657512543487558774545803259821939839314547049519064559274668861232108875651136746020639698802437427698294031084596199751751480045337605111284980409927684686225365555725770862339970487179511801140925931587981761559129421142486178642732741442537609122284807214875446647952010067400441059
c2 = 124027357006179169026958610630330051622067042499828335143384044470302479154098199844981110929954078399392164965842575040140695741764719533745054315027041147434320473103634538090232615962998187567447484128103678001361703834076345621055674269048895730502155866761233018172058631071676397257894588728272913258599692996320058955017804506826897453939809574483310935927402899939042162496213745140970798253433830063777555869660983592646174581212241911650074643983280676238861065129884340834318081282521338654119292893592735294429956139729060770783817702837759047833794757601190967753969500822631312988106678317432186105038268
n3 = 67087501562139943813249584173215038264768218519355997619681399311361081244680048116472803745503996059873261361695629103578075388683394265112338602330356608572716276538183020643625652731722917269342461918246200053767885270359910155650804090015847462552469649420213346519159991670579334968778366255234963922378971680452094795318028353408405313888877068259282684640458674087251102468714734787171166396014144021959441774122328495595094512659302451021226956296868717965902597097040721193168373568780684532295504916946312087113872338693404258549907349353138009767393388073227204853717415106619739522003848121147803734511476
c3 = 34907142326483502918854711671956997110565154361385230791804714287500927140885225814711150443792832759398271249995064551044140838772959358268339105708186456545576271462167016667528764892342067422814982959975071847067493078241698635502292984200940132917130864956317815578073656622172241742542237740221147402449228459532782232518010610903660510875077798419046748683570340175197592449547071220020985311569095928938768945219762563190314531483012532595972282105394784611117089120803198848347397871670119847470687912177591609360741114570213377874848453859418234331921560384819899391157666714587396643397702710016410117040255
n4 = 107655225342909323493747650996643964780949305458547565103531987767712606044684527447631280423897684091717655597473336978923442425477823322239803312759244627308704521511743542550831030718035257133033470431042111429555597381959609892666206716219532081847930970282959800999825630713834546858387640307817593411764905032303294057112362597297253851687870254992314351948709124427458348128204263663881362955482132512838054738519685384575921373737470245719421223898475756247409282692966862335515090757754459242168056461013405091180148696649963461602177212697836496306046456138474445624214914814699390257673835554848791003397055
c4 = 260074379614284795599484546451240257157763532480505168853160303924952553177325935242853666448209970957052626857104522597130316456316378917529016900063473199051496246209878864043477905068893003923546332891289993179385753129868269775271722630762054161951558359984426822705582509592976962739279251035941138103001411061238095611738024433238447078804016593599525582868080696498271912174235479368671466666819582104245707176341268617126063957318342864903403961673418935623112290599738566078566393961145470677825235949530460449737989243772214379341818676279908757907698136648847166264635580606733816599243489965651372128251328
n5 = 70199621485671842359044641866403168058670803503736686351887502686934276983786039926002198676793045683182125769300687612734657616494815167750772182403321230734527784596550124329071164871143795929191396166096178482901122962656943854107741654772981259089537233024363295465966490361367216383217631330482253245796203648485653095242684462412133029510769320566443165990471527944889669809129572843754832577807509454633886982402256837076791468127186325307925886447397529190962280905611709973103713165872442266384750885343667064502988575278416037070011939869923447549518023420261237007329747290577829325263253564790709373901618
c5 = 207467685064436795719671032825183115862587233648672449925340580227825675452627031507906214773278665727530027025673966750973641715014217092820995216768554881760711270444952703291126925400881160114713107315867759288572987159233984669439942981888636828978580980986834342715153361271280814208437227309185682033733871844684874967978852089340054449142896831217885786745795842561143568848428620959961049292832772489885193639646881909425599177539209159664137785111991625129191354004990699226809474030005545318219197509201907072684957499981194498761673049651408375607248956494019809957851295451628144493493011699904221882421955n_list = [n1, n2, n3, n4, n5]
c_list = [c1, c2, c3, c4, c5]s_list = [2, 3, 4, 5, 6]
coefficients = [1, 2, 3, 4, 5]  # index + 1的值# 分解n_i为s_i * N_i
N_list = []
for i in range(5):s = s_list[i]n = n_list[i]assert n % s == 0, f"n{i+1}无法被{s}整除"N_list.append(n // s)# 计算c_i' = c_i * inverse(coefficient, n_i) % n_i,然后取模N_i得到余数
m_e_mod_N = []
for i in range(5):s = s_list[i]n = n_i = n_list[i]c_i = c_list[i]coeff = coefficients[i]inv_coeff = gmpy2.invert(coeff, n_i)c_prime = (c_i * inv_coeff) % n_im_e_mod_Ni = c_prime % N_list[i]m_e_mod_N.append(m_e_mod_Ni)# 应用中国剩余定理
def crt(moduli, remainders):product = reduce(lambda a, b: a * b, moduli)total = 0for m_i, r_i in zip(moduli, remainders):Mi = product // m_iinv_Mi = gmpy2.invert(Mi, m_i)total = (total + r_i * Mi * inv_Mi) % productreturn totalD = crt(N_list, m_e_mod_N)# 尝试可能的e值来解密密文
possible_e = [11, 13, 17, 19, 23, 29]
for e in possible_e:root, is_exact = gmpy2.iroot(D, e)if is_exact:m = int(root)flag = libnum.n2s(m)print(f"Found e = {e}")print("Flag:", flag)break
else:print("未找到正确的e值,请检查输入数据。")

运行即可获得flag

2-4 beginner
本题思路如下:

s = '16732186163543403522711798960598469149029861032300263763941636254755451456334507142958574415880945599253440468447483752611840'
D = int(s)# 检查D是否被2^125整除
mod_2_125 = 1 << 125
assert D % mod_2_125 == 0, "D is not divisible by 2^125"mod_5_125 = 5 ** 125
D_5 = D % mod_5_125# 计算2^10000的逆元 mod 5^125
inv_2_10000 = pow(2, -10000, mod_5_125)
N = (D_5 * inv_2_10000) % mod_5_125# 转换为字节并解码为字符串
flag_bytes = N.to_bytes((N.bit_length() + 7) // 8, byteorder='big')
flag = flag_bytes.decode('utf-8')print(flag)

运行即可获得flag

第三部分:WEB
3-3 来个弹窗
本题思路如下:
输入<script>alert(0)就可以触发
随后出现的图片是白金之星,直接转换成32位小写md5

3-6 coke的登陆
本题思路如下:
“曲奇饼干s”就是cookies
注释里写了账号
image

Bp抓包获得cookies
image
密码就是coke-lishuai
image

第四部分:REVERSE

4-2 解码器
本题思路如下:

cipher = [0x53, 0x46, 0x4e, 0x58, 0x58, 0x4a, 0x26, 0x5b, 0x57, 0x29, 0x56, 0x50, 0x53, 0x52, 0x5c, 0x53]
plain = []
for i in range(16):c = cipher[i]# 情况一:temp = c(未被调整)p1 = (c - i) % 127# 情况二:temp = c -32(被调整过)p2 = (c - 32 - i) % 127# 选择可打印字符if 32 <= p1 <= 126:plain.append(p1)elif 32 <= p2 <= 126:plain.append(p2)else:plain.append(p1)  # 默认情况result = ''.join(chr(c) for c in plain)
print(result)

发现运行之后就是ida中的原文,所以考虑包上32位小写md5加密,得到flag

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go红队开发—CLI框架(一)

CLI命令行工具编写基础学习(一)。CLI开发框架 命令行工具开发,主要是介绍开发用到的包,集成了一个框架,只要学会了基本每个人都能开发安全工具了。 该文章先学flags包,是比较经典的一个包,相比后面要学习的集成框架这个比较自由比较细化点,自定义可能高一些,后续会学到一…

WSL2安装Ubuntu

本文是介绍如何使用任意一台Windows主机借助WSL2创建Ubuntu虚拟系统并开放局域网内SSH连接的操作指南!先决条件拥有能够访问github.com的网络环境; 必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11版本;安装WSL2 以管理员身份运行Powe…

人工‘够好就行’智能(AGEI)就快来了!

比尔弗兰克斯 前言:本文作者的观点是在真正的通用人工智能(AGI)到来之前,一种“够好就行”的人工智能(AGEI)就已经足以引发我们原本担心 AGI 才会带来的重大社会变革、正面效益,甚至潜在危机。 换句话说: AI 不需要达到像人类一样全面智能的程度; 只要在足够多的任务上…

List集合--java进阶day09

1.List集合以下面的例子来解释存储有序和存储重复如上图,我们是怎么添加这些字符串的,打印的时候就是按照这个顺序打印的--存取有序 并且“张三”出现了两次,也存入了两次--存储重复 因为List有索引,所以该接口有关于索引的独特的api..1.remove注意事项 List有两个remove方…

Pydantic字段级校验:解锁@validator的12种应用

title: Pydantic字段级校验:解锁@validator的12种应用 date: 2025/3/23 updated: 2025/3/23 author: cmdragon excerpt: Pydantic校验系统支持通过pre验证器实现原始数据预处理,在类型转换前完成字符清洗等操作。格式验证涵盖正则表达式匹配与枚举值约束,确保护照编号等字…

20244126 2024-2025-2 《python程序设计》实验一报告

课程:《Python程序设计》 班级:2441 姓名:马晓霞 学号:20244126 实验教师:王志强 实验日期:2025年3月23日 必修/选修:公选课 (一)实验内容 1.熟悉Python开发环境 2.练习Python运行,调试技能 3.编写技能,练习变量和类型、字符串、对象、缩进和注释等 4.编写一个猜数字…

1.6K star!这个开源文本提取神器,5分钟搞定PDF/图片/Office文档!

Kreuzberg 是一个基于 Python 的文本提取库,支持从 PDF、图像、Office 文档等 20+ 格式中提取文本内容。采用 MIT 开源协议,具备本地处理、异步架构、智能 OCR 等特性,特别适合需要隐私保护的文档处理场景。嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开…

leetcode每日一题:判断一个括号字符串是否有效

题目 一个括号字符串是只由 ( 和 ) 组成的 非空 字符串。如果一个字符串满足下面 任意 一个条件,那么它就是有效的:字符串为 (). 它可以表示为 AB(A 与 B 连接),其中A 和 B 都是有效括号字符串。 它可以表示为 (A) ,其中 A 是一个有效括号字符串。给你一个括号字符串 s 和…

实验2c语言分支与循环基础应用编程

任务一:1 #include <stdio.h>2 #include <stdlib.h>3 #include <time.h>4 5 #define N 56 7 int main() {8 int number;9 int i; 10 11 srand(time(0)); // 以当前系统时间作为随机种子 12 for(i = 0; i < N; ++i) { 13 nu…

矿用人员违规闯入监控报警系统

矿用人员违规闯入监控报警系统,设置警戒预警功能,巷道正在行车时,当有行人闯入时,及时抓拍、识别现场违章入侵人员同时闪光警示和音箱报警提示禁止进入,在绞车运行期间人员误入斜巷能够及时报警,自动停止绞车运行。该系统做到绞车运行和行人的安全隔离,有力保障了煤矿斜…

工厂车间人员违规闯入禁区报警系统

工厂车间人员违规闯入禁区报警系统前端设备嵌入AI人体识别算法,对人员的检测、跟踪,实现对人体检测分析识别,实时预警周界区域内人员入侵事件。当有可疑人员进入监测范围内可对其自动识别,即对其抓拍并将当时图像传输到管理中心,在管理中心输出报警信号。工厂车间人员违规…

iis备份还原工具,想要备份iis有哪些工具可以实现?

想要备份IIS(Internet Information Services),可以使用多种专门的备份还原工具。以下是一些常用的IIS备份还原工具及其简要介绍:IISBackUp 功能:专注于备份和恢复IIS站点设置,包括网站配置文件、站点绑定信息、应用程序池设置、SSL证书和密钥信息等。 特点: 提供一种方便…