MISC
Welcome to fxxking DestCTF
关注微信公众号,得到flag
Dest0g3{W31c0m3_t0_DestCTF2022!}
Pngenius
题目是一张PNG图片,很难不让人联想到隐写术,我们使用stegsolve打开
在R0G0B0发现了Password for zip,猜测图片包含ZIP,使用foremost进行分解
分解后发现有密码,使用刚刚解出来的密码解压,得到flag
Dest0g3{2908C1AA-B2C1-B8E6-89D1-21B97D778603}
EasyEncode
下载附件,发现是一个有密码的ZIP文件,我尝试了下伪加密,发现并不是,那么只能进行爆破,通过爆破得到密码
使用得到的密码进行解密,得到一串Morse
我们扔进在线网站解密一波,得到一串16进制
将16进制写入文件,发现存在unicode
我们解码一手unicode,得到一串URL编码后的密文
使用URL进行解码,得到一串base64
解密base64,得到flag
Dest0g3{Deoding_1s_e4sy_4_U}
你知道JS吗
下载发现存在doc特征,故修改后缀为doc打开
打开后我们发现存在是字体混乱
我们直接换一个字体,发现存在base64特征
解密base64,得到如下内容
存在URL特征,我们直接使用URL解码一波,发现如下特殊字符
根据经验,这是brainfuck加密过的,我们直接解密,得到如下字符
看来是16进制,我们写入文件,发现flag
Dest0g3{86facac9-0a5d-4047-b702-86cb37ab77b2}
StrangeTraffic
下载附件,使用小鲨鱼打开这个流量包
追踪TCP,得到如下内容
将内容改为hex转储
发现如下内容,每一个循环的结尾都存在base64一部分
为我们是无脑的工具人,这里就不需要什么脚本辅助了,直接手撸一波,得到密文
- RGVzdDBnM3szMUE1QkVBNi1GMjBELUYxOEEtRThFQS0yOUI0RjI1NzEwOEJ9
复制代码 解密base64,得到flag
Dest0g3{31A5BEA6-F20D-F18A-E8EA-29B4F257108B}
EasyWord
解压压缩包,得到如下文件
看看hint.txt,发现password.docm的密码存在掩码攻击,且密码为6位
使用如下脚本获取docm文件的hash
以下脚本来源于
https://raw.githubusercontent.com/magnumripper/JohnTheRipper/bleeding-jumbo/run/office2john.py
获取到hash,版本之类的,我们去查一下发现2010版本的office的解密代码为9500,删除冗余,得到
使用kali自带的hashcat进行掩码攻击
查看桌面生成的mima.txt,得到密码
使用该密码打开word,发现使用了宏命令
我们查看宏,发现被加密
先把这个docm的文件解除密码、
然后另存为成doc文档,使用notepad打开
将DPB修改为DPx(区分大小写),然后保存后再次打开,忽略所有的警告,但提示错误
我们重新设置一个密码
点击确定后保存,然后使用notepad打开,将DPx改回DPB,至此,破解密码已完成
再次打开后我们就可以编辑这个宏了,对代码进行简单的分析
我们如下图修改代码
这样相当于反向加密,我们调试时可以修改If为1让程序执行语句
接下来经过调试,我们发现只有这一行是输出最终提示的
我们将它改为1,其它改为0,看看效果
成功输出到了最终的密码(中间省略了一些调试过程,有兴趣的人可以去试试)
随后我们将源码还原到修改前,然后运行,输入密码,得到密码
压缩包密码:2zhlmcl,1hblsqt.
这里问候一下出题人,为什么解压密码后面的是个感叹号呢?
解压得到flag
Dest0g3{VBScr1pt_And_Hashc4t_1s_g00d}
4096
果断启动一波容器,进入容器,在JS中找到一串base64
Base64进行解码,得到另一串base64
再次解码,得到后半段flag
我们在容器中将favicon.png下载下来,然后使用foremost进行文件分离
使用耳朵听一下wav,发现前面是按键音,中间是SSTV,后面也是按键音,我们用AU处理
将中间的SSTV删除后让两段拨号音拼接
然后使用demf2num进行拨号音识别,得到74958097831
考虑到是拨号,我们将它进行reserve操作,得到出题人手机号13879085947
然后我们听一下中间的SSTV,本菜因为电脑没有声卡,被迫用手机了(软件名:Robot36)
我们按照题目指示的方法,将出题人手机号进行md5,加密,得到最终的解压密码
使用以下密码对压缩包进行解压,得到如下图片
实在是太套了,我们使用gaps+手撸拼出原图(因为gaps精准度堪忧)
把这些base64拼在一起,得到前半段flag
随后我们将前半段flag和后半段flag进行拼接,得到最终的flag
Dest0g3{ed4d114f-9ee4-4ee7-b673-971d81f8b177}
Python_jail
下载题目拿到附件解压
先看看hint
看到中间的空白字符,再结合是一门语言,根据经验想到了无字天书
将password进行无字天书运行,得到密码:a8e15220-7404-4269-812e-6418557b7dc2
URL: https://vii5ard.github.io/whitespace/
使用该密码解压SECRET1.zip,得到一张图片,将它使用stegslove打开
最终在R0G0B0发现Zmxh开头的字符串,疑似flag进行base64编码
解base64得到flag
flag{b5bcfc87-5ca6-43f1-b384-57d09b886ca9}
codegame
下载附件,修改后缀为zip,解压
打开KEYcode
根据经验得知,这段代码是LOLCODE,LOLCODE在线运行
URL: https://www.dcode.fr/lolcode-language
运行得到QEFPFPQEBMXPPTLOA,这便是ZIP的密码,我们将Treasure.zip中的docx解压
后缀改为.zip,解压得到fllllllllll1ag.txt
这是emojiAES,同样用QEFPFPQEBMXPPTLOA进行emojiAES解密即可
但是我们发现解不出来,其实这是出题人留下的坑,我们点击Advanced,调整一下
最终得到了一串16进制(Rotation:4)
将这段16进制使用16进制编辑器打开,得到flag
flag{9f68f334-017a-4201-92df-dddcc145334d}
rookie hacker-2
非预期解!!!(应该)
使用破空flag查找工具,写一条正则(ip正则:\d+\.\d+\.\d+\.\d+)
然后递归一下Memory.dd,冗余数据战术性不看,结合docker数据是172开头,且172.18.0.2和172.18.0.3是相邻ip,并且在文本中也是相邻的,所以猜测ip就是这俩,结果还真对了,这里给破空flag查找工具打call!
Dest0g3{172.18.0.2_172.18.0.3}
被污染的二维码
首先根据附件名称,修改后缀为zip后解压
先看flag1的16进制,发现是个png文件,但是有意外收获
这里其实都没啥,意外收获就是这个PNG图片为了防止我们使用PS等软件打开,多了一个IDAT块,不清楚是什么用,但是binwalk可以把它分离
我们先修改后缀为png,发现是个反转颜色的二维码,我们使用stegslove反色一下
暂时没什么信息,我们binwalk一下这张图片,发现在里面有一个密码
看来是有什么东西需要密码,但是flag1已经处理完了,我们看看flag2,发现是个7Z文件
但是实际上这个7z的文件头损坏了,正确的应该是377ABCAF,而它是377AAFBC,将BCAF换位,得到正确的文件
将后缀改为7z,然后使用密码解压,得到密文,但是密文长度有问题,猜测有零宽存在
我们解密零宽,零宽有很多种,都试试就好了,最后发现是这个Unicode Steganography with Zero-Width Characters (330k.github.io)
这里师傅们一定要注意下面的选项
紧接着,我们根据解出来的N-ZA-M猜测是rot13算法,对解出来的长度66字符进行rot13
根据经验判断是base64,解密一下,得到部分flag
那么我们接下来的任务就是找到这四位字符,看来只能处理flag1中的二维码了,我们用QRazyBox加手撸补一下,这里的图片大小是315*315,但是二维码是21*21,所以每15*15代表二维码的一个像素,我们浅浅把我们已知的区域补充一波
(这里运用了推理手法,因为墨水是黑色,只要是15*15像素内存在白色,就一定是白色)
但是经过爆破发现没什么用(乱码了),那就只能继续补下面的灰色,我们瞎蒙一下
这里蒙的肯定不对,但是要知道,这个神奇的玩意是可以大幅度纠正错误的,我们点击tools
点击之后,往下翻,发现它提取出来了
最终的flag出来了
Dest0g3{dcfdffa4-ce19-45cb-902b-df7a152516c7}
CRYPTO
babyRSA
看到q的生成规则,很容易联想到pq相差非常小,使用平方差遍历法直接一把梭哈pq,然后求phi,求d,解密m。脚本如下:
- from Crypto.Util.number import *
- from gmpy2 import *
- e=65537
- n=27272410937497615429184017335437367466288981498585803398561456300019447702001403165885200936510173980380489828828523983388730026101865884520679872671569532101708469344562155718974222196684544003071765625134489632331414011555536130289106822732544904502428727133498239161324625698270381715640332111381465813621908465311076678337695819124178638737015840941223342176563458181918865641701282965455705790456658431641632470787689389714643528968037519265144919465402561959014798324908010947632834281698638848683632113623788303921939908168450492197671761167009855312820364427648296494571794298105543758141065915257674305081267
- temp=gmpy2.iroot(n,2)[0]
- p=gmpy2.next_prime(temp)
- q=n//p
- print("p =",p)
- print("q =",q)
- phi_n=(p-1)*(q-1)
- d=gmpy2.invert(e,phi_n)
- c=14181751948841206148995320731138166924841307246014981115736748934451763670304308496261846056687977917728671991049712129745906089287169170294259856601300717330153987080212591008738712344004443623518040786009771108879196701679833782022875324499201475522241396314392429412747392203809125245393462952461525539673218721341853515099201642769577031724762640317081252046606564108211626446676911167979492329012381654087618979631924439276786566078856385835786995011067720124277812004808431347148593882791476391944410064371926611180496847010107167486521927340045188960373155894717498700488982910217850877130989318706580155251854
- m=pow(c,d,n)
- print(long_to_bytes(m))
复制代码 Dest0g3{96411aad-032c-20a8-bc43-b473f6f08536}
babyAES
Iv,c,key都给了,直接写个解密脚本就行,白给类题目
- from Crypto.Cipher import AES
- c=b'C4:\x86Q$\xb0\xd1\x1b\xa9L\x00\xad\xa3\xff\x96 hJ\x1b~\x1c\xd1y\x87A\xfe0\xe2\xfb\xc7\xb7\x7f^\xc8\x9aP\xdaX\xc6\xdf\x17l=K\x95\xd07'
- iv=b'\xd1\xdf\x8f)\x08w\xde\xf9yX%\xca[\xcb\x18\x80'
- key=b'\xa4\xa6M\xab{\xf6\x97\x94>hK\x9bBe]F'
- cipher = AES.new(key,AES.MODE_CBC,iv)
- m=cipher.decrypt(c)
- print(m)
复制代码 Dest0g3{d0e5fa76-e50f-76f6-9cf1-b6c2d576b6f4}
ezDLP
看到题目不难发现g的值非常之小,使用Pohlig-Hellman算法直接解
Sagemath的discrete_log可以直接求解,脚本如下
- y = 199533304296625406955683944856330940256037859126142372412254741689676902594083385071807594584589647225039650850524873289407540031812171301348304158895770989218721006018956756841251888659321582420167478909768740235321161096806581684857660007735707550914742749524818990843357217489433410647994417860374972468061110200554531819987204852047401539211300639165417994955609002932104372266583569468915607415521035920169948704261625320990186754910551780290421057403512785617970138903967874651050299914974180360347163879160470918945383706463326470519550909277678697788304151342226439850677611170439191913555562326538607106089620201074331099713506536192957054173076913374098400489398228161089007898192779738439912595619813699711049380213926849110877231503068464392648816891183318112570732792516076618174144968844351282497993164926346337121313644001762196098432060141494704659769545012678386821212213326455045335220435963683095439867976162
- p = 335215034881592512312398694238485179340610060759881511231472142277527176340784432381542726029524727833039074808456839870641607412102746854257629226877248337002993023452385472058106944014653401647033456174126976474875859099023703472904735779212010820524934972736276889281087909166017427905825553503050645575935980580803899122224368875197728677516907272452047278523846912786938173456942568602502013001099009776563388736434564541041529106817380347284002060811645842312648498340150736573246893588079033524476111268686138924892091575797329915240849862827621736832883215569687974368499436632617425922744658912248644475097139485785819369867604176912652851123185884810544172785948158330991257118563772736929105360124222843930130347670027236797458715653361366862282591170630650344062377644570729478796795124594909835004189813214758026703689710017334501371279295621820181402191463184275851324378938021156631501330660825566054528793444353
- g = 19
- x = discrete_log(mod(y, p), mod(g, p))
- print(x)
复制代码 可以得到输出
627467212751652661100750674849894892358409405070345081253130721039787502632741519936253501608002590652971133
print之后使用Crypto库的long_to_bytes直接求解flag
Dest0g3{07ed2a6f-182f-a05d-c81e-1318af820a78}
ezStream
脚本如下,思路在注释里
- from gmpy2 import invert
- from Crypto.Util.number import *
- a = 3939333498
- b = 3662432446
- m = 2271373817
- state1 = 17362
- state2 = 20624
- c = 600017039001091357643174067454938198067935635401496485588306838343558125283178792619821966678282131419050878
- state1_ = state1 << 16
- def next(seed):
- seed_new = (a * seed + b) % m
- return seed_new >> 16,seed_new
- # 爆破低16位得到可能的state1的真实值
- # for i in range(2**16):
- # t = state1_ + i
- # if (a * t + b) % m >> 16 == state2:
- # print(t)
- t_list = [1137839988,1137855425,1137870862]
- # 求出可能的seed
- for i in t_list:
- seed = (i - b) * invert(a,m)%m
- print(seed)
- seed_list = [1315807869,710396196,104984523]
- c_bytes = long_to_bytes(c)
- print(len(c_bytes))
- key_list = []
- seed = 104984523
- for i in range(47):
- key,seed = next(seed)
- key_list.append(key%10)
- for i in range(45):
- print(chr(key_list[i+2]^c_bytes[i]),end='')
- # 这道题并不需要求seed,拿到t_list之后递推就可以了
复制代码
RESERVE
simpleXOR
拿到题目,使用IDA打开,观察函数,就是道签到题,随便写个脚本xor一下
这里贴下脚本
- a=[179,145,130,128,195,155,206,117,207,156,154,133,133,205,184,132,170,125,189,187,177,181,150,113,141,158,134, 191, 115,168,163,156,131,101,158,87]
- for i in range(len(a)):
- print(chr((a[i]^0xf7)-i),end="")
复制代码Dest0g3{0bcgf-AdMy892-KobPW-hB6LTqG}
hi
v6是密文,v5是输入的flag*23,可以直接查看x,flag长度是45,我们放一下
- enflag=[0x97, 0x64, 0x48, 0xC6, 0x1C, 0x7A, 0x8E, 0x9F, 0x46, 0xBD,
- 0x60, 0xE7, 0x82, 0xF3, 0xEE, 0x69, 0x49, 0xF7, 0x0E, 0xE3,
- 0xE2, 0x17, 0xC0, 0xB9, 0x2C, 0x39, 0x30, 0xA4, 0x48, 0x01,
- 0x41, 0x98, 0x39, 0xA9, 0xB5, 0xE5, 0x11, 0x74, 0x0E, 0xE8,
- 0xAC, 0xFD, 0x8B, 0xA5, 0x6D
- ]
- x=[ 0x7B, 0x51, 0xF3, 0x5A, 0xCC, 0x39, 0xF9, 0x92, 0x1C, 0x9E,
- 0x58, 0x69, 0x9D, 0xF7, 0xFD, 0x4A, 0x3E, 0xFB, 0x1D, 0x2C,
- 0x4D, 0x0C, 0x70, 0xB1, 0x3B, 0x8D, 0x25, 0xED, 0x91, 0xB1,
- 0x73, 0x8D, 0x82, 0xE6, 0xE7, 0x50, 0x20, 0x61, 0x62, 0x3C,
- 0x00, 0x3A, 0xA6, 0x9D, 0x32]
- for i in range(45):
- for j in range(0,128):
- v5=23*j
- if(v5+x[i])&0xff==enflag[i]:
- print(chr(j),end="")
复制代码 Dest0g3{f982cd79-d7a3-0874-aa0b-a5b37e4445c8}
WEB
phpdest
拿到题目,我们使用伪协议配合多级符号链接的办法进行绕过
/proc/self指向当前进程的/proc/pid/,/proc/self/root/是指向/的符号链接,所以我们可以用上述方法进行绕过,接下来放出payload
- ?file=php://filter/convert.base64-encode/resource=/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/var/www/html/flag.php
复制代码 使用以上payload,成功得到flag.php的base64加密后的结果
我们果断解密一手base64,得到flag
动态flag,请自己参悟flag是什么
EasyPHP
拿到题目,我们发现需要post字符串和数组拼接,即ctf[]=shumu(shumu可以改)
接下来,我们再来看一看,神奇的事情就发生了
动态flag,请自己参悟flag是什么
SimpleRCE
看到源码,我们大体就知道了考点是无字母数字绕过正则表达式,这里我们用了取反,因为取反,用的基本是不可见字符,不会触发到正则表达式,我们写一个php脚本
[code] |