JUSTCTF2020 Crypto&Misc wp

Crypto

1.Crypto Sign IN

打开附件可以得到如下的颜文字

゚ω゚ノ= /`m´)ノ ~┻━┻   //*´∇`*/ ['_']; o=(゚ー゚)  =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (o^_^o)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (o^_^o)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (c^_^o)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (c^_^o)+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+ (c^_^o)+ (゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_');

将其复制到浏览器的控制台就可以得到flag,如图

2.So easy

打开附件得到三个文件,根据题目的提示直接去看py脚本,将脚本拉到最下方可以看到如图

当然这个脚本输入任意值进去最后都会跳转到这,所以不影响,然后将{}内值逆序就是正确的flag

3.Basic and advanced

题目:

Xzetgstv axivgi gh dbqnl uhf kkq hbarcgrbha rls xouv mu ngg, rls usizlcxfu rpt htvvl wtff km rkoeb, qd bh kj yalc erjaxr LLQI hp ksnulcafnol eeiq

根据提示可知使用了凯撒加密和维吉尼亚加密

解法一:观察到“LLQI”与其他不同,联想到flag格式JUST{},初步猜测LLQI=JUST,在这种假设下可推得密钥的一部分为cryp,那么又可以联想到crypto,尝试解密,得到

Vigenere cipher is known for its simplicity and ease of use, and beginners are often hard to crack, so it is also called JUST ob ibpfsoyopzs qcrs

确实出现了JUST,并且前面明文可读,说明key就是crypto

接下来对JUST后面的内容进行凯撒解密,枚举所有偏移量得到下图,可看到可读字符串

按照题目给的格式处理以后就是flag

解法二:通过在线网站爆破key可得到,网址:https://www.dcode.fr/

之后解法与解法一相同

4.Drunk Laffey

题目:

0111001000111110111010010101101101111001101000000011010001110011010010100100000100101101111101

提示:

101011101111010100101101011010110001101111111100010011001000110011001100110001101110000110001101101

根据题目描述可知这是摩斯密码,尝试01转摩斯,但是发现题目无空格。再看提示,因为考虑到是一道简单题,所以尝试将提示的01转字符或十进制这种简单的转换。将提示转十进制可得

433174344136236336221131312237

猜测这应该是分组,按照提示分组后得到

0111 001 000 1 1111011 1010 010 1011 0110 1 111 001101 00 000 001101 000 111 001101 00 10 1 0 010 0 000 1 00 10 110 1111101

然后就可以01→摩斯→明文

JUST%u7bCRYPTO_IS_SO_INTERESTING%u7d

将此值处理一下就可以得到flag

5.Are you blind?

附件打开,一段盲文,一个加密的key

ciphertext: ⠂⣁⠂⢕⠂⣰⠂⣉⠂⢔⠂⣎⠂⣀⠂⣗⠂⣀⠂⣥⠂⣁⠂⣌⠂⣋⠂⣂==
encrypted key: rrted ushsq wgpv

最后给了三个提示:

根据提示一:bifid cipher需要一个5*5的密码表,但是现在没有密码表
根据提示二:猜测密码表是按照电脑键盘的顺序排列,但是键盘有26位,密码表只需要25位
根据提示三:约定俗成的规则是指剔除“z”,因为“z”的出现频率是26个英文字母中最低的

然后就可以得到密码表:

  1 2 3 4 5
1 q w e r t
2 y u i o p
3 a s d f g
4 h j k l x
5 c v b n m

之后的话可以选择手撸,也可以用工具

手撸版解法:
密文:rrted ushsq wgpv
推出坐标:14 14 15 13 33 22 32 41 32 11 12 35 25 52
合并坐标:1414151333 2232413211 12352552
然后根据bifid的原理要将其分为“行”和“列”,即
行:14141 22324 1235
列:51333 13211 2552
然后根据行列坐标得到明文:the key is yhwpgv
然后去解盲文密码即可(写这个主要是让你们加深对bifid的理解)

工具版解法:
注意去掉空格

6.Big_Gift

题目:

import Crypto.PublicKey.RSA as RSAdef enc(msg, pubkey):(n,e) = pubkeym = int.from_bytes(msg.encode(), byteorder = 'little')c = pow(m, e, n)ctxt = (c).to_bytes(c.bit_length() // 8 + 1, byteorder = 'little')return ctxtwith open("pubkey.pem", "r") as f:ciph = RSA.importKey(f.read())pubkey = (ciph.n, ciph.e)with open("flag.txt", "r") as f:flag = f.read()flag = enc(flag, pubkey)with open("flag.enc","wb") as fs:fs.write(flag)

还有一个pubkey以及加密的flag文件

这道题很简单,因为N过大导致m^e%N == m^e,直接开方得到flag,但是要注意分组

payload:

import sys
import Crypto.PublicKey.RSA as RSA# with open("pubkey.pem", "r") as f:
#    ciph = RSA.importKey(f.read())# with open("result.txt","w") as fs:
#   fs.write("e = "+str(ciph.e) + "\nn="+str(ciph.n))# def enc(msg, pubkey):
#    (n,e) = pubkey
#    m = int.from_bytes(msg, byteorder = 'little')
#    c = pow(m, e, n)
#    ctxt = (c).to_bytes(c.bit_length() // 8 + 1, byteorder = 'little')
#    return ctxtimport gmpy2
from Crypto.Util.number import long_to_bytes
def dec(msg,privatekey):c = int.from_bytes(msg,byteorder="little")assert gmpy2.iroot(c,privatekey)[1] == Truem = gmpy2.iroot(c,privatekey)[0]m = int(m)ctxt =  (m).to_bytes(m.bit_length() // 8 + 1 ,byteorder = 'little' )return ctxtwith open('flag.enc',"rb") as rs:msg = rs.read()print(str(dec(msg,65537)))

7.Baby Rsa

题目:

from  Crypto.Util.number import getPrime
flag = 'JUST{**********}'p,q = [getPrime(40) for _ in range(2)]
n = p*q
m = int.from_bytes(flag.strip("JUST")[1:-1].encode(),"big")
# e = secretprint("c ="+pow(m,e,n))
print("x ="+pow(3,e,n))
print("y ="+pow(9,e,n))
print("z ="+pow(27,e,n))
"""
c = 549255654365864476196144
x = 153618743392211321669273
y = 294470439622467776032293
z = 396326281365084844903098
"""


x = 3^e%n
y = 9^e%n
z = 27^e%n
可得
y = x^2%n
z = x^3%n
所以
(y - x^2)%n = 0
(z - x^3)%n = 0

(z - x^3)%n = (y - x^2)%n
发现(y - x^2)和(z - x^3)存在公因数n
在线分解n(之前课上给过网址的)
离散对数求e
e,c,p,q全部得到,常规rsa解密

payload:

from  Crypto.Util.number import *
import sympy
c = 549255654365864476196144
x = 153618743392211321669273
y = 294470439622467776032293
z = 396326281365084844903098n = GCD(x**2-y,x**3-z)
print(n)
p = 722402380069
q = 762582733951
phi = (p-1)*(q-1)
e = sympy.discrete_log(n,x,3)
d = sympy.invert(e,phi)
m = pow(c,int(d),n)print(long_to_bytes(m))

8.LLL

题目:

from Crypto.Util.number import bytes_to_long,GCD
import randomflag  = "JUST{****************}"def init(n):privKey = [random.randint(1, 4**n)]s = privKey[0]for i in range(1, n):privKey.append(random.randint(s + 1, 4**(n + i)))s += privKey[i]q = random.randint(privKey[n-1] + 1, 2*privKey[n-1])r = random.randint(1, q)while GCD(r, q) != 1:r = random.randint(1, q)pubKey = [ r*w % q for w in privKey ]return pubKey,r,qdef encrypt(key,m):global flagdata = [int(i, 2) for i in bin(bytes_to_long(bytes(flag[5:-1], encoding='utf-8')))[2:].rjust(128, '0')]enc = 0for i in range(len(data)):enc += (key[i]*data[i])%mreturn encdef main():data, w, m = init(128)enc = encrypt(data,m)with open("public.key","w") as fs:fs.write(str(data))with open("flag.enc","w") as fs:fs.write("flag_chiper = "+str(enc))fs.write("\nw = "+str(w))fs.write("\nm = "+str(m))if __name__ == '__main__':main()

还有一个pubkey以及加密的flag文件

背包公钥密码体系,使用LLL算法进行超递增序列伪造,详见ctf_wiki,注意payload运行环境是sage

payload:

# open the public key and strip the spaces so we have a decent array
fileKey = open("public.key", 'r')
pubKey = fileKey.read().replace(' ', '').replace('L', '').strip('[]').split(',')
nbit = len(pubKey)
# open the encoded message
fileEnc = open("flag.enc", 'r')
encoded = fileEnc.read().replace('L', '')
print ("start")
# create a large matrix of 0's (dimensions are public key length +1)
A = Matrix(ZZ, nbit + 1, nbit + 1)
# fill in the identity matrix
for i in range(nbit):A[i, i] = 1
# replace the bottom row with your public key
for i in range(nbit):A[i, nbit] = int(pubKey[i])
# last element is the encoded message
A[nbit, nbit] = -int(encoded)res = A.LLL()
for i in range(0, nbit + 1):# print solutionM = res.row(i).list()flag = Truefor m in M:if m != 0 and m != 1:flag = Falsebreakif flag:print (i, M)M = ''.join(str(j) for j in M)# remove the last bitM = M[:-1]print(eval("0b"+M).to_bytes(16,"big"))

Misc

1.Eazy SignIn

扫描二维码签到

2.抽象带师

题目:

												

JUSTCTF2020 新生赛(校内)wp相关推荐

  1. SCU新生赛2021 pwn wp

    前段时间的极客大挑战2021和2021年的SCU新生赛,最后一道题都没有做出来,作为一枚大二学长确实应该反省一下自己了.太菜了呜呜呜.极客大挑战因为打太久了,题目都快忘记了,就不写wp了. ret2t ...

  2. 南邮2014程序设计新生赛暨蓝桥杯校内自主选拔赛

    南邮2014程序设计新生赛暨蓝桥杯校内自主选拔赛 题目链接:  http://acm.njupt.edu.cn/acmhome/contest.do?&method=contestDetail ...

  3. CTF新生赛之Writeup

    CTF新生赛之Writeup 作为零基础的新生,也是在开学后才了解了CTF,感觉本次新生赛中颇有收获,也是应赛制要求,故写下这份WP,以纪念本人的第一次CTF竞赛. 回顾和感想 回顾本次的新生赛,难度 ...

  4. BUU [ACTF新生赛2020]Universe_final_answer

    [ACTF新生赛2020]Universe_final_answer 首先查壳, 64bit 无壳 ida64位打开 main() __int64 __fastcall main(int a1, ch ...

  5. CTF笔记 [SWPUCTF 2021 新生赛]pop

    文章目录 一些常见魔术方法 [SWPUCTF 2021 新生赛]pop 总结 这一类题目比较考验对一段代码的逻辑方面的理解,通过利用魔数方法进行互相调用,形成一条链子,利用这条链子将对象联系起来去拿f ...

  6. [SWPUCTF 2021 新生赛]PseudoProtocols

    [SWPUCTF 2021 新生赛]PseudoProtocols 一.题目 二.WP 1.打开题目,发现提示我们是否能找到hint.php,并且发现URL有参数wllm.所以我们尝试利用PHP伪协议 ...

  7. BUUCTF Misc 穿越时空的思念 [ACTF新生赛2020]outguess [HBNIS2018]excel破解 [HBNIS2018]来题中等的吧

    目录 穿越时空的思念 [ACTF新生赛2020]outguess [HBNIS2018]excel破解 [HBNIS2018]来题中等的吧 穿越时空的思念 下载文件 使用Audacity打开 点击图示 ...

  8. [SWPUCTF 2021 新生赛]no_wakeup

    [SWPUCTF 2021 新生赛]no_wakeup 考点 反序列化 一.题目 打开题目发现如下代码 <?phpheader("Content-type:text/html;char ...

  9. [SUCTF2018]babyre [ACTF新生赛2020]fungame

    文章目录 [SUCTF2018]babyre 惯用思维 常人思维 GAMEOVER [ACTF新生赛2020]fungame int __cdecl sub_401340(int a1) int __ ...

最新文章

  1. 使用Python,Matplotlib显示RGB图像
  2. typedef interrupt void (*PINT)(void)的分析
  3. 爱鲜蜂签约神策数据 让精细化运营落地企业
  4. 利用ES6的Generator语法实现自定义iterator
  5. Create Volume 操作(Part I) - 每天5分钟玩转 OpenStack(50)
  6. 这所双非高校硕士生一作发Science!系学校上半年第13篇CNS!
  7. [Matlab] PDETool 的 Set Formula 的元素排列顺序会影响 Boundary 的判定
  8. 4.4GDI基本图形
  9. Objective-C中ORM的运用:实体对象和字典的相互自动转换
  10. 为什么你买不到一台好用的机器人?因为没有你的代码
  11. sklearn实战之构建SVM多分类器
  12. 大数据分析,数据可视化之美,BI
  13. 7-38 数列求和-给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+⋯+AA⋯A(N个A)。例如A=1, N=3时,S=1+11+111=123。
  14. 让微积分穿梭于工作与学习之间(23):用极限的思想把一元一次方程和一元二次方程的根式解统一起来
  15. idea从插件市场或者外部插件库导入插件的方式
  16. 1.产品/数据产品设计
  17. 微信公众号开发--自定义菜单跳转页面并获取用户信息(续)
  18. 经典PID控制算法原理以及优化思路
  19. windows下调整linux分区大小,fdisk、parted无损调整普通分区大小 (附:win的c盘分区大小调整)...
  20. sql将数据库从当前电脑到入到另一台电脑上

热门文章

  1. 我们是如何连上WiFi的?
  2. R5S RK3568运行安卓12搭配即插即用免驱免拨号的4G LTE模组测速演示
  3. SSH访问Amazon EC2实例时权限被拒绝(publickey)[关闭]
  4. Debian字体美化
  5. 【cocos creator 3.x】精灵图片不显示
  6. Surface Pro4详细拆机经验记录与分享
  7. 阿呆穿越当程序员之设计模式系列-总纲
  8. 清华大学计算机系上机考试,清华大学计算机系图形学考试习题.docx
  9. oracle数据库导入dmp文件
  10. 韩国个人数据保护类法律法规简述