前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Ha1cyon_CTF write up(部分)

Ha1cyon_CTF write up(部分)

作者头像
L1near
发布2022-11-11 20:17:03
4460
发布2022-11-11 20:17:03
举报
文章被收录于专栏:CTF-WP

Ha1cyon_CTF write up(部分)

西工大的比赛好难啊( ⊙ o ⊙ )!劝退劝退,自己还是得继续加油学习!

Misc

HappyCheckInVerification

这道题下载附件以后,用winhex打开压缩包会发现,压缩包的文件尾50 4B 05 06出现在文件头的位置,那么把他移到文件尾,然后又发现是伪加密,把09改成00

但是发现用winrar打不开,当时我选择的是用bandzip,发现能打开

(后来询问了出题人,得知正确解法是最开头一段PK移到结尾 伪加密可以不管 然后自己判断块长度去修复对应二进制位)

所以打不开的原因是还有二进制位没有修复(但是bandzip 牛逼!)

然后打开以后发现一段黑人抬棺视频和一张二维码

二维码缺少了三个定位脚,修复以后扫出来:flag{this_is_not_flag}三曳所諳陀怯耶南夜缽得醯怯勝數不知喝盧瑟侄盡遠故隸怯薩不娑羯涅冥伊盧耶諳提度奢道盧冥以朋罰所即栗諳蒙集皤夷夜集諳利顛呐寫無怯依奢竟#¥#%E68BBFE4BD9BE68B89E6A0BCE79A84E5A7BFE58ABFE59CA8E69C80E5908E32333333||254333254242254338254342254231254338254345254432254238254643254236254145254239254441254437254234254232254131254236254245253244253244254343254438254330254341254336254435.sadwq#asdsadasf faf$use$dasdasdafafa_$ba##se64$

那么依次来解:

首先最开始的是与佛论禅加解密:

然后是base16:

然后是base16+url解码:

然后最后那个依稀可见use base64

那么再去看视频,仔细听会发现在视频中间会出现电话音,但是因为视频是双声道,加上环境混淆音很重,所以一般的电话音识别工具和脚本都不行,我用了dtmf2num.exe分析出来的也不对

然后这里感谢Ga1@xy师傅,他帮我把出现电话音的那几秒分别截了出来

音频链接:https://pan.baidu.com/s/1rqX68BbS1gqlT3lc_OWODw 提取码:s27k

那么这里识别的结果就比较精确了:

然后开头几个数字去找了出题人得到了hint,最后得到手机号码xxx18070885

那么发短信过去会提示NWPUSEC

去微信公众号关注了以后,发送了手机号码base64encode的结果,然后发送了一段音频

得知是无线电,手机上用Robot36识别出来一张图:

可以依稀获得:flags::flag{miSc_ChecK_In_Ver16ied}

(这里的话,用公众号的音频识别出来比较难,笔者提供一份高清的音频)

音频链接:https://pan.baidu.com/s/1kLp-3e_wZ0UDIiRH7R0MAw 提取码:unm8

Crypto

认清形势,建立信心

Encryption:

代码语言:javascript
复制
p = getPrime(25)
e = # Hidden
q = getPrime(25)
n = p * q
m = bytes_to_long(flag.strip(b"npuctf{").strip(b"}"))
c = pow(m, e, n)
print(c)
print(pow(2, e, n))
print(pow(4, e, n))
print(pow(8, e, n))
'''
169169912654178
128509160179202
518818742414340
358553002064450
'''

那么题目给了 2^e mod(n),4^emod(n),8^emod(n) ,那么我们假设分别为a,b,c

那么易得a^2-b=k1*n,a^3-c=k2*n

那么n |GCD(a^2-b,a^3-c)=(k1,k2)*n,所以写脚本可以知道n,即知道p,q

代码语言:javascript
复制
from Crypto.Util.number import *
c1 = 128509160179202
c2 = 518818742414340
c3 = 358553002064450
n = GCD(c1**2-c2, c1**3-c3)
print n

然后用yafu分解n:

那么可知(k1,k2)=2,p=28977097,q=18195301

那么还有e不可知

e的方法有多种,其中一种参考0xDktb师傅的wp:http://0xdktb.top/2020/04/19/WriteUp-NPUCTF-Crypto/ (u1s1,我没看懂,所以我的方法是最直接的枚举)

但是Python爆破时间很慢,最好还是用c/c++,但因为我的VS出了一点问题用不了,所以选择了Python

代码语言:javascript
复制
import gmpy2
n = 527247002021197
c1 = 128509160179202
e = 500000000
while e <1000000000:
    if gmpy2.powmod(2,e,n) == c1:
        print e
    else:
        e+=1

爆破出来的结果是e = 808723997

然后就是常规解RSA了

代码语言:javascript
复制
from Crypto.Util.number import inverse, long_to_bytes
p = 28977097
q = 18195301
N = p*q
nn = (p-1)*(q-1)
e = 808723997
d = inverse(e,nn)
c = 169169912654178
m = pow(c,d,p*q)
flag = long_to_bytes(m)
print flag
这是什么觅马

这道题首先打开图片发现是一份日历:

然后右下角有F1 W1 S22 S21 T12 S11 W1 S13

去网上直接查F W S T会有个网站说是日期的一种简单表示,那么放到这题,字母后面跟着两位数字的分别是S T,刚好对应Saturday SundayTuesday Thursday,那么右下角的就应该是对应日期。

依次查找,F1 W1 S22 S21 T12 S11 W1 S13对应着就是3 1 12 5 14 4 1 18(S22就代表是S2(Sunday)的第二个,同理可知S13 T12等)

那么找到3 1 12 5 14 4 1 18以后发现直接提交不对,十六进制转换也不对,那么试着去对应字母表,刚好解得为calendar

最后flagflag{calendar}

Classical Cipher

打开压缩包,里面还有一个压缩包(内有一张加密的图片)和一个txttxt内容是:

那么很明显可以看出pvb对应key,第一反应是去https://quipqiup.com/上跑,但是出来的不正确,那么尝试掩码也不可能。那么继续看特征。仔细查看会发现pk 的字母顺序加起来为27ve加起来也为27

那么就知道这密码为Atbash(埃特巴什码),即最后一个字母代表第一个字母。那么解得the_key_is_atbash:

打开得到一张图片是古埃及象形文字编码和猪圈密码变种合成的一幅图片(关于CTF常出现的一些奇奇怪怪的编码在之前的文章里曾写过):

解得flag{classicalcode}

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Ha1cyon_CTF write up(部分)
    • Misc
      • HappyCheckInVerification
    • Crypto
      • 认清形势,建立信心
      • 这是什么觅马
      • Classical Cipher
相关产品与服务
短信
腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档