前言
这次的misc居然不是签到,呜呜呜,我们就是个垃圾战队,别为难我们了。但我们队一开始拿了俩个一血,还不错,暂时当了十几分钟的第一。
这次比赛确实难评,其实这个比赛主要是为了帮助大家进步,没必要上纲上线,后面大家在群里吵起来了,没必要,每个学校只有俩队能拿奖也是为了多给弱队机会嘛,再说,也是防作弊的一种机制嘛【狗头保命】
插一句邮电还是老大哥,前三实力确实强,每次都被打得死死的,也被他们大一的学弟暴打了,但听说是高中就开始打CTF,不知道真的假的。
MISC
20201118_zip
来吧,让我们体验一下这道题吧,打开就能看到tips1,(听说这里有伪加密,我用的360压缩直接就出来了,我不知道,但有的话也很简单,拖010改就行了)
一开始以为是这里靠明文攻击,然后后面用7z看了下,发现是AES压缩的,就放弃了。
然后发现Tips2里面提示186开头还是11位,我觉得就是电话号码(结束后他们说是掩码攻击,我当时确实没想到),运气号好,直接爆数字(虽然有误导,但想试试)结果爆出来了(可恶的出题人,前一俩小时真被你唬住了)
然后解开发现压缩包有个提示用banizip打开,那就照做,从tips3也知道这是一个明文攻击,直接用ARCHPR明文攻击就出来了。
我拿到flag啦
这题赛场上没做出来,还是太菜了,大家都是大佬,比赛后我们学校Secure的一位大佬做出来了,说在HTTP 200 OK里,我没看到怎么做的,但我自己做了一下,就做出来了,呜呜呜,就差一点,看到了这个可疑流量的,但base64解不出来就跑了,哎,还是太菜了。整个流量是一个黑客进行网络攻击并提取到的数据(大佬勿喷,我就一菜狗)
其实真正让我怀疑的是这个POST流量在整个包里比较少,而且有个可疑的shell.php直接警觉了,点开来分析一下
比赛的时候一直在分析上面的那串,解了半天只出现了一些复杂的代码,就分析不下去了,答案其实是分析下面那串base64
众所周知flag的base64编码是ZmxhZw==所以我们把前面那点不知道什么东西给删了,flag就出来了(我也不知道对不对,求大佬指点)。
但我在tcp.stream eq 285里面发现了这个,里面有半截flag,不知道是什么,求大佬指点
Web
Check
这类我们就做出一道签到题
其他题我们这种弱队确实做不出来,但看到sql中等注入好像大家也都没做出来
`POST /?upload=I want flag` 就拿到 flag。
照片没了
Crypto
Get the ciphertext
也是一道普普通通的签到题
第一段 ook,用 https://www.dcode.fr/ook-language 解出来是 `flag{fd62371a16e34b`
第二段 fuckbrain,用 https://www.dcode.fr/brainfuck-language ,出来 `4236af4c815c70d2c2}`
加密了的银行账号
经典的共模攻击,代码展示:
#由
c1 = powmod(m, e1, n)
c2 = powmod(m, e2, n)
#有:
c1 ^ s1 = powmod(m, e1, n) ^ s1
c2 ^ s2 = powmod(m, e2, n) ^ s2
#相乘:
(c1 ^ s1) * (c2 ^ s2) = m ^ (e1 * s1) * m ^ (e2 * s2) % n
#由贝祖等式:e1 * s1 + e2 * s2 = 1
(c1 ^ s1) * (c2 ^ s2) = m % n
#即flag可得:
m = powmod(m, s1, n) * powmod(m, s2, n) % n
'''
from Crypto.Util.number import *
from gmpy2 import *
n = 839123934774248293554478900304805652005840721338630070412976096583047842775036231818774021937639649434688167897414096334116238084902194754637764024750792816721392354301739479608067847343792597904131386883826936202738091643779024125141255264223247609242732797223111375906539968766539699070553220024835237726906103489324159983224252110158455246369757060858217509822937163152185972444899932745256697748371372158650749600653559864702036394611754651413137001635037310384486835415211127040685857231115447354804277699698486014015179198727374388217592948103504783273235502069953842424278640309430812418432009515965525235385145845104436993038590088545931577484359861647891101843425163557830467877799969686630827090586068831286572090214049241078519089880483666226861834918996928339953135949773709823413539900554860599681940844430108740145857463465317542463460369739470382431178811713605099730666854586750420573809975950891432736357055207659867908960389714343184134892741009452909757459817636609433427812924456782545899375540553326445169985403837463499577711582154287873330657825693756960147166773280203881994461147955853897180714973259859345569061880741001595805100970589056125774856383495601030032566633812017502429733745385901436096392471289
e1 = 806324329
c1 = 163820585866464748037603720038892832306554988255206332863466690031251112393421587550794518466136449805972150046258007843678810670858951387865544768705860991912961811815403716953592063388227590617471347829805148489681889353092402164643007648065816490395610440358210631794473074518280532005297323838015000696012544093096729757248560313800119985077628515064121290046849842744649645290768993658687322260767120966685347950282971463554789285475522426817366147609763855420569516751283073981560233583052224238576709207099742418240326781531079937393665507293492304460161648982800074101163393514977619796309524278704876480025742024160221890561273557038260189577859945055862584556222614337893856036135407528568963925417637444291244325443939058848883360791328763182036736991538226734334763710031379376903812920870564906505631446736446351432678455275793428547686664667539262939321057216659646680245853118886811477642137593470574356360886586517623917262716025748350280034971229225621439570870095238910932174538777011907435005615951965481796660744335386804670981037480723346003591779345801230978946027215192726050182071464556997361600570176261668330138026540849862934790571484498436157306820319598552136374283506981655462848489790309701474742231765
e2 = 981665371
c2 = 273242589426480927826167181440879042261352093903608434884600905569452427185873771727772405404505268635334400366319247889103997045566310053661596019565754930974302295439331258267831862178643151110272578792132366938072461672903904131261872916290092535496394107067073669859724326918200655564533782970003007228779265786965898584930920671749110403164178828194786698903692367972071819235589738473333448909143263601696287295696594333362374640947177450581133679785322780121777626014738094838546764265270540875237752587231957198655334919482389040609616499842407581630400649266699612327355801522626608567074516199161612041393966746535463537504182396463306145605244107129067775658018376118992392243654356151728789607874911337696728619623272935933692059586381093273314357325686727609120412886454183336002684696756892485413467576457476017669378668920561188578039728356555469910921968008598794341024437414411415025750797861498237313315133504763627579092827456484850672726497492397166505646338025210493939717283132813965892266364677296542793933736272452657509115949431627829562871153172728793514100920642454624860024655189013182334029353933043493447139401983635409889928162529397033633451464690205097492717456395000561496206701612814279836034509030
def e_gcd(a, b):
# 构造贝祖等式
if b == 0:
return a, 1, 0
else:
g, x, y = egcd(b, a % b)
return g, y, x - a // b * y
s = e_gcd(e1, e2)
s1 = s[1]
s2 = s[2]
if s1 < 0:
s1 = -s1
c1 = invert(c1, n)
if s2 < 0:
s2 = -s2
c2 = invert(c2, n)
m = long_to_bytes((powmod(c1, s1, n) * powmod(c2, s2, n)) % n)
print(m)
Reverse
Reverse2附件
源码展示:
080483eb <convert>:
80483eb: 55 push ebp
80483ec: 89 e5 mov ebp,esp
80483ee: 53 push ebx
80483ef: 83 ec 10 sub esp,0x10
80483f2: c7 45 f8 00 00 00 00 mov DWORD PTR [ebp-0x8],0x0
80483f9: eb 20 jmp 804841b <convert+0x30>
80483fb: 8b 55 f8 mov edx,DWORD PTR [ebp-0x8]
80483fe: 8b 45 08 mov eax,DWORD PTR [ebp+0x8]
8048401: 01 d0 add eax,edx
8048403: 8b 55 f8 mov edx,DWORD PTR [ebp-0x8]
8048406: 89 d3 mov ebx,edx
8048408: 8b 4d f8 mov ecx,DWORD PTR [ebp-0x8]
804840b: 8b 55 08 mov edx,DWORD PTR [ebp+0x8]
804840e: 01 ca add edx,ecx
8048410: 0f b6 12 movzx edx,BYTE PTR [edx]
8048413: 31 da xor edx,ebx
8048415: 88 10 mov BYTE PTR [eax],dl
8048417: 83 45 f8 01 add DWORD PTR [ebp-0x8],0x1
804841b: 8b 45 f8 mov eax,DWORD PTR [ebp-0x8]
804841e: 3b 45 0c cmp eax,DWORD PTR [ebp+0xc]
8048421: 7c d8 jl 80483fb <convert+0x10>
8048423: 8b 45 08 mov eax,DWORD PTR [ebp+0x8]
8048426: 83 c0 1a add eax,0x1a
8048429: c6 00 00 mov BYTE PTR [eax],0x0
804842c: 90 nop
804842d: 83 c4 10 add esp,0x10
8048430: 5b pop ebx
8048431: 5d pop ebp
8048432: c3 ret
int main()
{
char p[] = { 102, 109, 99, 100, 127,
100, 117, 99, 110, 86,
110, 106, 96, 126, 101,
101, 79, 112, 126, 119,
103, 126, 124, 113, 116,
100 };
int length = sizeof(p) / sizeof(p[0]);
convert(p,length);
puts(p);
return 0;
}
Ϊ Ϊflag
把那坨 convert() 函数的汇编转成C
```
void convert(char* p, int length) { // ebp+0x8, ebp+0xc
int i = 0; // ebp-0x8
while (i < length) { // cmp eax,DWORD PTR [ebp+0xc]
p[i] = p[i] ^ i; // xor edx,ebx
i++; // add DWORD PTR [ebp-0x8],0x1
}
p[length] = '\0'; // // p[length] = '\0'
}
```
运行,得到答案。 `flag{asdf_dalskj_aldskjfl}`