VolgaCTF Writeup

VolgaCTF Writeup by Angr4Mainyu

1.shadow_cat

这个给了一个shadow.txt文件和一串加密后的字符串,一眼倒是看不出什么东西,直接尝试对shadow文件进行爆破。

使用hash cat工具,然后选择一个字典进行爆破,很快得到结果:

1554085793632

然后根据与用户名对应,得到如下的替换:

1
2
jr:1 z:_  a:a  x:b q:c l:w v:h e:i f:j b:k r:l g:m n:n o:x p:y s:d c:e w:f d:g t:o h:p m:q k:u i:v y:r j:s u:t
underscore:z

显然接下来只需要根据这个替换,就可以得到我们的flag了,直接编写脚本替换即可:

1
2
3
4
5
text = 'hajjzvajvzqyaqbendzvajvqauzarlapjzrkybjzenzuvczjvastlj'
for j in text:
... print(a[j],end = '')
...
pass_hash_cracking_hashcat_always_lurks_in_the_shadows

(交上去的时候注意格式)

flag:VolgaCTF{pass_hash_cracking_hashcat_always_lurks_in_the_shadows}

2.JOI

不知道这一题凭啥值150分..也太水了吧

直接使用Stegsolve打开,然后转到Red plane 0,就会发现这个二维码不太一样,直接扫码就可以拿到flag了

1554086403979

flag:VolgaCTF{5t3g0_m4tr3shk4_in_4cti0n}

3.Blind

这题是考察了RSA的攻击手法,从给出的服务器端脚本可以看出,能让我们执行的命令只有dir,ls,cat,cd这几个命令。

而脚本中并没有对ls和dir命令进行过滤,我们可以直接输入,看看目录下有些什么:

1
2
3
4
5
6
zhangzhh@你这聋子:/mnt/d/CTF/volcactf/Blind$ nc blind.q.2019.volgactf.ru 7070
Enter your command:
3 ls
flag
private_key.py
server.py

发现目录下有个flag文件,那么就是我们的目标就是读取这个flag文件了,让服务器执行cat flag命令。

但是直接执行cat flag的话,我们并没有对应这个命令的signature,所以系统并不会让我们执行这个命令。这时注意到其实还有个sign指令,能够返回任意指令的signature,但是不能是cat命令。

那么现在思路就有了,我们需要间接地求出cat flag对应的的signature。根据数论的知识我们知道:
$$
(m1 \times m2) \bmod n = ((m1 \bmod n ) \times(m2 \bmod n)) \bmod n
$$
那么只需要把cat flag对应的数进行分解,然后分别求出其加密之后的signature,就可以计算得到cat flagsignature

1
2
3
'cat flag' = 7161132565001953639
factor 7161132565001953639
7161132565001953639: 103 408479 170205956447

分解成两个数10369525558883514113,然后分别得到对应的两个signature

1
2
m1 = 17638787469642039435318581385618808297268376774234879657983959486588488518602104982122891156593317044292766030845687731228499038739756875964186679785382736177049112662098526726358737509567429436403098863630151350780807034720456854963415607468739968754202506998385349296290129607434002404738918120538229071656978017808466596814950226784314700317088934348540608219987543730472643691009060755872926833135443517648919261924577246564970061451282151317589401229797945517104524760889684000361260339607131828972845536284354091935086720068566032733497050626156914558343862499749490577165803099065730472936347462992778753796941
m2 = 25546621042567021743921441656485106150773028771975739792395292839524991698929912254223690969899881717956277954181362001941084170643987790900354897720201198641241865168483559029881918212009804506724025449021632061776772429841832820822248791924286727129159693622880243660612170666428534633987262142793095526136680155894125768641992318145581399148611597046840862019696663630366704554135979924498320452192198270792856017753126515861945695789558862132300276176002546820728010847776307161844028813344882966643480384082356366425666269055026587464161965878493074595945942518737289891784899462357520515374555016064334840465912

计算得到

1
2
m = (m1 * m2) %n
m = 24276592954466402792157532919706447334355948690098023035375614012157378412616233865544533025515869836447793226406373271083160180523082800598281266834619631704245143244545577613294590334637358684061108293899492468337030535564036215463887905645938530571058038030943037016298964167966109577883005551522062164917343818964991120441652232394288629520079832539360872798332983684006902802429243645009242747601354050053448137191986860769673762567997572657102990869994555786984110522299362261357652756180804304984027320764350120137457095771345729635881422070403269427999652221843885023772233721400195669139542781850847904777323

1554090605998

成功拿到flag:

flag:VolgaCTF{B1ind_y0ur_tru3_int3nti0n5}

PS:按照同样的方法,我们还可以拿到服务器端的私钥,只需要将cmd换成cat private_key.py

1554090737643