2022DASCTF Apr X FATE 防疫挑战赛个人Writeup

这次下午有事,上午做了两道就溜了,简单记录一下。

Crypto

easy_real

读题目代码:

import random
import hashlib

flag = '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

逻辑比较简单,这里简单说一下思路:

  1. e的取值只有100种可能,直接暴力破解MD5值,得e的值为23
  2. n的值不算太大,直接分解可得pq
  3. key的值也只有10种可能,且单独作用flag的每一位,直接暴力破解

EXP如下:

import hashlib
from Crypto.Util.number import *
import gmpy2

e = 23
assert hashlib.md5(str(e).encode()).hexdigest()=='37693cfc748049e45d87b8c7d8b9aacd'

p = 64310413306776406422334034047152581900365687374336418863191177338901198608319
q = 65267138038038699886916162739434586079731613825212388229424706115289974540917
n = 4197356622576696564490569060686240088884187113566430134461945130770906825187894394672841467350797015940721560434743086405821584185286177962353341322088523
assert p*q == n

c = 3298176862697175389935722420143867000970906723110625484802850810634814647827572034913391972640399446415991848730984820839735665233943600223288991148186397

phi = (p-1) * (q-1)
d = gmpy2.invert(e, phi)
# 3102394025382775721579985827463742674392660040462144012428394227091539827312695734394149699485056174680299762849346557164285852236056111101795024023129039

m = pow(c, d, n)
# 2976168736142380455841784134407431434784057911773423743751382131043957

crypto = 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文件。
继续往后翻,定位到最后一个报文,返回了压缩文件的内容。
在这里插入图片描述

保存下来报文数据,提示一下

  1. 要保存报文的原始二进制数据,而不是字符流数据。
  2. 前面的eb327956是蚁剑生成的随机字符,需要去掉,否则压缩包文件头是错误的。后面对应也有一串,不过文件尾问题不大,可以保留。

保存下来以后发现解压需要密码,尝试爆破无果,遂继续往上翻流量。

发现他是压缩了flag.txtflag.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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值