2020 第三届江西省高校网络安全技能大赛
目录
- Misc1-Hello
- Misc2-encrypt
- Misc3-jump
- Misc4-Brups
- Misc5-Trees
- Misc6-qrcode
- Misc7-blind
- Misc8-music
- Crypto的疑惑
本来实在是不想写这个比赛的wp,最后因为我们队伍解题分配以及战术的问题无缘决赛,赛后我们(也就两个人)也进行了积极的总结和反思,复盘以后发现其实还有好几个题目都能写,最后还是很遗憾的错失进入决赛的机会,准备明年再来吧。
Misc1-Hello
直接把题目拿去base64,得flag
Base64: Q01JU0NDVEZ7V2VsY29tZV9DVEZlciF9
Flag: CMISCCTF{Welcome_CTFer!}
Misc2-encrypt
本来是想考zip伪加密,通过winhex修改加密标志位解除伪加密,奈何我的360压缩无视了它的伪加密,直接打开了压缩包,把题目拿去解base64两次,得flag
Base64两次: UTAxSlUwTkRWRVo3Um1GclpWOWxibU55ZVhCMGFXOXVmUT09
Flag: CMISCCTF{Fake_encryption}
Misc3-jump
题目图片叫jump.png,通过winhex发现gif文件头
直接修改后缀为gif,通过Stegsolve按帧查看,最后得到flag
Misc4-Brups
通过四字节得crc爆破
另附爆破脚本:
import binascii
import string
import os,sys
dic=string.printable
crc5=[0x6083A1C8,0xCE70D424,0xC3F17511,0x526FD582,0x30E25038,0xAA3E6AEA]
password=''
for crc in crc5:
for i in dic:
for j in dic:
for k in dic:
for l in dic:
s=i+j+k+l
if crc==((binascii.crc32(s.encode()))&0xffffffff):
password+=s
print(password)
print(password)
得到password:the_password_here_cipher
拿去解压打开flag.txt即可得flag:
CMISCCTF{how_to_burp_by_coding}
Misc5-Trees
用Stegsolve查看颜色通道时发现部分文字,CMISCCTF{co******t_tree}
上网查单词,得到coconut(椰树)(又暴露英语水平了),猜测flag为CMISCCTF{coconut_tree},提交,正确。
赛后群里大佬给出了正解
from PIL import Image
img = Image.open('enc.png')
w = img.width
h = img.height
img_obj = Image.new("RGB",(w//16,h//16))
for x in range(w//16):
for y in range(h//16):
(r,g,b)=img.getpixel((x*16,y*16))
img_obj.putpixel((x,y),(r,g,b))
img_obj.save('ok.png')
Misc6-qrcode
直接上工具补全二维码
Flag: CMISCCTF{qr_c0de_r3c0very}
Misc7-blind
考查图片盲水印隐写以及PNG文件修复
扔进kali中去binwalk,发现两张图片,foremost分离
使用decode.py版盲水印脚本
查看得到压缩密码Q@CTF@NX,解压图片:
Winhex查看并修复文件头,
补齐文件头,得到flag
Misc8-music
这题是最伤心的,也是我们这次比赛最大的败笔
用audactity分析,发现了音频中有很多高低频
猜测为二进制,用高频表示1,低频表示0,8位位一组,可以发现前面的数据转出来是Rar!,奈何不清楚如何提取其中的二进制数据,手撕三个半小时未果,赛后复现看到大佬用python脚本提出了压缩包数据,后面是NTFS文件流隐写以及PNG图片改高得二维码,这里不再详细叙述了,需要请大佬队伍的wp
web,pwn和reverse可以参考大佬队伍的wp写的也很详细
Crypto的疑惑
这里只想再提一下密码学,同时也以虚心学习的态度请教大佬
Crypto-Factor题目
n = 3454083680130687060405946528826790951695785465926614724373
e = 3
c = 1347530713288996422676156069761604101177635382955634367208
gcd(m, n) = 1
n可以由yafu或在线分解得
p=11761833764528579549
q=17100682436035561357
r=17172929050033177661
使用多因子RSA脚本以及小指数爆破攻击均未果,没有思路了,求教
Crypto-Change题目
from flag import FLAG
from Crypto.Util.number import *
import gmpy2
import random
while True:
p = int(gmpy2.next_prime(random.randint(10**399, 10**400-1)))
q = int(str(p)[200:]+str(p)[:200])
if gmpy2.is_prime(q):
break
m = bytes_to_long(FLAG)
n = p*q
e = 65537
c = pow(m,e,n)
with open("enc","wb") as f:
f.write(str(c))
f.write("\n")
f.write(str(n))
赛后发现是2019高校运维赛的题目使用该脚本的时候发现,那个题目的n恰好为800位,所以在计算的时候可以直接取n的前两百位和后两百位,这个题目的话由于q,p可能是400位出头的质数,相乘以后的n为798位,在提取n的位数的时候就有些犹豫,目前还没有复现解出这个题目,求大佬帮我答疑解惑。