2022年第三届指挥官杯练习赛题目和writeup

2023-11-03 17:10

本文主要是介绍2022年第三届指挥官杯练习赛题目和writeup,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

0x00、复习一下大端模式和小端模式

0x01、红04-隐写【篡改文件头部】

0x02、明文通信【telent】

0x03、kun1【图片隐写】

0x04、jiehe(未完待续)

0x05、findme【条码】

0x06、giveme【密码、一表人才、二表反行】

0x07、rsa15【rsa基本算法】

0x08、通行证【密码学、栅栏密码加密】

0x09、zips【zip文件格式、压缩、解压缩】

0x0A、kaisa.exe【逆向、密码学】

0x0B、re1【逆向】

0x0C、rsa41【rsa共模攻击】

0x0D、next


2022年第三届指挥官杯练习赛题目在这里https://download.csdn.net/download/qpeity/86726879

0x00、复习一下大端模式和小端模式

举一个例子,比如数字0x12 34 56 78在内存中的表示形式。

大端模式:Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。(其实大端模式才是我们直观上认为的模式,和字符串存储的模式差类似)

低地址 --------------------> 高地址
0x12  |  0x34  |  0x56  |  0x78

小端模式:Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。

低地址 --------------------> 高地址
0x78  |  0x56  |  0x34  |  0x12

举个例子,在linux上(小端模式)编译hello.c,执行得到 Hello,w0rld!。

#include "stdio.h"
#include "string.h"int main(int argc, char *argv[]) {//char s[] = {0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x2C, 0x77, 0x30, 0x72, 0x6C, 0x64, 0x21};char s1[20] = {0x48, 0x65, 0x6C, 0x6C};        // Helllong long a[2] = {0x21646C7230772C6FLL, 0};    // !dlr0w,ochar *s2 = (char *)a;char *s3;s3 = strcat(s1, s2);printf("%s\n", s3);                            // Hello,w0rld!return 0;
}

0x01、红04-隐写【篡改文件头部】

题目是一个名为 隐写.rar 的压缩包,解压缩得到一个 pdf 文件。用010Editor打开,发现 pdf 最后有一部分unknown padding,观察数据头部尾部猜测可能是一个 gif 图片。binwalk提取一下这个 gif 图片。

binwalk -D=gif r04.pdf

打开 gif 发现有报错,于是用010Editor打开这个gif文件,也报错。观察发现文件头部后面还有IHDR,猜想这应该是一个png图片的头部被篡改成gif的头部导致的。

  • gif格式文件以 0x47 49 46 38 39 61(GIF89a)开头,以0x3B结束。
  • png格式文件以 0x89 50 4E 47 0D 0A 1A 0A(‰PNG....)开头,头部还有IHDR,以 0x00 00 00 00 49 45 4E 44 AE 42 60 82(....IEND®B`‚)结束。

 于是修改gif文件头部,改为png文件头部,另存为png文件。再次打开,发现图片是一段命令行截图,最后是cat file,猜测图片高度被篡改了。用01Editor打开,发现CRC32报错。于是利用脚本进行CRC32爆破,得到正确的图像height,flag也显示出来了。

0x02、明文通信【telent】

题目是一个名为 明文通信.rar 的压缩包,解压是一个 1.pcapng 的抓包。明文通信,首先想到 telnet协议。用wireshark打开这个抓包,过滤一下发现确实是telnet协议明文输入了flag。

telnet.data != '' && ip.src_host == 192.168.1.3

提取telnet.data数据,要求telnet.data不为空且源IP为192.168.1.3 

tshark -r 1.pcapng -T fields -e telnet.data -Y "telnet.data != '' && ip.src_host == 192.168.1.3"  > 1.txt

 打开提取结果1.txt得到 flag{telnet_ctf}

0x03、kun1【图片隐写】

题目内容是shu.png 和 laohu.jpg 两张图片。CTF原则之一就是不要相信给你的任何一张图片。

先用010Editor打开shu.png,发现报出了CRC32校验和错误,说明height或者width被篡改过,利用脚本进行CRC32爆破,得到正确的图像height,发现shu.png下方有一串字符。

再用010Editor打开laohu.jpg,发现图片最后有一部分unknown padding,观察数据头部尾部确定是一个zip压缩包。放进kali里面,使用 binwalk 提取出 laohu.zip。利用之前得到的wangshen66作为解压缩密码,解压这个文件,得到hidden_binary文件。

binwalk -D=zip laohu.jpg

用010Editor打开hidden_binary,发现是一个ELF文件,放进kali里面,赋予700权限,执行一下,回显得到flag。 

0x04、jiehe(未完待续)

题目内容是8.jpg 和 11.jpg 两张图片。CTF原则之一就是不要相信给你的任何一张图片。

先说11.jpg,用010Editor打开,发现图片最后有一部分unknown padding,观察数据头部尾部确定是一个zip压缩包。放进kali里面,使用 binwalk 提取出11.zip。再用john爆破解压缩密码074312。解压后得到beisi.txt。

观察beisi.txt内容 WlVkc2RXTXlhR3hpWnowOQ==,用3次base64解码一下得到 xinshen

1    isBase64    True    WlVkc2RXTXlhR3hpWnowOQ==
2    isBase64    True    ZUdsdWMyaGxiZz09
3    isBase64    True    eGluc2hlbg==
4    解码结果:        xinshen

8.jpg使用F5工具,密码是123456,得到一个文件。

0x05、findme【条码】

题目内容是 xxx文件.zip 和 海绵宝宝.png 两个文件。

虽然 xxx文件.zip 没什么卵用,但是还是说一下。john爆破得到解压缩密码628600,解压缩得到一个名为“看这里”的word,打开之后居然他妈的是这玩意!!!

 根据以上提示,我们看看 海绵宝宝.png 图片下面有啥吧。

下面被涂抹的是一个条形码(bar code) ,看来要恢复这个条形码扫码得到flag。于是有2个工具可以用。

PhotoShop,选取没有被涂抹的条码部分,然后按住Ctrl+T拉伸一下,从左到右逐个拉伸得到完整的条码。最终使用工具bcTester解码得到 flag{CePo_sanYa_@JiaYou}

GIMP,选取没有被涂抹的条码部分,然后按住Ctrl+S拉伸一下。注意和PS的使用区别。

 

 

0x06、giveme【密码、一表人才、二表反行】

题目描述是:运动会当天小小生病了来不了现场,她给运动员小力发了一段加密的短信,但是不知道是什么。小红看了看这短信说了句:一表人才,二表反行,小力挠了挠头,你能帮小力破解吗?flag格式为flag{xxx}。

题目文件是一个 giveme.zip 压缩文件,解压缩得到 提示.docx 和 附件.txt 短信。内容如下

ACEIBDFHADFGBCEHBCFGBDFHBCEGACEHBCEGADFGACEHACFHBCFGBDEGADEHADEI

 一表人才,根据表格把短信密文4个字母一组,翻译翻译得到如下内容:

DXFLOXKAKFATOSBC

二表反行,这个提示不太明显,查了资料才知道啥意思。

  1. 把提示的字母排列成original_list,反向排序得到reversed_list
  2. 把上面的密文每个字母在original_list中找到位置,对应在reversed_list里面找到这个位置的字母
  3. 如此得到明文 WANGCAIXINXUCEPO, flag就是flag{WANGCAIXINXUCEPO}
ciphertext = 'DXFLOXKAKFATOSBC'original_list = ['M','R','K','S','A','B','L','U','D','C','N','V','H','F','O','W','T','G','P','X','E','I','Q','Y']
reversed_list = original_list[::-1]flag = ''
for char in ciphertext:for olist in original_list:if char == olist:oindex = original_list.index(olist)flag += reversed_list[oindex]print(flag)

0x07、rsa15【rsa基本算法】

题目直接给出了rsa算法的几个参数,然后求明文就是flag了。

p = 127346657296966281106854437915566302489035503867209365225464769149364916377649221715644868274969994830021907816536487697037927326669343680817626394628059416307748180509310043959788901776350444278302482572396137760355783028754164111470736033566039120671153208213406728174032320506182380397712402112249416727049
q = 129977522448127985502705135499093758554580803715308992038245139386359526040024981890138010442056823626833608528616652270823127997752903965259510395345535370421708668844593013515811795302231375948724888614600926562868789102880383644712522614357869135221109093902359980800725961683056681691225107119917162111601
e = 498
c = 3191077469066624394578722760655452830413317443932682147378077493651775225542567292121865824956615312277999864765565827995547623582566288394295434817283964215640835363991958352773714052513924940770391587810823272280972154385354186450034042838269763305748144425049076693725170392807170301916734625545526849972706682913921819954213685592148917132794978837982154582529934249549309184927971219477563709516944754956476078539105318141913368813639297354242808182291604352435520129250525943217095451583607906042318148800977086383632916208828781189020367474557726793718384861576249133264239511866972761006093635745864791467673

先回忆一下rsa算法的全过程:

  1. 任意选取两个不同的大素数p和q,n=pq,φ(n)=(p-1)(q-1)
  2. 任意选取一个大整数e,满足gcd(e, φ(n))=1 ;注意 e 的选取是很容易的,例如,所有大于p和q的素数都可用。(e, n)作为加密秘钥。
  3. 确定d,满足(de) mod φ(n)=1,也就是de = kφ(n) + 1,k≥1的正整数即可;注意已知e和φ(n)选取d是很容易的。(d, n) 作为解密秘钥。
  4. 公开(e, n),保存 (d, n)
  5. 明文m的加密过程  m^e mod n 得到密文c
  6. 密文c的解密过程  c^d mod n 得到明文m

过程就是这样,但是题目中的e 和 φ(n) 并不是互素的,也就是不满足gcd(e, φ(n))=1 。咋办呢?知乎上有个写的挺好的帖子,直接看结果Better2021 CTF Writeup(1): BabyEasyRSA - 知乎

注意,这里核心的地方在于最后这段解释,只不过这题把gcd(e, φ(n))=2变成了gcd(e, φ(n))=6

 我们写个脚本,把步骤逐个打印出来,得到flag{b85cefed-43a9-40be-aeda-5bba3058ef5b}

import gmpy2
from Crypto.Util.number import long_to_bytesp = 127346657296966281106854437915566302489035503867209365225464769149364916377649221715644868274969994830021907816536487697037927326669343680817626394628059416307748180509310043959788901776350444278302482572396137760355783028754164111470736033566039120671153208213406728174032320506182380397712402112249416727049
q = 129977522448127985502705135499093758554580803715308992038245139386359526040024981890138010442056823626833608528616652270823127997752903965259510395345535370421708668844593013515811795302231375948724888614600926562868789102880383644712522614357869135221109093902359980800725961683056681691225107119917162111601
e = 498
c = 3191077469066624394578722760655452830413317443932682147378077493651775225542567292121865824956615312277999864765565827995547623582566288394295434817283964215640835363991958352773714052513924940770391587810823272280972154385354186450034042838269763305748144425049076693725170392807170301916734625545526849972706682913921819954213685592148917132794978837982154582529934249549309184927971219477563709516944754956476078539105318141913368813639297354242808182291604352435520129250525943217095451583607906042318148800977086383632916208828781189020367474557726793718384861576249133264239511866972761006093635745864791467673phi = (p - 1) * (q - 1)cf = gmpy2.gcd(e, phi)
print(cf)d = gmpy2.invert(e//cf, phi)
d = int(d)
n = p * q
m6 = pow(c, d, n)
print(m6)m = gmpy2.iroot(m6, cf)
print(m)m = int(m[0])
print(m)m = long_to_bytes(m)
print(m)m = str(m, 'utf-8')
print(m)

0x08、通行证【密码学、栅栏密码加密】

题目是个压缩包,解压是个txt文件,内容是第一行,用base64解码得到第二行。

c3thdWZhZHR1bmZ1eW51dnZmaHVkeHJ2bmFhYnZufWFiaHRudA==s{aufadtunfuynuvvfhudxrvnaabvn}abhtnt

这里用栅栏密码加密,栏数是7。W形状的排列是加密过程。得到最后一行字符串,这就符合flag{xxx}的格式了。

s{aufadtunfuynuvvfhudxrvnaabvn}abhtnts           y           n           t{         u n         v a         na       f   u       r   a       tu     n     v     x     b     hf   u       v   d       v   ba t         f u         n ad           h           }synt{unvanafuratunvxbhfuvdvbatfunadh}

栅栏加密的python脚本如下

def encode(m_str, n_fence):c_str = ''f_text = [[] for i in range(n_fence)]flag = Truefor i, c in enumerate(m_str):if i > 0 and i % (n_fence - 1) == 0:flag = not flagif flag:f_text[i%(n_fence-1)].append(c)else:f_text[(n_fence-1)-i%(n_fence-1)].append(c)for line in f_text:c_str += ''.join(line)return c_strdef decode(c_str, n_fence):passdef main():m_str = 's{aufadtunfuynuvvfhudxrvnaabvn}abhtnt'print(encode(m_str, 7))if __name__ == '__main__':main()

 最后是对 synt{unvanafuratunvxbhfuvdvbatfunadh} 凯撒解密,解密得到flag。

flag{hainanshenghaikoushiqiongshanqu}

0x09、zips【zip文件格式、压缩、解压缩】

题目是zips.zip压缩包。

zips.zip是加密的,用john爆破,得到密码628600,解压缩得到333.zip。

 333.zip文件里面有 flag.zip 和 setup.sh 两个文件。

  • 用winrar直接从333.zip提取出flag.zip,flag.zip本身是加密的。
  • 从333.zip提取setup.sh是加密的。

但是,这是个障眼法,参考这篇文章zip文件加密的几种破解方法_Dropall的博客-CSDN博客_zip解密,就可以知道这个333.zip是被篡改了的,用010Editor打开这个333.zip找到setup.sh文件的全局方式标记位 0x09 00,改为0x00 00,另存为333-1.zip。解压缩333-1.zip就不需要秘密了。

得到 flag.zip 和 setup.sh,发现flag.zip是加密的,加密方式在setup.sh里面。这密码好复杂,居然是用时间戳做密码。

#!/bin/bash
#
zip -e --password=`python -c "print(__import__('time').time())"` flag.zip flag

所以这个密码应该是加密时候的时间戳,也就是flag.zip的生成的时间戳。可以考虑用ARCHPR或者john爆破。

ARCHPR爆破,用掩码方式,时间戳指定的范围选择大一些,大概5分钟能爆破出结果。

也可以使用john爆破。首先用crunch生成一个字典w.txt。然后用john指定字典爆破。使用john --show 来查看爆破结果。

crunch 13 13 -t 1543%%%%%%.%% > w.txt
zip2john flag.zip > flag.hash
john flag.hash --wordlist=w.txt
john --show flag.hash

 最终得到flag 

 

0x0A、kaisa.exe【逆向、密码学】

题目是一个压缩包,里面有个kaisa.exe,看起来是凯撒密码有关的逆向题目。先用IDA64打开,找到main函数,然后F5大法反编译一下。

阅读main函数发现是输入一个字符串,长度38个字符,然后经过了encode_one、encode_two、encode_three三重加密以后得到了密文Str2。再逐个阅读三个加密函数。

encode_one 做的是base64编码,alphabet就是A-Za-z0-9/+的标准base64编码表,注意几个cmove_bits,做的就是3个字符一组共24位,然后每6位进行base64转码的操作。这样38个字符就变成了52个字符。

encode_two做的是把52个字符每13个分成一组,把这4组字符串的位置换一下。原来位置2的换到位置0上,原来位置0的换到位置1上,原来位置3的换到位置2上,原来位置1的换到位置3上。

 encode_three是位移为3的凯撒密码加密,注意数字也进行了凯撒密码加密,符号保持不变。

于是,反向做3次解密得到 flag{cepohainanc478a38e9h3g4ds6f45432}

0x0B、re1【逆向】

题目是一个名为re1的ELF文件。直接执行会得到禁止访问的提示。反编译看看吧。

使用ida(不是ida64) 打开,F5大法反编译一下。main里面有非常清晰的流程,看来执行re1的时候要有一个参数,这个参数满足了sub_8048414函数,就允许访问了,再经过sub_8048538函数的处理应该可以显示出flag。

分析sub_8048414函数,入参是执行命令的,另一个入参a2=0。结果是一个switch分支,基本每个分支都会goto到LABEL_19。看来要从case0往下执行,每次执行完都goto到LABEL_19,LABEL_19重新计算a2的值,递归执行sub_8048414函数进行下一个case,a1+1对比下一个字符。最终会走到break。

整个case顺序是0-7-1-3-6-5-9-4-2(default),对应的a1字符值105-115-101-110-103-97-114-100-break,对应的a1字符是isengard。

 我们执行一下 ./re1 isengard 回显得到 flag{cepo_xiaoxin_like_ikun_ctrl}

0x0C、rsa41【rsa共模攻击】

题目是下面这样的,看起来同一个明文m用两个e1、e2分别加密了,可以尝试共模攻击。这篇原理和过程写的很好就不多说啥了【密码学RSA】共模攻击原理详解_已知e1*e2的共模攻击题_malloc_冲!的博客-CSDN博客_共模攻击

e1*e2= 151931
n= 84130325462189313261610613840200969686006974931596752912032790684163259588936598567112333205675376575653349699558006190805236048677612743149161267856067749658721310907290563192651822456436162893862332677601389286823850869861627186339695681127691895146627792056779915527655786135390557374522354125691160967603061917013801283769106284129418217154101973930260335807437308795976093605719570668187252953377241106277131154146406710208553604162789827629653779259160590959887598160617569785797679836749435646510582655971711741029417262291445133694164402046308899620645557434194447055229215374986345090010304045839732593934047238792984259915694506040189791018542812674501957158976683553103670916884578330339754410985060529044158920150117253712701573184005911278916381934132179281549735149623256759896156546668842438913581742577907775289270627635194061377904271075235797938643630177588509680531035491329021958784461639411836887676505524012023437950803999811659244823170086524422112788479235025578274269284102996813609639046143942802445958501781726534600684331272113138000127764573457550116220984423875964403470300541258257779535477443662855528497647534458034753495233962850546196096902356580597
c1= 5526981843577863694461841818351673890485198991567434658436770623490360611171871127510696277931234016151166487845669008158730860791187426804659014070306342599593203461644344063671060608024741125863151160681737760825655904785410788429923395448479309181146271656243865686872360070862425446306804455143460283097489937460681185667889651996340602549406246983404553712950903106202637657545318838234089563006281413871664984932655309786145062824775367490677358018047724375137646853089100636910706417957472451511189929270830461215635563336097943145813465687418167325953057560920557811037396525599283369527238547590099431770150410613446367215565152850675941768614103145735526747937173171095406355478150520086157783786157233800132640165602216366493748584897917370650633605868739552901472918463967537246747239034849801736709740501078016729820001908860255554244761014914173396258591186967052039240422376770977181833478209734238146312802796726420114480881217425132382900982749982633798649678323928534549057994366138023265799921199669695092069367137971097924101068016233987031053592978291709434171339215459621867307522559994943572193872611134462980500249831546682238789659886548296132550808672970975
c2= 34084270081687215738807305215251787451638821299044014914682531967321866632121742567116108518795723102917357389974357667834615280184350852689416055137489247144479830563666110553634856291420207301164541339536763839450977561693676245102910452394708665923322529405310574606327895930541878192148924940959431781480647857477703953124323177425707471323985717664697755487011012344887464332487662104362515163201720826713950129753029845783245282363456550757104613456683996197339839069797091412545873164972661844751681352702261084660646346044820936686595737245383217501391011213177128366315025981912576190042188565795126552888941891222878512876415813788639279098423252518562584392383828846310597706984192183323459131536957686029489643645530071134644693970419530213624757323611027399502740215831349835885291912029119606235799410070446960489470382325032756908742170024039020096953892876059066875780052077940300335448034160045048020007407018279790936847112516378129875607582306514635993448576932928782939218669424318874692862402344461024076485525660329526521172000498582344032675985278644197734558735991092983701763358607940473927824852544744622220580239511275435637081454423079295014742864719778127

共模攻击就是使用两个及以上的公钥来加密同一条信息,即c1=m^e1 % n,c2=m^e2 % n。

根据更相减损术(欧几里得算法),对于不完全为0的整数a和b,gcd(a,b)表示a,b的最大公约数,那么一定存在整数x和y,使得gcd(a,b)=ax+by  。如果gcd(e1, e2)=1 ,那么存在两个整数s1和s2使得 e1s1+e2s2=1。

模运算有两条性质可以推倒出 c_{1}^{s_1}c_{2}^{s_2}\ \%\ n=m

性质1(ab)\ \%\ n=((a\ \%\ n)(b\ \%\ n))\ \%\ n。性质1容易推导,设a\ \%\ n=t_1b\ \%\ n=t_2,那么有 a=k_1n+t_1b=k_2n+t_2,那么有 ab=k_1k_2n^2+(k_1t_2+k_2t_2)n+k_1k_2,易证 (ab)\ \%\ n=(t_1t_2)\ \%\ n=((a\ \%\ n)(b\ \%\ n))\ \%\ n

性质2a^b\ \%\ n=(a\ \%\ n)^b\ \%\ n,可以看成b个a相乘,通过性质1易证性质2。

推倒

c_{1}^{s_1}c_{2}^{s_2}\ \%\ n\\ =(c_{1}^{s_1}\ \%\ n)(c_{2}^{s_2}\ \%\ n)\ \%\ n\\ =((m^{e_1}\ \%\ n)^{s_1}\ \%\ n)((m^{e_2}\ \%\ n)^{s_2}\ \%\ n)\ \%\ n\\ =(m^{e_1s_1}\ \%\ n)(m^{e_2s_2}\ \%\ n)\ \%\ n\\ =m^{e_1s_1}m^{e_2s_2}\ \%\ n\\ =m^{e_1s_1+e_2s_2}\ \%\ n\\ =m\ \%\ n

又因为m<n,所以 c_1^{s_1}c_2^{s_2}\ \% \ n=m

所以本题考虑共模攻击,但是不知道e的具体数值仅知道e1*e2,然后这里使用共模攻击脚本是无法解出来的,原因是用正常脚本计算出来的m为km。分解e1e2=13*13*29*31,最大公因数13。因此,根据上面推导的共模攻击公式 c_1^{s_1}c_2^{s_2}\ \%\ n=m^{e_1s_1+e_2s_2}\ \%\ n=m^{13}\ \%\ n。所以,需要对e进行爆破的同时,需要对m^k进行判别。参考上面那篇博文代码,自己修改了一下,成功得到flag。 

# import libnum
import gmpy2e1e2 = 151931
n = 84130325462189313261610613840200969686006974931596752912032790684163259588936598567112333205675376575653349699558006190805236048677612743149161267856067749658721310907290563192651822456436162893862332677601389286823850869861627186339695681127691895146627792056779915527655786135390557374522354125691160967603061917013801283769106284129418217154101973930260335807437308795976093605719570668187252953377241106277131154146406710208553604162789827629653779259160590959887598160617569785797679836749435646510582655971711741029417262291445133694164402046308899620645557434194447055229215374986345090010304045839732593934047238792984259915694506040189791018542812674501957158976683553103670916884578330339754410985060529044158920150117253712701573184005911278916381934132179281549735149623256759896156546668842438913581742577907775289270627635194061377904271075235797938643630177588509680531035491329021958784461639411836887676505524012023437950803999811659244823170086524422112788479235025578274269284102996813609639046143942802445958501781726534600684331272113138000127764573457550116220984423875964403470300541258257779535477443662855528497647534458034753495233962850546196096902356580597
c1 = 5526981843577863694461841818351673890485198991567434658436770623490360611171871127510696277931234016151166487845669008158730860791187426804659014070306342599593203461644344063671060608024741125863151160681737760825655904785410788429923395448479309181146271656243865686872360070862425446306804455143460283097489937460681185667889651996340602549406246983404553712950903106202637657545318838234089563006281413871664984932655309786145062824775367490677358018047724375137646853089100636910706417957472451511189929270830461215635563336097943145813465687418167325953057560920557811037396525599283369527238547590099431770150410613446367215565152850675941768614103145735526747937173171095406355478150520086157783786157233800132640165602216366493748584897917370650633605868739552901472918463967537246747239034849801736709740501078016729820001908860255554244761014914173396258591186967052039240422376770977181833478209734238146312802796726420114480881217425132382900982749982633798649678323928534549057994366138023265799921199669695092069367137971097924101068016233987031053592978291709434171339215459621867307522559994943572193872611134462980500249831546682238789659886548296132550808672970975
c2 = 34084270081687215738807305215251787451638821299044014914682531967321866632121742567116108518795723102917357389974357667834615280184350852689416055137489247144479830563666110553634856291420207301164541339536763839450977561693676245102910452394708665923322529405310574606327895930541878192148924940959431781480647857477703953124323177425707471323985717664697755487011012344887464332487662104362515163201720826713950129753029845783245282363456550757104613456683996197339839069797091412545873164972661844751681352702261084660646346044820936686595737245383217501391011213177128366315025981912576190042188565795126552888941891222878512876415813788639279098423252518562584392383828846310597706984192183323459131536957686029489643645530071134644693970419530213624757323611027399502740215831349835885291912029119606235799410070446960489470382325032756908742170024039020096953892876059066875780052077940300335448034160045048020007407018279790936847112516378129875607582306514635993448576932928782939218669424318874692862402344461024076485525660329526521172000498582344032675985278644197734558735991092983701763358607940473927824852544744622220580239511275435637081454423079295014742864719778127def rsa_gong_N_def(e1, e2, c1, c2, n):  # 共模攻击函数e1, e2, c1, c2, n = int(e1), int(e2), int(c1), int(c2), int(n)print("e1,e2:", e1, e2)s = gmpy2.gcdext(e1, e2)print("mpz:", s)s1 = s[1]s2 = s[2]if s1 < 0:s1 = - s1c1 = gmpy2.invert(c1, n)elif s2 < 0:s2 = - s2c2 = gmpy2.invert(c2, n)m = (pow(c1, s1, n) * pow(c2, s2, n)) % nreturn int(m)def de(c, e, n):  # 因为此时的m不是真正的m,而是m^k,所以对m^k进行爆破k = 0while k < 1000:  # 指定k小于1000mk = c + n * k# 返回的第一个数值为开方数,第二个数值为布尔型,可整除为true,可自行测试flag, true1 = gmpy2.iroot(mk, e)if True == true1:# print(libnum.n2s(int(flag)))return flagk += 1def i2s(i):length = len(str(hex(i)).replace('0x', ''))length = length // 2 + length % 2b = (i).to_bytes(length, 'big')try:s = b.decode('ascii')return sexcept:return Nonefor e1 in range(2, e1e2):if e1e2 % e1 == 0:  # 爆破可整除的ee2 = e1e2 // e1c = rsa_gong_N_def(e1, e2, c1, c2, n)e = gmpy2.gcd(e1, e2)m1 = de(c, e, n)if m1:  # 指定输出m1# 可以使用libnum.n2s把m1转换成字符串,也可以使用自己写的i2s,print(libnum.n2s(int(m1)))# m1 = 13040004482825621020299718708493757526231130069031398679622047997097305186529331218280047229print(i2s(int(m1)))

在众多爆破结果里面找到flag

0x0D、next

这篇关于2022年第三届指挥官杯练习赛题目和writeup的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/339668

相关文章

题目1254:N皇后问题

题目1254:N皇后问题 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: N皇后问题,即在N*N的方格棋盘内放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在同一斜线上。因为皇后可以直走,横走和斜走如下图)。 你的任务是,对于给定的N,求出有多少种合法的放置方法。输出N皇后问题所有不同的摆放情况个数。 输入

题目1380:lucky number

题目1380:lucky number 时间限制:3 秒 内存限制:3 兆 特殊判题:否 提交:2839 解决:300 题目描述: 每个人有自己的lucky number,小A也一样。不过他的lucky number定义不一样。他认为一个序列中某些数出现的次数为n的话,都是他的lucky number。但是,现在这个序列很大,他无法快速找到所有lucky number。既然

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(

码蹄集部分题目(2024OJ赛9.4-9.8;线段树+树状数组)

1🐋🐋配对最小值(王者;树状数组) 时间限制:1秒 占用内存:64M 🐟题目思路 MT3065 配对最小值_哔哩哔哩_bilibili 🐟代码 #include<bits/stdc++.h> using namespace std;const int N=1e5+7;int a[N],b[N],c[N],n,q;struct QUERY{int l,r,id;}que

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

2024 年高教社杯全国大学生数学建模竞赛题目——2024 年高教社杯全国大学生数学建模竞赛题目的求解

2024 年高教社杯全国大学生数学建模竞赛题目 (请先阅读“ 全国大学生数学建模竞赛论文格式规范 ”) 2024 年高教社杯全国大学生数学建模竞赛题目 随着城市化进程的加快、机动车的快速普及, 以及人们活动范围的不断扩大,城市道 路交通拥堵问题日渐严重,即使在一些非中心城市,道路交通拥堵问题也成为影响地方经 济发展和百姓幸福感的一个“痛点”,是相关部门的棘手难题之一。 考虑一个拥有知名景区

力扣 739. 每日温度【经典单调栈题目】

1. 题目 理解题意: 1.1. 给一个温度集合, 要返回一个对应长度的结果集合, 这个结果集合里面的元素 i 是 当前 i 位置的元素的下一个更高温度的元素的位置和当前 i 位置的距离之差, 若是当前元素不存在下一个更高温度的元素, 则这个位置用0代替; 2. 思路 本题用单调栈来求解;单调栈就适用于来求当前元素左边或者右边第一个比当前元素大或者小的元素;【单调栈:让栈中的元素保持单调

msyql执行效率的问题以及常见基础面试题目

SQL被称为结构化查询语言(Structured Query Language )是操作和检索关系型数据库的标准语言 SQL语言包括三种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML)及数据控制语言(DCL)。 ※ 数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句。    Data Definition Language ※ 数据

2024 年高教社杯全国大学生数学建模竞赛题目【A/B/C/D/E题】完整论文+代码+结果

编辑 2024国赛A题参考论文https://download.csdn.net/download/qq_52590045/897183672024国赛D题参考论文https://download.csdn.net/download/qq_52590045/897158482024国赛E题参考论文https://download.c

上海大学《2022年836+915自动控制原理真题及答案》 (完整版)

Part1:2022年上海大学真题题目 学硕836 专硕915 Part2:2022年上海大学真题答案 学硕836 专硕915