FSCTF2023-WP
前言
去年10月份办的联合竞赛,题目相对简单,量大管饱,本人出了一道WEB和若干Misc
Cypto
RSA1
1、题目信息
提交格式:FSCTF{你所解出的内容}
p=1458769258361
q=4556983871563
e=17
求d
2、解题方法
Exp如下:
点击查看代码
from gmpy2 import *
p=1458769258361
q=4556983871563
e=17
d = int(invert(e, (p-1)*(q-1)))
print(d)
\#FSCTF{5865518808244394324786753}
RSA 2
1、题目信息
提交格式:FSCTF{你所解出的内容}
c=90362297576572826064831133206230135349790392078780406000643496612200873754835039374184323808342127071833274981191134125413478105835272238356352724573228797863805124195170088819735610736936895478614898105848968069280022022112207095140266709372221090586917729998024205978412679448008696923580889787529663283314
p=8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229
q=11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e=65537
2、解题方法:
点击查看代码
import gmpy2
from Crypto.Util.number import long_to_bytes
c=90362297576572826064831133206230135349790392078780406000643496612200873754835039374184323808342127071833274981191134125413478105835272238356352724573228797863805124195170088819735610736936895478614898105848968069280022022112207095140266709372221090586917729998024205978412679448008696923580889787529663283314
p=8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229
q=11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e=65537
phi = (p-1) * (q-1)
n = p * q
d = gmpy2.invert(e, phi)
m = pow(c, d, n)
print(m)
\#FSCTF{20230824}
RSA 3
RSA 3
1、题目信息
提交格式:FSCTF{你所解出的内容}
from Crypto.Util.number import bytes_to_long
m=bytes_to_long(flag)
n= 12308543373374311860115195114269947739026255098864232126071500623399852788903738569949462616714391748269539072128882946132686996592089735285396762634029371785959865779256901123369306119124563405765293657606975290441243965513640680841871955014230301486214824204887945375140818283280272607903500556306646445508386218951500563603482945071727344737690804338144982687000734071274618240408238519378280819162796749148066754028700125846348589164721591354555019608871411236973606149388257533629388508942271702742078883636357856776193846813894734271905070538713351614750057245897158615891962167410053552739441195871000310777649
e= 65537
dp= 28196759050232165736649945458463681080421101473761579424309687746007021074159564720195299959516638110870101025657932732247788828322476803386736345945717104030991724584628153257976163663460034720811420324255626233108130037584679035250792445830510130682783638394418531763109219293027733347554816808577799709553
from Crypto.Util.number import bytes_to_long
m=bytes_to_long(flag)
n= 12308543373374311860115195114269947739026255098864232126071500623399852788903738569949462616714391748269539072128882946132686996592089735285396762634029371785959865779256901123369306119124563405765293657606975290441243965513640680841871955014230301486214824204887945375140818283280272607903500556306646445508386218951500563603482945071727344737690804338144982687000734071274618240408238519378280819162796749148066754028700125846348589164721591354555019608871411236973606149388257533629388508942271702742078883636357856776193846813894734271905070538713351614750057245897158615891962167410053552739441195871000310777649
e= 65537
dp= 28196759050232165736649945458463681080421101473761579424309687746007021074159564720195299959516638110870101025657932732247788828322476803386736345945717104030991724584628153257976163663460034720811420324255626233108130037584679035250792445830510130682783638394418531763109219293027733347554816808577799709553
c= 1855798257044238280327042455832785889763141234883180404158555071443088630113034033050409259513632343742665544043437830959750873431928980910236398026670945184328950692568113819821699696418438157336263799808404698795433243968536256780396910914692949484556950491722527661706255009863481905590371725089587377065000354109396062360440021447607401687082247775453369117424848927386857425051097931983703966253652921113920387008048024308793686643944404541941182997963873579988680965558581885273185721576668001462817150245955628293258512024323515581063235248627223179117549540541642185815489978089367061102920114395871329023208c= 1855798257044238280327042455832785889763141234883180404158555071443088630113034033050409259513632343742665544043437830959750873431928980910236398026670945184328950692568113819821699696418438157336263799808404698795433243968536256780396910914692949484556950491722527661706255009863481905590371725089587377065000354109396062360440021447607401687082247775453369117424848927386857425051097931983703966253652921113920387008048024308793686643944404541941182997963873579988680965558581885273185721576668001462817150245955628293258512024323515581063235248627223179117549540541642185815489978089367061102920114395871329023208
2、解题方法
dp泄露
Exp如下:
点击查看代码
import gmpy2 as gp
e = 65537
n = gp.mpz(12308543373374311860115195114269947739026255098864232126071500623399852788903738569949462616714391748269539072128882946132686996592089735285396762634029371785959865779256901123369306119124563405765293657606975290441243965513640680841871955014230301486214824204887945375140818283280272607903500556306646445508386218951500563603482945071727344737690804338144982687000734071274618240408238519378280819162796749148066754028700125846348589164721591354555019608871411236973606149388257533629388508942271702742078883636357856776193846813894734271905070538713351614750057245897158615891962167410053552739441195871000310777649)
dp = gp.mpz(28196759050232165736649945458463681080421101473761579424309687746007021074159564720195299959516638110870101025657932732247788828322476803386736345945717104030991724584628153257976163663460034720811420324255626233108130037584679035250792445830510130682783638394418531763109219293027733347554816808577799709553)
c = gp.mpz(1855798257044238280327042455832785889763141234883180404158555071443088630113034033050409259513632343742665544043437830959750873431928980910236398026670945184328950692568113819821699696418438157336263799808404698795433243968536256780396910914692949484556950491722527661706255009863481905590371725089587377065000354109396062360440021447607401687082247775453369117424848927386857425051097931983703966253652921113920387008048024308793686643944404541941182997963873579988680965558581885273185721576668001462817150245955628293258512024323515581063235248627223179117549540541642185815489978089367061102920114395871329023208
)
for x in range(1, e):
if(e*dp%x==1):
p=(e*dp-1)//x+1
if(n%p!=0):
continue
q=n//p
phin=(p-1)*(q-1)
d=gp.invert(e, phin)
m=gp.powmod(c, d, n)
if(len(hex(m)[2:])%2==1):
continue
print('--------------')
print(m)
print(hex(m)[2:])
print(bytes.fromhex(hex(m)[2:]))
\#FSCTF{Cheese_snow_1eop@rd}
埃塞克的秘密
1、题目信息
埃塞克先生将自己的秘密藏在盒子里并交给了ROT保管
埃塞克先生将自己的秘密藏在盒子里并交给了ROT保管,埃塞克先生在盒子上留下了这样一串数字:
117 36 114 37 117 76 37 57 111 63 60 48 74 64 70 78
2、解题方法
厨子一把梭:
关键的Vigenere
1、题目信息
观其表,解其里
key.txt
FNY CQ HLQSEPNVJ
提示:Keyword
(观其表,解其里)
题目.txt
QGUMI{py@nessfz_tzhozr!}
2、解题方法
我们的思路是这样的,看到题目说是维吉尼亚,所以肯定要key才能解,如何去找key?
看到另一个文件提示:Keyword,知道是关键字密码,我们肯定是要用这个关键字密码来解出维吉尼亚解密所需的key
但关键字密码需要知道关键字,显然没有发现。。竟然给了总会有关键字的不然没法解。
仔细读提示:观其表,解其里。。什么意思?就是观察题目外表,解附件里面密文。
所以我们发现关键字就是“Vigenere”,而且题目说关键的Vigenere,很显然。
如果实在发现不了那就把题目所涉及的所有字符都试一遍肯定有结果的。
所以我们关键字解码
得到密匙为:
LOSTDREAM
这和我们按照flag前缀手算出来的前五个字母一样,所以它就是key了,然后维吉尼亚解码
兔帽的奇妙冒险
1、题目信息
有一只名叫贝斯64先生的兔子。它戴着一顶古老的兔帽子,帽子上绣着奇异的符文,传说这是一种能与神秘力量连接的魔法帽子。
OFR3c05RTEFKM2Q3QkxqRGlTbWthWExxSXhrZFo3SU5DVWRkOTVFQ2JUSE1VcXpRQk9hc3hqMzRrbHRJMD0=
2、解题方法
看到题目肯定想到要用兔子流密码解码,问题是如何获得兔子流密码?
首先,我们来分析“有一只名叫贝斯64先生的兔子。”因此可以想到是兔子流密码用base64加密了,所以我们需要base64先解一下
得到
8TwsNQLAJ3d7BLjDiSmkaXLqIxkdZ7INCUdd95ECbTHMUqzQBOasxj34kltI0=
然后就是考察我们对兔子流密码的认识了,分析最后一句话“帽子上绣着奇异的符文,传说这是一种能与神秘力量连接的魔法帽子。”与神秘力量连接的魔法帽子,重点是在这个连接上。有连接说明什么?肯定是断了,哪里断了呢?我们仔细看解密后的信息发现兔子流密码一部分前缀没了,完整的兔子流密码前缀长这样
U2FsdGVkX1
所以我们加上去
U2FsdGVkX18TwsNQLAJ3d7BLjDiSmkaXLqIxkdZ7INCUdd95ECbTHMUqzQBOasxj34kltI0=
然后解码就OK啦
这里还有个小知识,兔子流base64后的前缀会发现是Salted开头的哈哈哈。
认识密码出题人,可代打出题人(doge)
Misc
小试牛刀
放入010 尾部有flag 但是是假的 尝试Base64 解码得到密码:123
JPG 想到JPHS工具进行尝试 输入密码 得到flag (多做题,多尝试)
FSCTF{huang_duduanwangu}
舔狗红中
跟摩斯密码有关,应该是绿色信息为点,回复信息为横
..-. ... -.-. - ..-. ----.-- .. -- .. ... ... -.-- --- ..- ... --- -- ..- -.-. .... -----.-
(emo了出点烂题怎么了)
夜深人静的时候也会偷偷emo
接爆破,得到密码:12345
.\Decode.exe -X -P 12345 flag.mp3
行不行啊细狗
预期解:
第一步把隐藏文字选项打开
第二步把所有文字改成其他颜色
第三步改文件名后缀为zip,上压缩包里找去
非预期解:
解压文件后,sublime打开document.xml文件
flag分三段,均在此文件内找到,拼起来即可
为什么不换换思路捏
密文:3956305A7652305877676D656E3532626F395664776B3358723557596F52335835423055375A4556444E6C52
base16解码
FSCTF{S@y_thank_y0u_hongzh0_DogE}
Web
寻找蛛丝马迹
我出这道题的时候以为这是一道签到题
第一段
ctrl u
第二段
顺着找css
这个其实是我出题的锅,没想到会出现编码问题,从第二段开始都是有编码问题,不过正好就当考察了(doge
火狐自带的编码修复或者直接抓包看响应
右上角三道杠->更多工具->定制工具栏
再或者直接在检查里看
第三段
js里
第四段
根据提示访问robots.txt,考察robots.txt的定义
第五段
根据提示访问.DS_store
查看
第六段
备份文件挺多的,这个直接dirsearch爆破也能出来其实,www.zip
查看
PS:如果在这个压缩包上再加一个伪加密将是绝杀