商丘师范ctf比赛wp(部分web)
Web
Ping
RceMe
限制get请求字符串长度小于等于五,用nl代替cat
EzGame
分数超过2048得flag,get修改分数
伪装
伪造cookie,生成一个 is_admin=1 且 name='sjx' 的 Session Cookie,替换掉当前的 session
抓包,将cookie修改为生成的cookie,出flag
小小查询系统
Sql注入,查看所有数据库名
在ctf数据库中找到flag
Input a number
intval($num,0)==114514将num转化为整数,即可传入num=114514.111即可绕过第一个
Ez_calculate
控制台中输入自动计算并提交的js代码
获得flag
baby rce
俩层绕过,第一层SHA1比较,get传参,/?param1=aaroZmOk¶m2=aaK1StfY
第二层调用TYctf类的静态方法getKey()来获取flag,payload=TYctf::getKey
Eeaassyy
菜单栏开发者工具查看源代码,找到flag
Upload_Level1
上传一句话木马的png文件,抓包改后缀名为.php,蚁剑链接
Upload_Level2
上传一句话木马,改后缀名为.php, 蚁剑链接,得到flag
Crypto
密室逃脱的终极挑战
exe文件放入ida中,出flag
玩的挺变态啊清茶哥
打开图片,猪圈密码,根据密码表解密,将大写改为小写,得flag
SQCTF{ jijibaotonghualizuoyingxiong}
简单RSA
先分解n,得到pq,再用python脚本解密
你的天赋是什么
密文放入随波逐流中一键解码
春风得意马蹄疾
社会主义核心价值观密码,放入解密网站上去多次加解密,得flag
ezCRT
中国剩余定理(CRT):合并三个同余方程,得到 c=m 3mod(n 1⋅n 2⋅n 3)。
立方根求解:直接对 c 开三次方,恢复明文 m。
编码转换:将整数 m 转换为十六进制,再解码为 UTF-8 字符串。
Python代码如下:
from sympy.ntheory.modular import crt
from gmpy2 import iroot
# 给定的模数和密文
n1 = 64461804435635694137780580883118542458520881333933248063286193178334411181758377012632600557019239684067421606269023383862049857550780830156513420820443580638506617741673175086647389161551833417527588094693084581758440289107240400738205844622196685129086909714662542181360063597475940496590936680150076590681
n2 = 82768789263909988537493084725526319850211158112420157512492827240222158241002610490646583583091495111448413291338835784006756008201212610248425150436824240621547620572212344588627328430747049461146136035734611452915034170904765831638240799554640849909134152967494793539689224548564534973311777387005920878063
n3 = 62107516550209183407698382807475681623862830395922060833332922340752315402552281961072427749999457737344017533524380473311833617485959469046445929625955655230750858204360677947120339189429659414555499604814322940573452873813507553588603977672509236539848025701635308206374413195614345288662257135378383463093
c1 = 36267594227441244281312954686325715871875404435399039074741857061024358177876627893305437762333495044347666207430322392503053852558456027453124214782206724238951893678824112331246153437506819845173663625582632466682383580089960799423682343826068770924526488621412822617259665379521455218674231901913722061165
c2 = 58105410211168858609707092876511568173640581816063761351545759586783802705542032125833354590550711377984529089994947048147499585647292048511175211483648376727998630887222885452118374649632155848228993361372903492029928954631998537219237912475667973649377775950834299314740179575844464625807524391212456813023
c3 = 23948847023225161143620077929515892579240630411168735502944208192562325057681298085309091829312434095887230099608144726600918783450914411367305316475869605715020490101138282409809732960150785462082666279677485259918003470544763830384394786746843510460147027017747048708688901880287245378978587825576371865614
# 使用中国剩余定理求解 c ≡ m^3 mod (n1*n2*n3)
moduli = [n1, n2, n3]
remainders = [c1, c2, c3]
c, N = crt(moduli, remainders)
# 计算立方根 m = c^(1/3)
m, is_exact = iroot(c, 3)
if not is_exact:
print("无法恢复明文:立方根不精确")
else:
# 将整数明文转为字节(处理非UTF-8字符)
hex_str = hex(m)[2:]
# 补齐十六进制长度为偶数
if len(hex_str) % 2 != 0:
hex_str = '0' + hex_str
byte_data = bytes.fromhex(hex_str)
# 尝试UTF-8解码,失败时回退到latin-1或显示十六进制
try:
plaintext = byte_data.decode('utf-8')
except UnicodeDecodeError:
plaintext = byte_data.decode('latin-1') # 兼容所有字节
print("明文 (原始字节):", byte_data)
print("明文 (尝试解码):", plaintext)
print("明文 (十六进制):", hex_str)
丢三落四的小I
dp 泄露攻击,python脚本如下:
#python3
import gmpy2 as gp
e = gp.mpz(65537)
n = gp.mpz(15124759435262214519214613181859115868729356369274819299240157375966724674496904855757710168853212365134058977781083245051947523020090726851248565503324715984500225724227315777864292625995636236219359256979887906731659848125792269869019299002807101443623257106289957747665586226912446158316961637444556237354422346621287535139897525295200592525427472329815100310702255593134984040293233780616515067333512830391860868933632383433431739823740865023004008736555299772442805617275890761325372253913686933294732259451820332316315205537055439515569011020072762809613676347686279082728000419370190242778504490370698336750029)
dp = gp.mpz(1489209342944820124277807386023133257342259912189247976569642906341314682381245025918040456151960704964362424182449567071683886673550031774367531511627163525245627333820636131483140111126703748875380337657189727259902108519674360217456431712478937900720899137512461928967490562092139439552174099755422092113)
c = gp.mpz(4689152436960029165116898717604398652474344043493441445967744982389466335259787751381227392896954851765729985316050465252764336561481633355946302884245320441956409091576747510870991924820104833541438795794034004988760446988557417649875106251230110075290880741654335743932601800868983384563972124570013568709773861592975182534005364811768321753047156781579887144279837859232399305581891089040687565462656879173423137388006332763262703723086583056877677285692440970845974310740659178040501642559021104100335838038633269766591727907750043159766170187942739834524072423767132738563238283795671395912593557918090529376173)
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:]))
Common Modulus
共模攻击,python脚本如下:
from libnum import n2s
import gmpy2
n = 13650503560233612352420237787159267432351878281073422449253560365809461612884248041710373755322100953953257608601227381211434513766352420535096028618735289379355710140356003114010103377509526452574385251495847301426845768427018504464757671958803807138699056193259160806476941875860254288376872925837127208612702688503022494109785623082365323949385021488106289708499091818714253710552213982060745736652306892896670424179736886691685639988637188591805479432332714690818805432648223229601082431517091667297328748597580733946557364100555781113940729296951594110258088501146224322799560159763097710814171619948719257894889
c1 = 3366500968116867439746769272799247895217647639427183907930755074259056811685671593722389247697636905214269760325119955242254171223875159785479900114989812511815466122321484289407596620307636198001794029251197349257235827433633936216505458557830334779187112907940003978773672225479445837897135907447625387990203145231671233038707457396631770623123809080945314083730185110252441203674945146889165953135351824739866177205127986576305492490242804571570833778440870959816207461376598067538653432472043116027057204385251674574207749241503571444801505084599753550983430739025050926400228758055440679102902069032768081393253
c2 = 7412517103990148893766077090616798338451607394614015195336719617426935439456886251056015216979658274633552687461145491779122378237012106236527924733047395907133190110919550491029113699835260675922948775568027483123730185809123757000207476650934095553899548181163223066438602627597179560789761507989925938512977319770704123979102211869834390476278761480516444396187746843654541476645830961891622999425268855097938496239480682176640906218645450399785130931214581370821403077312842724336393674718200919934701268397883415347122906912693921254353511118129903752832950063164459159991128903683711317348665571285175839274346
e1 = 4217054819
e2 = 2800068527
# 检查e1和e2是否互质
gcd, s, t = gmpy2.gcdext(e1, e2)
if gcd != 1:
print("e1和e2不互质,无法使用共模攻击")
exit()
# 计算m
if s
c1 = gmpy2.invert(c1, n)
s = -s
if t
c2 = gmpy2.invert(c2, n)
t = -t
m = (pow(c1, s, n) * pow(c2, t, n)) % n
# 转换为字符串
flag = n2s(int(m))
print(flag.decode())
Misc
ez_music1
将文件拖到audacity中,打开多视图,获得flag