VolgaCTF Writeup by Angr4Mainyu
1.shadow_cat
这个给了一个shadow.txt文件和一串加密后的字符串,一眼倒是看不出什么东西,直接尝试对shadow文件进行爆破。
使用hash cat
工具,然后选择一个字典进行爆破,很快得到结果:
然后根据与用户名对应,得到如下的替换:
1 | 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 |
显然接下来只需要根据这个替换,就可以得到我们的flag了,直接编写脚本替换即可:
1 | text = 'hajjzvajvzqyaqbendzvajvqauzarlapjzrkybjzenzuvczjvastlj' |
(交上去的时候注意格式)
flag:VolgaCTF{pass_hash_cracking_hashcat_always_lurks_in_the_shadows}
2.JOI
不知道这一题凭啥值150分..也太水了吧
直接使用Stegsolve
打开,然后转到Red plane 0
,就会发现这个二维码不太一样,直接扫码就可以拿到flag了
flag:VolgaCTF{5t3g0_m4tr3shk4_in_4cti0n}
3.Blind
这题是考察了RSA的攻击手法,从给出的服务器端脚本可以看出,能让我们执行的命令只有dir
,ls
,cat
,cd
这几个命令。
而脚本中并没有对ls和dir命令进行过滤,我们可以直接输入,看看目录下有些什么:
1 | zhangzhh@你这聋子:/mnt/d/CTF/volcactf/Blind$ nc blind.q.2019.volgactf.ru 7070 |
发现目录下有个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 flag
的signature
了
1 | 'cat flag' = 7161132565001953639 |
分解成两个数103
和69525558883514113
,然后分别得到对应的两个signature
1 | m1 = 17638787469642039435318581385618808297268376774234879657983959486588488518602104982122891156593317044292766030845687731228499038739756875964186679785382736177049112662098526726358737509567429436403098863630151350780807034720456854963415607468739968754202506998385349296290129607434002404738918120538229071656978017808466596814950226784314700317088934348540608219987543730472643691009060755872926833135443517648919261924577246564970061451282151317589401229797945517104524760889684000361260339607131828972845536284354091935086720068566032733497050626156914558343862499749490577165803099065730472936347462992778753796941 |
计算得到
1 | m = (m1 * m2) %n |
成功拿到flag
:
flag:VolgaCTF{B1ind_y0ur_tru3_int3nti0n5}
PS:按照同样的方法,我们还可以拿到服务器端的私钥,只需要将cmd
换成cat private_key.py