本文主要是介绍2022DASCTF Apr X FATE 防疫挑战赛个人Writeup,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这次下午有事,上午做了两道就溜了,简单记录一下。
文章目录
- Crypto
- easy_real
- Misc
- SimpleFlow
- 冰墩墩
- 熟悉的猫
- Web
- warmup-php
Crypto
easy_real
读题目代码:
import random
import hashlibflag = 'xxxxxxxxxxxxxxxxxxxx'
key = random.randint(1,10)
for i in range(len(flag)):crypto += chr(ord(flag[i])^key)
m = crypto的ascii十六进制
e = random.randint(1,100)
print(hashlib.md5(e))
p = 64310413306776406422334034047152581900365687374336418863191177338901198608319
q = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
n = p*q
c = pow(m,e,n)
print(n)
print(c)
#37693cfc748049e45d87b8c7d8b9aacd
#4197356622576696564490569060686240088884187113566430134461945130770906825187894394672841467350797015940721560434743086405821584185286177962353341322088523
#3298176862697175389935722420143867000970906723110625484802850810634814647827572034913391972640399446415991848730984820839735665233943600223288991148186397
逻辑比较简单,这里简单说一下思路:
e
的取值只有100种可能,直接暴力破解MD5值,得e
的值为23n
的值不算太大,直接分解可得p
和q
key
的值也只有10种可能,且单独作用flag
的每一位,直接暴力破解
EXP如下:
import hashlib
from Crypto.Util.number import *
import gmpy2e = 23
assert hashlib.md5(str(e).encode()).hexdigest()=='37693cfc748049e45d87b8c7d8b9aacd'p = 64310413306776406422334034047152581900365687374336418863191177338901198608319
q = 65267138038038699886916162739434586079731613825212388229424706115289974540917
n = 4197356622576696564490569060686240088884187113566430134461945130770906825187894394672841467350797015940721560434743086405821584185286177962353341322088523
assert p*q == nc = 3298176862697175389935722420143867000970906723110625484802850810634814647827572034913391972640399446415991848730984820839735665233943600223288991148186397phi = (p-1) * (q-1)
d = gmpy2.invert(e, phi)
# 3102394025382775721579985827463742674392660040462144012428394227091539827312695734394149699485056174680299762849346557164285852236056111101795024023129039m = pow(c, d, n)
# 2976168736142380455841784134407431434784057911773423743751382131043957crypto = long_to_bytes(m).decode()
for key in range(1,11):for s in crypto:num = ord(s)print(chr(num^key),end='')print()
Misc
SimpleFlow
流量分析题,打开文件查看http报文,根据报文特征得知是蚁剑。
看到某一个目录下存在一个flag.zip
文件。
继续往后翻,定位到最后一个报文,返回了压缩文件的内容。
保存下来报文数据,提示一下
- 要保存报文的原始二进制数据,而不是字符流数据。
- 前面的
eb327956
是蚁剑生成的随机字符,需要去掉,否则压缩包文件头是错误的。后面对应也有一串,不过文件尾问题不大,可以保留。
保存下来以后发现解压需要密码,尝试爆破无果,遂继续往上翻流量。
发现他是压缩了flag.txt
到flag.zip
里,定位到一个报文。
解Base64编码,经过信息收集,可得知需要去除开头两个字符:
$p=base64_decode(substr($_POST["o1faebd4ec3d97"],2));
取g479cf6f058cf8
的值按照如上规则解码得:
cd "/Users/chang/Sites/test";zip -P PaSsZiPWorD flag.zip ../flag.txt;echo [S];pwd;echo [E]
因此压缩包密码为PaSsZiPWorD
,解压即可得到flag。
冰墩墩
这个赛后复现的,单独开一篇吧。
2022DASCTF Apr X FATE 防疫挑战赛——【Misc】冰墩墩
熟悉的猫
2022DASCTF Apr X FATE 防疫挑战赛——【Misc】熟悉的猫
Web
warmup-php
2022DASCTF Apr X FATE 防疫挑战赛——【Web】warmup-php
这篇关于2022DASCTF Apr X FATE 防疫挑战赛个人Writeup的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!