搜索
您的当前位置:首页CTF之MISC练习二

CTF之MISC练习二

时间:2022-09-06 来源:世旅网
CTF之MISC练习⼆

⼀、base16解密

题⽬名称:题⽬名称base64÷4题⽬附件:题⽬附件

https://adworld.xctf.org.cn/media/task/attachments/c8cb2b557b57475d8ec1ed36e819ac4d.txt题⽬writeup:

1.根据题⽬名称,猜测是base162.通过在线base16解密可获得:

https://www.qqxiuzi.cn/bianma/base.php?type=163.解密脚本:

import base64

s='666C61677B45333342374644384133423834314341393639394544444241323442363041417D'flag=base64.b16decode(s)print flag

4.最终获得flag:

flag{E33B7FD8A3B841CA9699EDDBA24B60AA}

⼆、modbus⼯业协议流量包分析

题⽬名称:神奇的题⽬名称Modbus题⽬描述:题⽬描述

寻找flag,提交格式为sctf{xxx}附件内容:附件内容基础知识:基础知识

Modbus是⼀种串⾏通信协议,是Modicon公司(现在的施耐德电⽓ Schneider Electric)于1979年为使⽤可编程逻辑控制器(PLC)通信⽽发表。Modbus已经成为⼯业领域通信协议的业界标准(Defacto),并且现在是⼯业电⼦设备之间常⽤的连接⽅式

题⽬writeup:

1.通过搜索字符串flag关键字,但没有相关搜索2.搜索sctf关键字,却出现sctf格式

结果出来:sctf{Easy_Mdbus},提交有错误

根据题⽬名称Modbus关键字,可能附件内容中流量包中缺少⼀个o提交flag:

sctf{Easy_Modbus},则成功提交

三、流量包http协议分析

题⽬名称:题⽬名称wireshark-1题⽬描述:题⽬描述

⿊客通过wireshark抓到管理员登陆⽹站的⼀段流量包(管理员的密码即是答案)。 flag提交形式为flag{XXXX}附件内容:附件内容

https://adworld.xctf.org.cn/media/task/attachments/ab8cfea44ced4dd8bd96c7f769ce1309.zip题⽬writeup:

1.⽤wireshark打开流量包,通过搜索http关键协议,并查找post数据包2.追踪流--http流

3.可以看到post提交的数据password关键字后门的内容,也就是答案,答案就是flag4.最终flag为:

flag{ffb7567a1d4f4abdffdb54e022f8facd}

四、图⽚的影写

题⽬名称:题⽬名称pure_color题⽬描述:题⽬描述

格式为flag{xxxxxx}题⽬附件:题⽬附件

https://adworld.xctf.org.cn/media/task/attachments/1457ba9a15f944ae8520e024f72bf7a6.png题⽬writeup:

1.通过notepad查看关键字flag并没有任何内容

2.通过题⽬名称color与颜⾊有关,关联到有可能是图⽚影写,通过stegsolve查看图⽚,按下⾯的“<”按钮,就得到flag最终flag:

flag{true_steganographers_doesnt_need_any_tools}

五、图⽚隐写之AES双重解密

题⽬名称:题⽬名称Aesop_secret题⽬附件:题⽬附件

https://adworld.xctf.org.cn/media/task/attachments/f732347c6bad47f1ac715cf67a3f4532.zip题⽬writeup:

1.下载附件解压得到⼀个动态图⽚gif,然后通过图⽚影写⼯具stegsolver查看并没有任何东西

2.通过notepad查看,发现最后⾯有⼀串加密的字符串,题⽬名称为aes,那么该字符串则是aes加密的字符串

3.通过在线aes解密,猜测密钥可能为:2019_ISCC或者ISCC,通过测试发现密钥为ISCC则可以解密,但是解密出来的还是AES加密字符串在线aes解密⽹站

https://www.sojson.com/encrypt_aes.html4.再次进⾏第⼆次解密,则可以获得flag5.最终flag

flag{DugUpADiamondADeepDarkMine}

六、图⽚隐写之LSB的字符反转

题⽬名称:倒⽴屋题⽬名称题⽬描述:题⽬描述

房屋为什么会倒⽴!是重⼒反转了吗?题⽬附件:题⽬附件

https://adworld.xctf.org.cn/media/task/attachments/0ffa808362f34bf8a2d5bf473c1d455a.zip题⽬writeup:

1.下载附件,解压⽂件,得到⼀张图⽚⽂件,然后通过图⽚隐写⼯具stegsolve的Analyse-Extract Preview查看图⽚的LSB属性。2.发现有关FLAG的相关联的关键字:IsCc_2019

3.直接提交flag{IsCc_2019}是错误的,根据题⽬描述,反转关键字,最终flag为:flag{9102_cCsI}

七、坏损图⽚影写

题⽬名称:题⽬名称

something_in_image题⽬附件:题⽬附件

https://adworld.xctf.org.cn/media/task/attachments/b2c46758ac3b41eaa457ff8e64d5d17c.zip题⽬wirtup:

1.下载附件,通过记事本或者 010editor搜索关键字flag,即可发现flag2.最终flag为:

Flag{yc4pl0fvjs2k1t7T}

⼋、图⽚隐写之翻转

题⽬名称:题⽬名称reverseMe题⽬附件⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/021b62817d7f439aab5338ea63fe1b4b.jpg题⽬writeup:

1.通过windows10⾃带的图⽚查看⼯具的翻转功能即可查看flag2.最终flag:

flag{4f7548f93c7bef1dc6a0542cf04e796e}

九、⽇历影写

题⽬名称:题⽬名称2017_Dating_in_Singapor题⽬描述:题⽬描述

01081522291516170310172431-050607132027262728-0102030209162330-02091623020310090910172423-02010814222930-0605041118252627-0203040310172431-0102030108152229151617-04050604111825181920-0108152229303124171003-261912052028211407-04051213192625题⽬附件:题⽬附件题⽬writup:

1.下载附件,发现打开⼀张⽇历

2.根据描述,发现⽤分割符号\"-\"进⾏分割,有12段(数字的特征,最⼩为01,最⼤为31,⼀共⼗⼆⾏,恰对应12个⽉,每个⽉最多31天。结合今年(2017)⽇历),那么每段的数字和⽇历⽉份有关联,并且两两数字⼀组,最终简化如下:01081522291516170310172431-050607132027262728-0102030209162330-02091623020310090910172423-02010814222930-0605041118252627-0203040310172431-0102030108152229151617-04050604111825181920-0108152229303124171003-261912052028211407-04051213192625

3.按每⼀⾏顺序对应每⼀个⽉份的情况下,每⼀个数字对应⽇期,再按照顺序在⽇历上连接成线,就是flag了4.最终flag:

HIT8{CTFFUN}

⼗、流量包隐藏⽂件之PDF

题⽬名称:题⽬名称simple_transfer题⽬描述:题⽬描述

⽂件⾥有flag,找到它题⽬writeup:

1.下载附件,⽤wireshark打开流量⽂件,搜索flag关键字,并没有发现任何东西

2.将该流量⽂件上传到kali系统中,⽤binwalk命令查看该⽂件包含哪些⽂件,发现有pdf⽂件包含其中binwalk f9809647382a42e5bfb64d7d447b4099_.pcap

3.通过foremost命令分解其包含中的⽂件,分解出audit.txt和pdf⽂件夹,进⼊pdf⽂件夹中,发现包含了00000662.pdf⽂件foremost f9809647382a42e5bfb64d7d447b4099_.pcap 4打开pdf⽂件,⾥⾯什么都没有,全⿊⾊背景

5.直接CTRL + A 全选,新建⼀个txt⽂件,然后CTRL + V 粘贴,最终得到flagHITB{b3d0e380e9c39352c667307d010775ca}

⼗⼀、最基础的图⽚影写

题⽬名称:题⽬名称Training-Stegano-1题⽬描述:题⽬描述

这是我能想到的最基础的图⽚隐写术题⽬附件:题⽬附件

https://adworld.xctf.org.cn/media/task/attachments/2e5e19744c644912928eddc882f3b0b9.bmp题⽬writeup:

1.下载附件图⽚,通过记事本查看,有个⼀个密码为:steganoI,猜测为flag

2.提交flag{steganoI},但是不对,再次提交steganoI,发现正确,最终flag为:steganoI

⼗⼆、BrainFuck语⾔解密

题⽬名称:题⽬名称can_has_stdio?题⽬附件:题⽬附件基础知识:基础知识

BrainFuck语⾔是极简的⼀种图灵完备的语⾔,由Urban Müller在1993年创造,由⼋个指令组成(如下表)。⼯作机制与图灵机⾮常相似,有⼀条⾜够长的纸带,初始时纸带上的每⼀格都是0,有⼀个数据读写头指向纸带的初始位置,读写头的⾏为由指令指⽰。brainfuck有两种类型:1. < < + - > , [ ]2. 0ok!0ok.0ok?题⽬writeup:

1.下载附件,解压压缩⽂件,得到⼀个⽂件misc50,其中包含以下内容2.看到内容,判断是 brainfuck 代码,,通过在线解密⼯具进⾏解密:3.最终flag为:

flag{esolangs_for_fun_and_profit}

⼗三、压缩包爆破

题⽬名称:题⽬名称János-the-Ripper题⽬附件:题⽬附件

https://adworld.xctf.org.cn/media/task/attachments/310085c4315841b1b784b4803ff7e4c1.zip题⽬wirteup:

1.下载附近,解压⽂件,得到misc100⽂件,并通过winhex查看,发现是50,4b,03开头,说明是rar压缩⽂件,其中还有flag.txt⽂件。

2.但是打开.rar⽂件,提⽰需要输⼊密码,且题⽬名称为János-the-Ripper,该名为著名的密码爆破⼯具,需要我们对该.RAR⽂件进⾏爆破。通过archpr爆破⼯具对压缩包进⾏爆破最终flag:

flag{ev3n::y0u::bru7us?!}

⼗四、影写之⼗六进制转换

题⽬名称:题⽬名称Test-flag-please-ignore题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/2f572adcaa5447feb8cc8c50969cd57d.zip题⽬writeup:

1.下载附件,解压附件得到misc100,通过notepad查看⽂件内容

2.发现⼀串字符串:666c61677b68656c6c6f5f776f726c647d,尝试md5 hash值解密发现⽆法解密,发现该字符串是0到9以及a到f组成,是⼗六进制形式3.通过在线⼗六进制转换成ascii字符

https://www.sojson.com/hexadecimal.html

4.最终得到flag为:flag{hello_world}

⼗五、影写之有规律的字符串

题⽬名称:题⽬名称hit-the-core题⽬描述:题⽬描述alexctf-2017题⽬附件:题⽬附件

https://adworld.xctf.org.cn/media/task/attachments/2f572adcaa5447feb8cc8c50969cd57d.zip题⽬writeup:

1.下载附件,对其进⾏解压,发现⼀个.core⽂件,该⽂件为liunx下的崩溃错误⽣成的⽂件。通过记事本查看其内容,发现有⼀些特殊的字符串或者通过kail下的strings命令查看⽂件中的字符串

2.得到可疑的字符串:

cvqAeqacLtqazEigwiXobxrCrtuiTzahfFreqc{bnjrKwgk83kgd43j85ePgb_e_rwqr7fvbmHjklo3tews_hmkogooyf0vbnk0ii87Drfgh_n kiwutfb0ghk9ro987k5tfb_hjiouo087ptfcv}3.仔细观察,发现前加粗的⼤写字母连起来为:ALEXCTF,正好为flag提交的格式开头,且每个字母之间有4个字符相隔,那么括号⾥⾯按照规律就可以组合连接起来。4.最终得到flag :

ALEXCTF{K33P_7H3_g00D_w0rk_up}附录:

data = 'cvqAeqacLtqazEigwiXobxrCrtuiTzahfFreqc{bnjrKwgk83kgd43j85ePgb_e_rwqr7fvbmHjklo3tews_hmkogooyf0vbnk0ii87Drfgh_nkiwutfb0ghk9ro987k5tfb_hjiouo087ptfcv}'flag = ''

for i in range(3, len(data), 5): flag += data[i]print(flag)

⼗六、玩游戏获取flag

题⽬名称:快乐游戏题⽬名称题⽬附件:题⽬附件

https://adworld.xctf.org.cn/media/task/attachments/bce2610d3bfa4da8813732deaab7f87f.zip题⽬writeup:

1.下载附件,对其解压,打开.exe⽂件,游戏要求围住猫即可获取flag2.最终得到flag:

UNCTF{c783910550de39816d1de0f103b0ae32}

⼗七、动态图⽚分解合并

题⽬名称:题⽬名称glance-50题⽬附件:题⽬附件

https://adworld.xctf.org.cn/media/task/attachments/9266eadf353d4ada94ededaeb96d0c50.gif题⽬wirteup:

1.下载附件,得到⼀个很长的⼀条gif动态图⽚,通过stegsolve和winhex等⼯具并没有发现flag2.那么这个题⼤概率就是分离gif的每⼀帧然后拼接形成图⽚得到flag⽅法⼀:⽅法⼀

1.使⽤convert命令对动态图⽚flag.gif进⾏分割 convert flag.gif flag.png

2.再使⽤montage命令对分割的图⽚进⾏合并

montage flag*.png -tile x1 -geometry +0+0 flag.png选项:

-tile是拼接时每⾏和每列的图⽚数,这⾥⽤x1,就是只⼀⾏

-geometry是⾸选每个图和边框尺⼨,我们边框为0,图照原始尺⼨即可合成图⽚为:⽅法⼆:⽅法⼆

1.通过python脚本进⾏分割gif动态图⽚

import os

from PIL import Image

def seoaration_gif(gif_file): png_dir = gif_file[:-4] + '/' os.mkdir(png_dir)

img = Image.open(gif_file) try:

while True:

current = img.tell()

img.save(png_dir+str(current)+'.png') img.seek(current+1) except: pass

if __name__=='__main__':

gif_file = 'flag.gif'

seoaration_gif(gif_file)

2.再次通过python脚本对分割后的png 静态图⽚进⾏合并

# coding=utf-8

# Data: 2021/7/7 16:13# File : hebin.py

from PIL import Image

path = \"C:\\\\Users\\\\backlion\\\\Desktop\\\\flag\\\\flag\\\\\"save_path = 'C:\\\\Users\\\\backlion\\\\Desktop\\\\flag\\\\'im = Image.new('RGBA', (2 * 201, 600)) # 创建新照⽚

imagefile = [] # 存储所有的图像的名称width = 0

for i in range(0, 201):

imagefile.append(Image.open(path + str(i) + '.png')) # 遍历,将图像名称存⼊imagfilefor image in imagefile:

im.paste(image, (width, 0, 2 + width, 600)) # 将图⽚张贴到另⼀张图⽚上 width = width + 2

im.save(save_path + 'result.png')im.show()

⽅法三:

可直接通过在线动态图⽚分解⼯具进⾏获取https://tu.sioe.cn/gj/fenjie/最终flag:

TWCTF{Bliss by Charles 0'Rear}

⼗⼋、图⽚影写之像素取反⽐较

题⽬名称:题⽬名称a_good_idea题⽬附件:题⽬附件

https://adworld.xctf.org.cn/media/task/attachments/96378111f32f49d09f691870f1268799.rar题⽬witeup:

1.下载附件,对其进⾏解压,发现⼀张a_very_good_idea.jpg图⽚,⾸先对其进⾏图⽚查看,是否含有隐藏⽂件2.通过binwalk命令对图⽚⽂件进⾏分析,发现包含有压缩⽂件,且压缩⽂件内含有2张图⽚和⼀个txt⽂件binwalk a_very_good_idea.jpg

3.通过foremost命令对a_very_good_idea.jpg 图⽚⽂件进⾏分解foremost a_very_good_idea.jpg

4.打开其中的hint.txt⽂件,发现有⼀段字符串,try to find the secret of pixels,表⽰:试着找到像素的秘密

5.打开File—>Open—>图⽚,这⾥先打开a_very_good_idea.jpg图⽚6.通过analyse-image combiner打开图⽚to.png

7.利⽤stegsolve将两张图⽚进⾏combine,得到像素相减的图,按左右键转换⾊道,会跳出⼆维码8.通过微信扫描⼆维,最终得到flag:NCTF{m1sc_1s_very_funny}

⼗九、题⽬名称:题⽬附件:题⽬writeup:

1.下载附件,解压,发现⼀张斑马条形码的图⽚⽂件,既然有条形码,这⾥利⽤条形码在线阅读得到其内容:最终得到flag:flag{TENSHINE}

题⽬名称:easycap

题⽬描述:你能从截取的数据包中得到flag吗?题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/d5ba8f87969145059170a222f01e7883.pcap题⽬writeup:

下载附件,并解压附件,⽤wireshark打开流量包⽂件,通过追踪流-TCP流,可看到falg信息这⾥注意提交flag形式,不是flag{}和FLAG{}因此最终flag为:

FLAG:385b87afc8671dee07550290d16a8071

题⽬名称:stage1题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/3600c13125fe4443aeef3c55b9c1357b.png基础知识:

常见的⽂件头和⽂件尾:

JPEG (jpg),   ⽂件头:FFD8FF                        ⽂件尾:FF D9               PNG (png),    ⽂件头:89504E47                      ⽂件尾:AE 42 60 82

GIF (gif),   ⽂件头:47494638                      ⽂件尾:00 3B ZIP Archive (zip), ⽂件头:504B0304                      ⽂件尾:50 4BTIFF (tif),   ⽂件头:49492A00                      ⽂件尾:Windows Bitmap (bmp),   ⽂件头:424D                         ⽂件尾:CAD (dwg),   ⽂件头:41433130                      ⽂件尾:Adobe Photoshop (psd), ⽂件头:38425053                      ⽂件尾:Rich Text Format (rtf), ⽂件头:7B5C727466                     ⽂件尾:XML (xml), ⽂件头:3C3F786D6C                     ⽂件尾:HTML (html), ⽂件头:68746D6C3E

Email [thorough only] (eml), ⽂件头:44656C69766572792D646174653AOutlook Express (dbx), ⽂件头:CFAD12FEC5FD746FOutlook (pst), ⽂件头:2142444E

MS Word/Excel (xls.or.doc), ⽂件头:D0CF11E0

MS Access (mdb), ⽂件头:5374616E64617264204AWordPerfect (wpd), ⽂件头:FF575043

Adobe Acrobat (pdf), ⽂件头:255044462D312EQuicken (qdf), ⽂件头:AC9EBD8FWindows Password (pwl), ⽂件头:E3828596

RAR Archive (rar), ⽂件头:52617221Wave (wav), ⽂件头:57415645AVI (avi), ⽂件头:41564920Real Audio (ram), ⽂件头:2E7261FDReal Media (rm), ⽂件头:2E524D46MPEG (mpg), ⽂件头:000001BAMPEG (mpg), ⽂件头:000001B3Quicktime (mov), ⽂件头:6D6F6F76

Windows Media (asf), ⽂件头:3026B2758E66CF11MIDI (mid), ⽂件头:4D546864

pyc ⽂件头:03f30d0a

题⽬writeup:

下载附件,解压得到⼀张图⽚,通过图⽚⼯具stegsolve打开图⽚,查看图⽚通道,可发现⼆维码通过⼆维码扫描⼯具QR Research扫描⼆维码,可获得⼀串⼗六进制的字符将其⼗六进制字符复制并保存为test1.⽂件

通过winhex⼯具打开test1.pyc⽂件,然后对⽂件进⾏字符转换,转换⽂件---⼗六进制ASCII转换,并确定保存并通过在线pyc反编译对pyc⽂件进⾏反编译为python⽂件https://tool.lu/pyc/

通过美化python代码,并稍微修改,得到获得flag的python⽂件

#!/usr/bin/env python

# visit https://tool.lu/pyc/ for more informationdef flag():

str = [65, 108, 112, 104, 97, 76, 97, 98] flag = \"\" for i in str:

flag += chr(i) print flagflag()

最终获得flag:AlphaLab

题⽬名称:Hear-with-your-Eyes题⽬描述:

⽤眼睛听这段⾳频题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/bf87ed29ac5a46d0aa433880dac5e6d8.gz题⽬writeup:

下载附件,通过linux命令tar对其附件.gz⽂件进⾏解压,得到⼀个⾳频⽂件soud.wavtar zxvf flag.gz

通过⾳频分析⼯具audacity进⾏分析,然后选择步频谱图,可得到falg显⽰为:

flag:e5353bb7b57578bd4da1c898a8e2d767注意提交flag格式,试了⼏次,最终flag为:e5353bb7b57578bd4da1c898a8e2d767

题⽬名称:What-is-this题⽬描述:找到FLAG题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/e66ea8344f034964ba0b3cb9879996ff.gz题⽬writeup:⽅法⼀:

下载附件,并通过linux 命令对其附件.gz进⾏解压,得到2张图⽚tar zxvf e66ea8344f034964ba0b3cb9879996ff.gz

既然是2张图⽚,于是猜测可能是2张图⽚的合并或者⽐较。通过隐写图⽚⼯具stegsolve⼯具打开pic1.jpg然后选择image comibiner⼯具打开另⼀张图⽚pic2.png\\

对2张图⽚进⾏合并,合并后可获得flag⽅法⼆:

得到两张相似的图⽚,第⼀反应是两张图⽚的合并,于是使⽤kali下的compare命令进⾏合并,然后得到FLAGcompare pic1.jpg pic2.jpg -compose src flag.jpg最终得到flag:AZADI TOWER

题⽬名称:red_green题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/2ec5da20345342909d2336aa7418afed.png题⽬writeup:⽅法⼀:

下载附件,并获得⼀张图⽚,该图⽚由绿⾊和红⾊构成。分别将红⾊和绿⾊视为0和1.

下⾯通过stegsolve图⽚影写⼯具的data extract功能进⾏分析勾选RED的0,然后保存flag.jpg可以获得flag信息:⽅法⼆:

其中的红⾊和绿⾊视为0 和 1,再将最后得到的 01序列 转存为图⽚,下⾯为python代码:

# coding=utf8from PIL import Imageimport bitstring

im = Image.open('flag.png')width = im.size[0]height = im.size[1]

pim = im.load() # 读取图⽚的像素信息bin_result = ''

for h in range(height): for w in range(width):

if pim[w,h][0] == 255: # 判断是否是红⾊(R,G,B)[0]表⽰第⼀通道 bin_result += '1' else:

bin_result += '0'

# print bitstring.BitArray(bin=bin_result).bytes.encode('hex')with open('result.jpg','wb') as f:

f.write(bitstring.BitArray(bin=bin_result).bytes)

最终得到flag:

flag{134699ac9d6ac98b}

题⽬名称:normal_png题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/7171426a9b4646aba1db92b1fbc083f5.png题⽬writeup:

下载附件,得到⼀张png图⽚,通过查看图⽚隐写,并没有发现可利⽤的信息。联想到可能图⽚的⾼度变⼩,导致有⼀部分图⽚显⽰不完整。那么这⾥我们调整图⽚的⾼度,这⾥通过填充数据形式将03,6B,修改为04,6B,并保存图⽚

最终flag为:

flag{B8B68DD7007B1E406F3DF624440D31E0}

题⽬名称:就在其中题⽬描述:

格式为flag{xxxx}题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/7cd17d910acf4ac8b563aa5caad18717.zip题⽬writeup:

⾸先下载附件,解压附件,得到⼀个Misc-03.pcapng 流量⽂件。通过binwalk⽂件查看⽂件包含的⽂件,发现包含zip,pdf,jpg等⽂件,其中zip⽂件中含有key.txt⽂件binwalk Misc-03.pcapng

通过foremost命令对其⽂件进⾏分离

发现分离出来的图⽚⽂件没有和flag有关联并且pdf也没有和flag有关联

解压出00000047.zip⽂件,得到⼀个key.txt⽂件,并打开该⽂件,发现是乱码,可能是被加密了。猜测是需要对其解密通过wireshark对Misc-03.pcapng 进⾏分析,搜索关键字:flag。并没有发现和flag有关的信息再次搜索关键字key,并发现数据包中含有\"PRIVATE key\"

通过追踪TCP流,发现是ssh的私钥rsa的key的内容将其内容保存为rsa.key

通过openssl命令对其加密的密⽂key.txt进⾏加载私钥进⾏破解,最终获得明⽂openssl rsautl -decrypt -in key.txt -inkey rsa.key -out flag.txt查看flag.txtcat flag.txt

最终获得flag为:

flag{haPPy_Use_0penSsI}

题⽬名称:再见李华题⽬描述:

假如你是李华(LiHua),收到乔帮主⼀封密信,没有任何特殊字符,请输⼊密码,不少于1000个字。同学,记得署名哦题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/7ab3e456b35945a4afed08050cd8859e.zip题⽬writeup:

下载附件,对附件进⾏解压,发现⼀张图⽚,图⽚上显⽰不完整的MD5值,并没有可利⽤点

通过binwalk命令对其⽂件查看包含的内容,发现其中包含了jpeg和zip⽂件,且zip⽂件含有key.txt⽂件使⽤foremost命令对mail2LiHua.jpg进⾏分离⽂件,发现00000037.zip⽂件可利⽤对其00000037.zip⽂件就解压缩发现需要密码。根据题⽬描述:

假如你是李华(LiHua),收到乔帮主⼀封密信,没有任何特殊字符,请输⼊密码,不少于 1000 个字。同学,记得署名哦~可以推测出:

不少于1000个字,暗含密码为不少于⼆进制1000的密码位数(转换成⼗六进制就是⾄少需要8位以上的密码数)记得署名为李华(LiHua),意思是密码中后⾯5位数是Lihua

使⽤Advanced ZIP Password Recovery_4.0进⾏破解。 密码为15CCLiHua以下使⽤archpr的掩码攻击类型进⾏破解最终flag:

Stay hungry, Stay foolish.

题⽬名称:embarrass题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/54dcee33c07745f39f43a094a1b61dcf.zip题⽬writeup:

下载附件,解压附件得到⼀个流量⽂件misc_02.pcapng⽂件使⽤linux命令strings直接搜索关键字,可得到flagstrings misc_02.pcapng | grep flag

或者⽤wireshark软件打开流量包,直接搜索关键字flag,也可以得到flag最终得到flag:

flag{Good_b0y_W3ll_Done}

题⽬名称:MISCall

题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/d02f31b893164d56b7a8e5edb47d9be5题⽬writeup:

下载附件,通过binwalk命令查看包含⽂件,可以看到⽂件的类型为bzip2binwalk flag

将flag附件⽂件重新命名flag.tar.bz2mv flag flag.tar.bz2

对flag.tar.bz2进⾏解压tar -xjvf flag.tar.bz2

查看解压⽂件夹ctf的⽂件内容,其中包含了flag.txt,和.git⽂件内容cd ctfls -al

通过cat命令查看flag.txt,提交⾥⾯的内容,但是错误,并不是flag,那么.git⽂件有可能和flag有关Nothing to see here, moving along...

通过git stash list 命令查看⽂件修改情况,发现flag.txt和s.py都有被修改过git stash list

需要对.git⽂件进⾏还原,在还原前需要将已被修改过的flag.txt⽂件删除,然后使⽤git stash apply命令进⾏还原,还原后⽣成了新的⽂件s.py和flag.txtrm flag.txt git stash apply

再次通过cat命令查看flag.txt内容,发现内容很⼤⼀⼀串,并不是flagcat flag.txt

并⼜通过cat命令查看s.py内容,发现是与flag有关且和flag.txt有关联,可⽣成flagcat s.py

运⾏s.py脚本,可获得flag内容python s.py最终得到flag:

NCN4dd992213ae6b76f27d7340f0dde1222888df4d3

题⽬名称:Get-the-key.txt题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/256cb07f5dbd493f81ad5b199f2b248a.zip题⽬writeup:

下载附近,并对附件进⾏解压,得到解压后的⽂件forensic100,通过linux file命令查看⽂件系统属性,发现是⼀个linux 的ext2系统⽂件file forensic100

通过mount命令对linux系统⽂件forensic100进⾏挂载到/opt/flag⽬录下mkdir /opt/flag

mount -o loop forensic100 /tmp/forensic100

根据题⽬名称可知,我们要找key.txt⽂件,通过gresp -r “key.txt”命令对当前⽬录下的所有⽂件进⾏关键字“key.txt\"搜索包含存在的⽂件,这⾥可以看到是1⽂件存在包含flag.txtcd /opt/flaggrep -r 'key.txt‘

再次通过file命令查看1的⽂件属性,发现该⽂件是gzip⽂件通过gunzip<1查看⽂件内容,可获得flaggunzip < 1最终得到falg:

SECCON{@]NL7n+-s75FrET]vU=7Z}

题⽬名称:Reverse-it题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/0da9641b7aad4efb8f7eb45f47eaebb2题⽬writeup:

下载附件,解压附件,得到⼀个flag⽂件,然后通过winhex查看flag⽂件,发现末尾是FF 8F FF,这个就是jpg⽂件格式的头部,只不过是倒叙过来。根据题⽬名称recerse-it,要还原⽂件,那就要将⽂件的内容进⾏反向。通过xxd对⽂件进⾏⼗六进制查看xxd -p flag

通过xxd命令先将⼆进制内容进⾏反向,并将反向后的字符以⼆进制的形式输出,然后发现是⼀个JPEG图⽚,此时flag是翻转的。xxd -p flag | tr -d '\\n' | rev | xxd -r -p > flagsfiles flags

通过convert命令对图⽚⽂件进⾏翻转mv flags flags.jpg

convert -flop flags.jpg flag.jpg最终得到flag:

SECCON{6in_tex7}

题⽬名称:打野题⽬描述:

菜你了解CTF圈的实时动态么?flag格式qwxf{}题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/82a98710753740d6b0de1ef17d21c8be.rar基础知识:

LSB(英⽂ least significant bit)即最低有效位。LSB加密是信息隐藏中最基本的⽅法。通常来说LSB加密⽤在⽆损压缩的数据格式⽂件中,例如图像中的bmp格式和⾳频的wav格式。对于图像⽂件LSB的特征很明显,通常将信息隐藏在某⼀个颜⾊通道中。题⽬writeup:

下载附件,对附件进⾏解压得到⼀张flag.bmp的图⽚,通过命令strings对qwxf关键字进⾏搜索,但是没有任何信息,且通过stegsolve也没有发现任何有flag相关的信息通过zsteg对bmp或者png图⽚进⾏隐写查看,这⾥主要查看LSB隐写的信息最终发现flag为:

qwxf{you_say_chick_beautiful?}

题⽬名称:我们的秘密是绿⾊的题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/bb9a4b47c82b4a659ce492cd903df03b.zip题⽬writeup:

下载附件,解压附件得到⼀张flag.jpg图⽚,图⽚中尤其⽐较明显的区域为⽇历的绿⾊字体(根据题⽬名称我们的秘密是绿⾊,那么密码和绿⾊字体有关,这是⼀个处猜想)

通过stegsolve查看图⽚隐写以及搜索关键字flag,并没有发现任何有关的flag,

根据题⽬名称我们的秘密是green,于是想到使⽤OurSecret这个⼯具,然后解密还缺⼀个密码,正好就是上⾯绿⾊的部分数字组合,最终测试密码为:0405111218192526可成功解压出压缩包

,这⾥我们将try.zip⽂件保存。

打开压缩包try.zip提⽰需要输⼊密码,并查看try.zip的压缩包信息,可以看到提⽰“你知道coffee的⽣⽇多少么”这条信息告诉我们,压缩包密码和⽣⽇号码数字有关。通过ziperello 对zip进⾏爆破,这⾥的爆破规则为纯数字号码,⽣⽇号码密码长度为1到8位。得到密码,解压获得两个⽂件为flag.zip和readme.txt

这⾥可以看到flag.zip压缩包中含有⼀个readme.txt以及同⽬录下也有⼀个readme.txt,那么很有可能和压缩包明⽂攻击有关。同时可以看到readme.txt的CRC32校验值为:BA59D790

然后我们将通过winrar压缩程序对readme.txt压缩成readme.zip,并查看readme.txt的CRC32校验值也为BA59D790通过ARCHPR对flag.zip压缩包进⾏明⽂攻击,最终得到解压密码为Y29mZmVl

通过输⼊解压密码,得到2个⽂件分别为flag.zip以及reame.txt打开flag.zip提⽰需要输⼊密码

并且,这次的flag.zip⾥⾯只有flag.txt

通过通过ARCHPR对flag.zip压缩包进⾏密码爆破,发现爆破失败。通过winhex打开flag.zip压缩包,发现下⾯有特殊的伪加密⽅式:

第⼀段50 4B 是压缩源⽂件数据区的头⽂件标记,它对应的红⾊框柱的 00 08 并不影响加密属性。

第⼆段50 4B 是压缩源⽂件⽬录区 ,它对应的 01 09 影响加密属性,当数字为奇数是为加密,为偶数时不加密,因此这将01改为00(⼀般在第⼆段50 4B ...14 00后⾯修改为00)

这⾥将01修改为00,保存即可解压出flag.zip。

或者通过zipceno0p.jar对其进⾏伪加密恢复。java -jar ZipCen0p.jar r flag.zip

解压出flag.zip⽂件后,得到⼀个flag.txt⽂件,打开该⽂件,看到⼀串字符串:qddpqwnpcplen%prqwn_{_zz*d@gq}

这个很明显了看起来像栅栏加密,下⾯是CTFcrack⼯具对其直接解密得到解密:qwlr{ddneq_@dpnwzgpc%nzqqpp_*}

但是并不是flag,看起来像凯撒加密,⼜再次通过CTFcrack⼯具对其直接解密最终得到flag:

flag{ssctf_@seclover%coffee_*}

题⽬名称:Become_a_Rockstar题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/7a7a705cb5874292a47461c7ed0cc0c1.zip题⽬writeup:

下载附件,打开是⼀段字符串,且看到题⽬名称为“Rockstar”有可能和flag有关,于是搜索这个关键字,显⽰是⼀门摇滚明星编程语⾔(Rockstar),这⾥通过下⾯脚本将其转换成pytho语⾔

https://github.com/yyyyyyyan/rockstar-py

python3 rockstarpy -i Become_a_Rockstar.rock -o flag.py通过执⾏转换后的python,即可获得flag最终flag为:

NCTF{youarnicerockstar}

题⽬名称:⼩⼩的PDF题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/a4f37ec070974eadab9b96abd5ddffed.pdf题⽬writeup:

下载附件,解压附件得到⼀张flag.pdf⽂件,然后通过binwalk对其进⾏⽂件包含分析,发现⾥⾯包含了⼀张PDF⽂件以及3张JPEG⽂件通过foemost命令对flag.pdf进⾏分离,得到三张图⽚和⼀张PDF⽂件查看到00000160.jpg⽂件,发现是flag内容最终flag为:

SYC{so_so_easy}

题⽬名称:Cephalopod题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/434c8c0ba659476caa9635b97f95600c.pcap题⽬writeup:⽅法⼀:

⾸先下载附件,得到⼀个流量⽂件flag.pcap,并搜索关键字flag,可以看到流量⽂件中包含了⼀张图⽚flag.png,可能这种图⽚与flag有关

在kali下使⽤命令foremost提取不了图⽚,这⾥可以使⽤tcpxtract进⾏分离流量包中的图⽚ apt-get install tcpxtract

使⽤tcpxtract -f 进⾏分解流量包中的图⽚,可以分解出2张图⽚tcpxtract -f flag.pcap

查看2张图⽚,可以看到在0000000.png图⽚中包含flag

⽅法⼆:

通过wrireshark打开流量包flag.pcap,搜索关键字flag,可以看到包含了flag.png,这可能与flag有关然后对其进⾏追踪流--tcp流

再次搜索关键字flag,发现也有很多包含flag.png的图⽚,这些都不是flag.png的真实数据然后进⾏数据流2 跳转,并查看,发现有包含png图⽚的内容,且开头为IHDR这⾥将以原始数据,保存为flag.png

通过winhex打开flag.png,删除89504E前的所有⼗六进制数据,然后保存图⽚查看保存后的图⽚,发现内容包含了flag最终flag为:

HITB{95700d8aefdc1648b90a92f3a8460a2c}

题⽬名称:Erik-Baleog-and-Olaf题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/a020007e78914bb1a7a17cbf68e2c5d1.zip题⽬writeup:⽅法⼀:

使⽤binwalk命令查看⽂件包含的内容,其中可以看到包含了⼀张png图⽚binwalk stego100

并使⽤foremost命令分离⽂件 foremost stego100

获得了⼀张图⽚000000000.png

通过stegsolve⼯具查看通道,其中图⽚中包含残缺的⼆维码。通过ps进⾏修复,获得⼀张⼆维图⽚

通过QR Research⼆维码⼯具扫描,获得flag

⽅法⼆:

通过strings 命令查看⽂件的属性,其中属性中包含了⼀个URL 图⽚地址。(https://github.com/jesstess/tinyctf/blob/master/erik/data/22kUrzm.png)

这种图⽚和原始的⽂件,可能存在⼀定的关联,这⾥联想到需要进⾏2个⽂件的对⽐使⽤compare命令进⾏2个⽂件对⽐,并输出⼀张新的图⽚⽂件compare stego100 22kUrzm.png -compose src flag.png

通过QR reswarch⼆维码扫描⼯具扫描出flag.png图⽚,可获得flag最终flag为:flag{#justdiffit}

题⽬名称:labour题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/6bf99baed0d84d2c8c28b6b2f08c34a6基础知识:

1.GPX(GPS Exchange Format, GPS交换格式)是⼀个XML格式,为应⽤软件设计的通⽤GPS数据格式。

2.它可以⽤来描述路点、轨迹、路程。这个格式是免费的,可以在不需要付任何许可费⽤的前提下使⽤。它的标签保存位置,海拔和时间,可以⽤来在不同的GPS设备和软件之间交换数据。如查看轨迹、在照⽚的exif数据中嵌⼊地理数据

题⽬writeup:

1.⽤记事本打开⽂件,发现该⽂件的格式为gpx,通过百度gpx⽂件格式。发现是⼀种gps交换数据的地图格式⽂件这⾥可以通过在线⽹址解析gpx格式⽂件出地图。

放⼤发现每个点都有序号,⼀共17个点,然后每个点都对应⼀个国家的名称,按照顺序记录下来

统计出每个坐标点对应的国家城市名称。WP01-A - BangladeshWP02-B - India

WP03-C - TurkmenistanWP04-D - SudanWP05-E - ChadWP06-F - ThailandWP07-G - FranceWP08-H - MalesiaWP09-I - AfganistanWP10-J - PakistanWP11-K - TurkeyWP12-L - HungaryWP13-M - EgyptWP14-N - HaitiWP15-O - AngolaWP16-P - China

WP17-Q - Kazaksztan

发现前⾯7国家城市的⾸字母组合BITSCTF就是flag提交的格式⾸字母。那么组合构成flag:BITSCTF{MAPTHEHACK},提交发现错误

再次查看⽂件中有⼀段注释是:Use appropriate brackets and underscores to separate words if you succeed(如果成功,请使⽤适当的括号和下划线分隔字符)那么重新⽤括号和下划线分割符号组合flag.最终flag为:

BITSCTF{MAP_THE_HACK}

题⽬名称:misc_pic_again题⽬描述:

flag = `hctf{[a-zA-Z0-9~]*}`题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/719af25af2ca4707972c6ae57060238e.png题⽬writeup:⽅法⼀:

下载附件,获得⼀张图⽚,通过stegsolve图⽚隐写⼯具查看图⽚,尝试通道查看并有发现和flag有关的,再次尝试查看图⽚LSB隐写(analyse----DATA Extract)对RGB和LSB数据分析。

这⾥将红蓝绿设置为0,并进⾏提取查看,发现开头为pk,这个是zip压缩头的格式。将结果保存为flag.zip⽂件

对其flag.zip解压缩,获得⼀个1的⽂件

通过winhex或者记事本打开,根据题⽬描述,flag格式为hctf开头,搜索关键字\"hctf\"可以看到⽂件中有包含flag

⽅法⼆:

通过zsteg图⽚影写⼯具对图⽚进⾏分析,发现其中隐藏了⼀个zip⽂件zsteg flag.png

使⽤zsteg -e b1,rgb,lsb,xy 对flag.png LSB隐写的压缩⽂件进⾏提取,保存为flag.zipzsteg -e b1,rgb,lsb,xy flag.png > flag.zip

对保存后的flag.zip进⾏解压缩,解压缩后得到⼀个⽂件1,且通过strings命令对其搜索关键字hctf,可获得flagstrings 1 |grep hctf最终得到flag:

hctf{scxdc3tok3yb0ard4g41n~~~}

题⽬名称:low题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/15a04eedcabe43978bb692c21a0f1b52.rar题⽬writeup:

下载附件,得到这⼀张low.bmp图⽚,通过stegsolve打开,分析lsb隐写,⽆果,发现通道有问题这⾥直接通过脚本⽣成LSB隐写显⽰隐藏图⽚:

import PIL.Image as Imageimg = Image.open('low.bmp')img_tmp = img.copy()pix = img_tmp.load()

width,height = img_tmp.sizefor w in range(width): for h in range(height): if pix[w,h]&1 == 0: pix[w,h] = 0 else:

pix[w,h] = 255img_tmp.show()

将显⽰图⽚保存为flag.jpg

通过QR Rearch⼆维码扫描⼯具可获得flag内容最终得到flag:

flag{139711e8e9ed545e}

题⽬名称:适合作为桌⾯题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/1573d940d9bb47a083da6db70ffbffe0.rar题⽬writeup:

下载附件,并解压附件,得到⼀张1.png图⽚,通过stegsolve⼯具打开图⽚,并查看通道,发现在red plane 1通道是显⽰⼀张⼆维码将⼆维码保存为flag.png图⽚

通过⼆维码⼯具QE Reswarch对flag.png进⾏扫描,获得⼀串⼗六进制的字符串

03F30D0A79CB05586300000000000000000100000040000000730D0000006400008400005A0000640100532802000000630000000003000000160000004300000073780000006401006402006403将⼗六进制字符串保存到新建的flag⽂件中

通过winhex打开flag⽂件,然后转换⽂件---⼗六进制ascii-->⼆进制‘

转换成功后,发现⽂件中包含有1.py和1.pyt关键字,该⽂件为pyc格式的⽂件因此将其保存为flag.pyc

这⾥通过在线⼯具将flag.pyc⽂件进⾏反编译成py⽂件或者通过uncompyle6将flag.pyc反编译成py⽂件uncompyle6 flag.pyc >flag.py

运⾏反编译后的python⽂件,可获得flag(注意需要在末尾添加falg()以调⽤函数)

def flag():

str = [102,108,97,103,123,51,56,97,53,55,48,51,50,48,56,53,52,52,49,101,55,125] flag = '' for i in str:

flag += chr(i) print flagflag()

最终flag为:

flag{38a57032085441e7}

题⽬名称:⼼仪的公司题⽬描述:

⼩⿊在拿到webshell后,马上就获得了⾃⼰⼼仪公司的照⽚题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/31cc86285680418f8a1fb45951d25552.rar题⽬writeup:

strings webshell.pcapng | grep {

根据题⽬描述:⼩⿊在拿到webshell后,马上就获得了⾃⼰⼼仪公司的照⽚。猜测是找http包,然后分析包含照⽚的信息。⽤wireshark打开包,过滤出http协议的包,不⼀会就能找到图⽚中的flag

题⽬名称:misc1题⽬描述:

d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9e1e6b3e3b9e4b3b7b7e2b6b1e4b2b6b9e2b1b1b3b3b7e6b3b3b0e3b9b3b5e6fd题⽬writeup:

根据题⽬描述,发现是⼀串⼗六进制字符,直接转换成ascii发现不⾏。⽽且字符刚好是134位。可以将其分为两个⼀组

payload = \"d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9e1e6b3e3b9e4b3b7b7e2b6b1e4b2b6b9e2b1b1b3b3b7e6b3b3b0e3b9b3b5e6fd\"s = \"\"

for i in range(0,len(payload),2): s += \"0x\"

s += payload[i:i+2] s += \

print s

得到2个⼀组的⼗六进制:

0xd4,0xe8,0xe1,0xf4,0xa0,0xf7,0xe1,0xf3,0xa0,0xe6,0xe1,0xf3,0xf4,0xa1,0xa0,0xd4,0xe8,0xe5,0xa0,0xe6,0xec,0xe1,0xe7,0xa0,0xe9,0xf3,0xba,0xa0,0xc4,0xc4,0xc3,0xd4,0xc6,0xfb,0xb9,0xe1,0xe6,0xb3,0xe3,0xb9,0xe4,0x0xd4此类的都是⼤于127的所以很可能是移位,⽽且要⽤减的,因为这⾥的数字都⽐127来的⼤。

# encoding:utf-8

s = [0xd4,0xe8,0xe1,0xf4,0xa0,0xf7,0xe1,0xf3,0xa0,0xe6,0xe1,0xf3,0xf4,0xa1,0xa0,0xd4,0xe8,0xe5,0xa0,0xe6,0xec,0xe1,0xe7,0xa0,0xe9,0xf3,0xba,0xa0,0xc4,0xc4,0xc3,0xd4,0xc6,0xfb,0xb9,0xe1,0xe6,0xb3,0xe3,0xb9,0xe4,0xb3,0xb7,0xb7,for i in range(135): flag = \"\"

for j in range(len(s)): flag += chr(s[j]-i)

print(\"第%s移位:%s\")%(i,flag)

或者

使⽤下⾯脚本将其每两个分组⼗六进制,转成⼗进制后-128(偏移量为128),再转成ascii码得到flag

import re

s = 'd4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9e1e6b3e3b9e4b3b7b7e2b6b1e4b2b6b9e2b1b1b3b3b7e6b3b3b0e3b9b3b5e6fd'num = re.findall('\\w{2}' ,s)flag = ''

for i in num:

ch = chr(int(i,16)-128) flag += chprint(flag)

最终得到flag:

DDCTF{9af3c9d377b61d269b11337f330c935f}

数字像素隐写

题⽬名称:Miscellaneous-200题⽬描述:[Flag在这⾥!](flag.txt)题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/62f4ea780ecf4e6bbef5f40d674ec073.txt题⽬writeup:⽅法⼀:

下载附件得到⼀个flag.txt⽂件,⾥⾯有61366⾏,每⾏包含三个逗号分隔值的元组,⼤部分为 255,255,255 。这看起来像具有给定 RGB 值的图像。于是可推断以此txt⽂件可绘制⼀幅图⽚

图像的尺⼨可能是:1、2、61、122、503、1006、30683、61366。最可能的图像⼤⼩是 122×503px 或 503×112px。

那么图像的宽度和⾼度为:122*503或者503*122

通过python脚本将其⽂本(像素点)转换成图⽚:

# coding=utf8

from PIL import Imagex = 503y = 122

img = Image.new('RGB',(503,122),\"black\")f = open('flag.txt','r')pix=[]

for i in range(61366): a = f.readline() a = a.replace('\\n','') pix.append(a)

#print pixim = []

for i in range(len(pix)):

im.append(pix[i].split(','))

#print im

for i in range(x):#x = 503 for j in range(y):#y = 122

pix = (int(im[i*122+j][0]),int(im[i*122+j][1]),int(im[i*122+j][2])) img.putpixel((i,j),pix)#写某个像素位置的值img.show()

⽅法⼆:

这⾥我们可以将⽂本内容转换成ppm格式,PPM格式详见下⾯链接:转换后的flag.ppm格式说明:

第⼀⾏:p3表⽰⽂件格式类型为ascii

第⼆⾏:122 503 表⽰图像的宽度和⾼度⽤ascii表⽰第三⾏:最⼤像素值为255字节表⽰,范围为0-255第4⾏开始到6139⾏表⽰图像数据:

按RGB的顺序排列,RGB中间⽤空格隔开,图⽚每⼀⾏⽤回车隔开。

https://github.com/g0tmk/write-ups/blob/master/defkthon-ctf/misc-200/flag.ppm

我们通过命令convert将falg.ppm转换为 PNG,然后翻转 + 旋转》

convert -flip -rotate 90 flag.ppm flag.png可获得图⽚,图⽚中含有flag内容最终得到flag:

flag{ youc@n'tseeme }

端⼝隐写

题⽬名称:Hidden-Message题⽬描述:

藏的什么信息?题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/8868f595665740159650d6e654aadc93.pcap题⽬writeup:

下载附件,得到⼀个流量数据包flag.pcap,此数据包⽤wireshark打开发现都是UDP协议,其中源端⼝末尾号⼀直变化(发现只有红框位置0和1不断变换),考虑到为⼆进制,结合kali的tshark(wireshark命转化之后的到flag

tshark -r flag.pcap -Tfields -e udp.srcport #打印数据包UDP协议源端⼝

tshark -r flag.pcap -Tfields -e udp.srcport | while read port; do echo -n ${port: -1}; done | tr 01 10 | perl -lpe '$_=pack\"B*\最终得到flag:Heisenberg

题⽬名称:Recover-Deleted-File题⽬描述:

恢复磁盘并且找到FLAG.题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/c297795634cb4f6e8e1d88be044ec0c4.gz题⽬writeup:

下载附件,并对附件解压,获得⼀个disk-image⽂件

通过binwalk命令查看⽂件包含的属性,发现是⼀个linux磁盘⽂件binwalk disk-image

通过fls列出linux磁盘⽂件有哪些⽂件和操作记录,可以看到有⼀个⽬录lost+found以及被删除操作flagfls disk-image

根据flag描述,需要磁盘数据还原,可通过extundelete命令对其进⾏恢复,这⾥可以恢复出flag⽬录extundelete disk-image --restore-file /flag或者

extundelete disk-image --restore-all

进⼊到恢复数据⽬录,发现有⼀个flag⽂件,修改flag执⾏程序,并执⾏flag,可获得flag内容cd RECOVERED_FILES/chmod +x flag./flag

最终获得flag:

de6838252f95d3b9e803b28df33b4baa

下载附件,得到⼀个flag.mkv⽂件,打开听到⼀段奇怪的声⾳,可能有flag有关,需要将视频中的⾳频⽂件提取出来。

这⾥使⽤ MKVToolnixPortable对⾳频进⾏提取,可以看到2个mp3⾳频⽂件,先导出第⼆个⾳频⽂件,并保存为flag.mp3(第⼀个mp3⾳频⽂件,通过后⾯的⾳频⽂件分析没有包含flag内容)通过⾳频分析⼯具audacity进⾏分析,查看频谱图,可以看到有包含falg的内容,并不是很清晰,需要视图放⼤查看。最终获得flag为:

flag{fun_v1d30_mu51c}

题⽬名称:很普通的数独题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/dee83d60aeda4a8cae93c5aac8f8a2ff.zip题⽬writeup:

下载附件,解压附件得到25张图⽚,把25张重合到⼀起去,得到⼀个完整的数组,但是没有什么⽤,想到25张数独可以组成5x5,是不是⼀张⼆维码呢?

仔细观察,如果把有数字的⽅格涂⿊,下⾯三张图⽚就是⼆维码的三个定位码,再注意到图⽚数量为25张,是5的平⽅,所以,这25张图⽚组合起来就是⼀张⼆维码

观察发现,1、5、21这三张图⽚是定位块,但是顺序不对,将顺序换为5、21、1

于是把有数字的转换成1,没有数字的地⽅转换成0,再按顺序转换成01,得到下述数据将其保存为flag.txt:111111101010101000101000001111110000101111111100000101100111101010011101100011001001000001101110101110011111010011111101000101001011101101110101101100010001010000011110001101011101101110100011100100001111101111111011101011101100000101100100000011000100001110100001000001111111101010101010101010101010101011101111111000000000011001101001000110100110011100000000110011100100100001111111100100101000000101111101001001011111111101110101011110101101001100100000111100100100000110001101001101010001010001100010011010001010011000100000010110010000010110101010001111110100011101001110101101111100011000100011100111011101101100101101110001001100110100000000010010000111100101101011010101000001011010111110011011111101001110100011110111110111011001101100010100001110000100000110101000010101000011101101101110101101001100010011111110001011111010001000011011101101100011001011001010101100011110101001100001010010010111111111101011111111101101101111111111100011110001100000100001000101000100100100011110111110101110011100111010110100110100101010010110010001011101011101000111100000011100010000101011111011100111101111111100001010111110010110100011000111000100111101101111101000100010111101111110001001000011010110001111110111110011001010101000110010100010001000101101010001011101110101101101100100001101101000111101001110110001001101100010101101111110100101100110000011100111000000000100001010101111100010010111010010011110011101110010100001011111010010101001100010111111110100000100001010101010100000010011001001101110101001111100101111101101000010111101110001101011000001000101110100110011110011010100010100000011011000001110010000100110100100001101111111101100101110111110011000000001111110101101000101011100100100011010111111100011111011011010101101110011101011110100000101110101101101000111110010001100010001101110101011100001111111101101001000111111011101110100110111101101000001001101100011101101101110100000011101100001101010110010010010001100000101011001011111011001011000011010110000111111101010101001111011110101101110000101101使⽤python脚本转换成图⽚:from PIL import Imagex = 45y = 45

im = Image.new('RGB', (x, y))

with open('flag.txt') as f: for i in range(x): ff = f.readline() for j in range(y): if(ff[j] == '1'):

im.putpixel((i, j), (255,255,255)) else:

im.putpixel((i, j), (0,0,0))im.save(\"flag.jpg\")

⽣成⼀张⼆维码图⽚

通过⼆维码QR Research扫描图⽚可获得⼀串base64的字符串

Vm0xd1NtUXlWa1pPVldoVFlUSlNjRlJVVGtOamJGWnlWMjFHVlUxV1ZqTldNakZIWVcxS1IxTnNhRmhoTVZweVdWUkdXbVZHWkhOWGJGcHBWa1paZWxaclpEUmhNVXBYVW14V2FHVnFRVGs97 次 base64 解码得到https://base64.us/最终得到flag:

flag{y0ud1any1s1}

题⽬名称:很普通的Disco题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/48dd5a182fcc477a9a83200d800e26db.zip题⽬writeup:

下载附件,解压附件得到⼀个Disco.wav⾳频⽂件,于是联想和⾳频隐写有关先⽤audacity打开,发现开头有杂⾳,放⼤查看开头

仔细的查了查,刚好有105个峰值频率⾼低起伏的点。峰值⾼的点为1,峰值低的点为0。输出出来是105个⼆进制数,每7个数为⼀组,刚好15组,也就是15个字母。输出的⼆进制⽂件:

110011011011001100001110011111110111010111011000010101110101010110011011101011101110110111011110011111101

⼆进制位,8个⼆进制转成⼀个字符。这⾥只有105个,前七位1100110,是f的⼆进制形式。所以需要取出凑够8位,将步长设置成7,然后 + 0,再转成字符串

使⽤以下python脚本进⾏转换成ascii:

s = '110011011011001100001110011111110111010111011000010101110101010110011011101011101110110111011110011111101'flag = ''

for i in range(0,len(s),7):

flag += chr(int('0'+s[i:i + 7],2))print(flag)最终flag:

flag{W0W*funny}

题⽬名称:miscmisc题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/d037429cf055493b879ef09d9b59bd41.zip题⽬writeup:

1.下载附件,对其进⾏解压,得到⼀张bugoucuci.png图⽚,并通过binwalk对图⽚⽂件进⾏查看⽂件包含属性,发现图⽚⽂件隐藏了zip和PN两种⽂件。

通过foremost命令对bugoucuci.png图⽚进⾏分离,得到2个压缩⽂件和⼀个PNG图⽚⽂件。其中2个压缩⽂件的内容是⼀样的,只需要分析其中⼀个压缩⽂件就⾏了。这⾥对其中的⼀个压缩⽂件00000090进⾏解压,得到⼀个chadiand.zip压缩⽂件和⼀张chayidian.jpg图⽚⽂件

直接解压chadiand.zip⽂件,提⽰需要输⼊密码。⾸先猜测可能是爆破,但是爆破了⼗多分钟也没出密码。说明密码和爆破⽆关。接着分析chayidian.jpg图⽚⽂件,通过binwalk命令发现图⽚⽂件包含了⼀个压缩⽂件和1张PNG图⽚通过foremost对chayidian.jpg图⽚⽂件进⾏分离,得到⼀个00000318.zip压缩⽂件。对00000318.zip压缩⽂件进⾏解压,得到⼀个flag.txt⽂件,查看⽂件内容并不是flag

根据解压出来的flag.txt⽂件以及需要密码解压的chadiand.zip⽂件中也包含了⼀个flag.txt⽂件,猜测是需要⽤到明⽂攻击才能解压出chadiand.zip⽂件

⾸先通过winrar压缩软件对flag.txt进⾏打包压缩成flag.zip,然后对⽐其中CRC32的值,发现chadian.zip和flag.zip的CRC32值是⼀样的。那么就可以通过明⽂攻击可以解压出chadian.zip这⾥通过ARCHRP对chadian.zip⽂件进⾏明⽂攻击等待⼗分钟后,显⽰加密密钥已恢复成功

然后点确定然后保存chadiand_decrypted.zip

对chadiand_decrypted.zip进⾏解压,得到以下三个⽂件

解压whoami.zip⽂件,提⽰需要输⼊密码,既然解压得到三个⽂件,那么解压的密码⼀定和另外两个⽂件有关。

打开world.png图⽚⽂件,图⽚内容中发现有提⽰: pass in world. 此时想到密码可能与此图⽚还有world.doc⽂件有关,在kali下通过binwalk分析⽆果。‘

那么考虑可能是图⽚的隐写,于是打开stegsolve打开world.png⽂件,

然后试探各种通道,在LSB BGR条件下发现pass,所以这是LSB信息隐写。得到pass:z^ea,去解压⽂件 发现不⾏

打开world.doc⽂件,显⽰是⼀段提⽰内容:除了这个就差⼀点点了,并根据提⽰ pass in world 猜想 world.doc ⽂件 可能还会有隐藏⽂字勾选word选项中的隐藏的⽂字,就会显⽰出⼏⾏像密码的隐藏字符

到⽬前为⽌,我们从world1.png中得到 pass:z^ea 在world.doc⽂件中得到⼏⾏隐藏的字符串。测试了z^ea+world.do每⾏中隐藏的字符串都不能解压压缩⽂件。出题⼈真的是脑洞⼤开,谁会想到最后的密码是 pass内容+world⾥每⾏字符串的最后⼀个字符,于是解压密码就是 :z^ea4zaa3azf8

通过该密码解压出whoami压缩包,打卡压缩包中的whoami.txt就得到了flag内容。

最终flag为:

flag{12sad7eaf46a84fe9q4fasf48e6q4f6as4f864q9e48f9q4fa6sf6f48}

题⽬名称:flag_universe

题⽬描述:please find the flag in our universe!题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/d2ced53c4a2e476995845c72bc39939d.zip题⽬wirteup:

打开流量包,使⽤筛选器筛出ftp数据流,可以看到通过ftp命令操作了universe.png和flag.txt以及new_universe.png图⽚其中对⽐较显眼的new_universe.png图⽚进⾏TCP数据流追踪

追踪数据流在到TCP流为10时,出现了⼀段base64字符串

对base64解密后得到:flag{This is fake flag hahaha},提交显⽰错误,该flag是假的flag

继续追踪TCP数据流,universe.png中也没有flag,当追踪到第14个TCP数据流时,有⼀个new_universe.png

通过原始数据格式保存为flag.png可以看到成功导出了⼀张PNG图⽚

通过stegsolve图⽚隐写⼯具进⾏查看,发现存在LSB隐写,可获得flag内容最终flag为:

flag{Pla te_err_klaus_Mai l_Life}

题⽬名称:奇怪的TTL字段

题⽬描述:我们截获了⼀些IP数据报,发现报⽂头中的TTL值特别可疑,怀疑是通信⽅嵌⼊了数据到TTL,我们将这些TTL值提取了出来,你能看出什么端倪吗?题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/0bf565e00b864f4ba06efc858056c7e9.zip题⽬writeup:

下载附件,对其解压得到⼀个ttl.txt⽂件,其内容就是⼀组ttl的值

该⽂本⽂件中的TTL值只有4种值:63/255/127/191,并且根据题⽬的介绍我们知道数据隐藏在这些值⾥,那么就⽐较容易想到的是信息隐藏在⼆进制中。

将这四个数值都转换成⼆进制得到 :111111、1111111、1111111、10111111。 TTL 值为⼀个 8 位整数,不⾜ 8 位的⼆进制数开头补 0,变为 8 位。

即:00111111、11111111、0111111、10111111

变的只有前⾯两位,后⾯6位1不变,只有前⾯两位藏了数据,也就是说⼀组TTL值可以隐藏⼀个字节,提取开头两位为:00、11、01、10,恰好为全排列,可以⽤于数据的存储:值(D)⼆进制63255127191

00111111111111110111111110111111

TTL=127--》01TTL=191--》10TTL=127--》01TTL=191--》10

得到⼀个字母对应的8位即:01100110,即字母为:f

如果传输4个就是⼀字节,取前⾯的2位组成8位,对照⼆进制字母表,可以发现前⾯是ffd8,jpg图⽚标志

通过python脚本将ttl.txt提取转换后的数据并保存为图⽚,是因为⼆进制转成ASCII时发现是 jpg ⽂件格式。

f = open('ttl.txt','r')TTL = f.readlines()p = []

for i in TTL:

p.append(int(i[4:]))s = ''for i in p: if i == 63: a = '00' elif i == 127: a = '01' elif i == 191: a = '10' elif i == 255: a = '11' s += aprint(type(s))print(s)

import binasciiflag = ''

for i in range(0,len(s),8): flag += chr(int(s[i:i+8],2))flag = binascii.unhexlify(flag)wp = open('res1.jpg','wb')wp.write(flag)wp.close()

得到⼀张resq.jpg⼆维码图⽚:

通过binwalk命令查看⼆维码图⽚包含有6张图⽚并通过foremost分离出res1.jpg图⽚

最终得到6张残缺的图⽚,可拼图为⼀张⼆维码图⽚

⽤ps拼接成⼆维码图⽚

通过 QR resarch⼆维码扫描⼯具读取出内容出来:

其内容为:

key:AutomaticKey cipher:fftu{2028mb39927wn1f96o6e12z03j58002p}

根据key的信息,可以联想到⼀种常⽤的加密,Automatic加密通过在线 解密⽹站:

https://www.wishingstarmoye.com/ctf/autokey最终flag为:

flag{2028ab39927df1d96e6a12b03e58002e}

题⽬名称:2-1题⽬附件:基础知识:

89 50 4E 47 0D 0A 1A 0A 是PNG头部署名域,表⽰这是⼀个PNG图⽚00 00 00 0D 描述IHDR头部的⼤⼩

49 48 44 52 是Chunk Type Code, 这⾥Chunk Type Code=IHDR

00 00 00 CE 00 00 00 CE 08 02 00 00 00 描述了Chunk Data,它是可变长度数据,前四个字节(前8位)是宽度,后四个字节(后8位)节是⾼度。F9 7D AA 93 是IHDR的CRC校验

题⽬writeup:

下载附件,对其进⾏解压得到⼀张misc4.png图⽚,但是⽆法打开⽂件

通过winhex打开misc4.png图⽚,发现PNG图⽚⽂件头开头的 前 4位(80 59) 不对。PNG (png),⽂件头:89504E47 ⽂件尾:AE 42 60 82将其修改为89 50 并保存为flag.png依然打不开⽂件

通过tweakPNG⼯具查看png图⽚IHDR的CRC值,发现CRC值不对

把图⽚⽂件IHDR 的crc校验值 修改为 55 d5 f6 4f 后发现 还是打不开

发现图⽚的宽度为0,需要根据 crc校验值 算出图⽚的宽度(前8位为图像宽度,后⼋位为图像⾼度)

下⾯通过python 脚本算出图⽚的宽度:

import os

import binascii import struct

misc = open(\"misc4.png\

for i in range(1024):

data = misc[12:16] + struct.pack('>i',i)+ misc[20:29] crc32 = binascii.crc32(data) & 0xffffffff if crc32 == 0x932f8a6b: print (i)

得到709,⼗六进制转换后得到,0x2c5

接下来我们在winhex中将宽度字节改为02C5

保存为falg2.png,打开图⽚发现包含flag内容:最终flag为:

wdflag{Png_C2c_u_kn0W}

题⽬名称:3-11题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/d0430db27b8c4d3694292d9ac5a55634.png题⽬writeup:

⽤ Stegsolve 打开,发现是 LSB 隐写,开头 PK是 zip 的⽂件头将其另存为flag.zip,打开压缩⽂件,发现⽂件已损坏

于是⽤winrar⾃带的修复压缩⽂件的功能进⾏修复压缩⽂件

将修复好的⽂件保存为rebuilt.flag.zip,对其进⾏解压,得到⼀个flag.txt⽂件,⽂件内容为base64将base64通过在线⼯具进⾏解密,发现是⼀张PNG图⽚将其保存为flag1.png图⽚,发现⽆法打开该⽂件

如何变成图⽚呢,尝试直接改后缀名根本不⾏,这时候想到能不能base64转图⽚呢,百度⼀下找到了在线⽹站,直接转换得到了答案

最终flag:

FLAG{LSB_i5_SO_EASY}

题⽬名称:互相伤害

题⽬描述:flag 为flag{XXX}内的XXX内容题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/0fb3ac2f54b7497cb35e04265c478b76.zip题⽬writeup:

下载附件,解压附件得到⼀个⽂件flag

通过file命令查看flag⽂件属性为pcapng流量包⽂件将其后缀名改为.pcapng

⽤Wireshark打开流量包,过滤http协议,发现存在多个jpg⽂件请求通过导出http对象,将jpg⽂件全部提取出来

提取出共21个jpg⽂件,可以看出全部为⽃图素材⾸先分析图15,发现其中包含了⼆维码图:

通过在线⼆维码扫描(这⾥使⽤QR Rearch扫描不起)可获得⼀串加密的字符串:https://cli.im/deqr

U2FsdGVkX1+VpmdLwwhbyNU80MDlK+8t61sewce2qCVztitDMKpQ4fUl5nsAZOI7 bE9uL8lW/KLfbs33aC1XXw==根据图⽚⽂字提⽰“本发布会由AES独家赞助”那么上⾯⼆维码获取的字符串为AES加密的字符串。其中图⽚上的⽂字“CTF\"可能和AES解密的密钥有关。可将CTF试作为解密的密码。http://www.jsons.cn/aesencrypt/得到解密后的字符串:668b13e0b0fc0944daf4c223b9831e49

以668b13e0b0fc0944daf4c223b9831e49 提交flag,发现提交失败,显然不是flag.

继续通过binwalk对其他⽂件进⾏依次分析,发现其他图⽚⽂件都包含有zip⽂件。对其中任意⼀个图⽚⽂件10.jpg进⾏分离得到⼀个压缩⽂件

解压缩⽂件得到⼀张⼆维码图⽚,并通过QR Rearch⼆维码扫描⼯具,发现扫描出来的内容⼏乎都是“扔下内⾐真有⼀线⽣机交出内裤才有活路”

仔细观察,图5⽂字内容可以简单理解为“扔下内⾐,交出内裤”,观察⽃图素材发现图11符合上述描述“来呀,互相伤害”这张图也与题⽬名称“互相伤害”有相同有关联。那么就继续对图11重点分析

图 5

图11

通过foremost命令对其进⾏分离,得到⼀个压缩⽂件但是解压缩提取出来的压缩⽂件,提⽰需要密码

输⼊上⾯解出来的字符串,可正常解开压缩⽂件

可获得⼀张画中画的⼆维码图⽚

扫描图⼆维码得到字符串:“扔下内⾐真有⼀线⽣机交出内裤才有活路!!!!“。发现⼆维码中⼼还有⼀个⼆维码,将⼩⼆维码截取出来,扫码得到flag内容:

得到flag:

flag{97d1-0867-2dc1-8926-144c-bc8a-4d4a-3758}但是根据题⽬描述,flag 为flag{XXX}内的XXX内容最终flag为:

97d1-0867-2dc1-8926-144c-bc8a-4d4a-3758

题⽬名称:签到题题⽬描述:

SSCTF线上选举美男⼤赛开始了,泰迪拿着他的密码去解密了,提交花括号内内容(Z2dRQGdRMWZxaDBvaHRqcHRfc3d7Z2ZoZ3MjfQ==)题⽬writeup:

根据描述,那么falg提交的格式为ssctf{}或者flag{},根据flag提交格式,因此最终的字符串必然是被栅栏密码加密过的提交花括号内容:Z2dRQGdRMWZxaDBvaHRqcHRfc3d7Z2ZoZ3MjfQ==通过ctfcarckt00ls对其进⾏base64解密:得到base64解密字符串:

ggQ@gQ1fqh0ohtjpt_sw{gfhgs#}

上段密⽂的开头是g所以必然还要经过以此凯撒密码加密的通过对其凯撒解密,移位14得到看起来像FLAG格式的开头的SSC

得到位移14的凯撒解密为:ssC@sC1rct0atfvbf_ei{srtse#}

再栅栏密码解密,每组字数8,第⼆栏就是ctf内容:

最终ctf结果为:

ssctf{ssCtf_seC10ver#@rabit}

题⽬名称:隐藏的信息题⽬描述:

这是⼀个被混淆的⽂件,但是我忘记了这个⽂件的密码。你能够帮助我还原明⽂吗?题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/2eb44acfc89d4f0f9fa221d21ab96033.zipwireup:⽅法⼀:

1.下载附件,解压附件得到⼀个message.txt⽂本⽂件,打开⽂件发现内容是⼀串⼋进制的数字,需要将其转换成ascii2.通过 python脚本将⼋进制数字转换成ascii

import reimport sys

s='0126 062 0126 0163 0142 0103 0102 0153 0142 062 065 0154 0111 0121 0157 0113 0111 0105 0132 0163 0131 0127 0143 066 0111 0105 0154 0124 0121 060 0116 067 0124 0152 0102 0146 0115 0107 065 0154 0130 062 0116 0150 0142 01a=re.findall('\\d{3,}',s)for i in a:

sys.stdout.write(chr(int(i,8)))

得到ascii:V2VsbCBkb25lIQoKIEZsYWc6IElTQ0N7TjBfMG5lX2Nhbl9zdDBwX3kwdX0K,该字符串看起来像base64加密通过ctfcarckt00ls⼯具的base64解密功能对其解密,得到flag

⽅法⼆:

使⽤“⼋进制 ⼗进制 ASCII相互转换【⽀持多个字符串】”⼯具解—>输⼊内容—>⼋进制转换ASCII得到asccii:

V2VsbCBkb25lIQoKIEZsYWc6IElTQ0N7TjBfMG5lX2Nhbl9zdDBwX3kwdX0Kbase64解密:https://base64.us/

最终得到flag:

ISCC{N0_0ne_can_st0p_y0u}

题⽬名称:saleae题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/5621c80acfbc445d9eb252b2660070b5.zip题⽬writeup:

下载附件,对其进⾏解压得到⼀个saleae.logicdata⽂件,该⽂件为逻辑分析仪数据⽂件。通过⾕歌搜索是需要⽤Logic软件打开,打开⽂件发现有4个channel,其中channel 0和channel 2有波形。Logic 软件下载地址:https://downloads.saleae.com/logic/1.2.18/Logic+1.2.18+Win+64+Standalone.zip在analyzers新建⼀个SPI项⽬

参数设置如下,其中MOSI是主输出从输⼊,MISO是主输⼊从输出:channel 0:规律性,等宽,是 CLKchannel 1:⽆波形,是主输出端 MOSI

channel 2:波形宽度不⼀,携带数据,为主输⼊端 MISO

channel 3:数据传输是低电平,为CS偏选端

直接竖着查看,可获得flag

flag最终为:

flag{12071397-19d1-48e6-be8c-784b89a95e07}

题⽬名称:intoU题⽬描述:

I'm so into you I can barely breath.And all I wanna do is to fall in deep (IntoU歌曲歌词)题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/d7351710703a49cda273d3284e7a3df1.zip题⽬writeup:

下载附件,对其进⾏解压得到⼀个⾳频⽂件,通过Audacity打开⾳频⽂件进⾏分析,⾸先选择频谱图,看了⼤半天也没发现有flag.通过⾕歌搜索,发现需要调整到较⼩的采样率,才有可能显⽰⾳频隐写,下⾯将其采样率设置为8000 HZ

Ariana Grande---->频谱图—>采样率—>8000 HZ拖动滚动条到最右边,并视图--放⼤,可查看到flag内容

最终获得flag:

RCTF{bmp_file_in_wav}

题⽬名称:Excaliflag题⽬描述:

只有⼀个真正的⿊客可以从这个地⽅得到flag题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/f3f30930116f4b168e132db45907d0ee.png题⽬wireup:

⾸先下载附件,解压获得⼀张图⽚,通过stegsolve图⽚隐写⼯具打开,然后切换⾊块,终获得flag内容:最终得到flag:

3DS{Gr4b_Only_th1s_B1ts}

题⽬名称:Just-No-One题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/7932f0a447b74cfc8b6820aa706e9446.exe题⽬writeup:

下载附件,获得⼀个exe可执⾏程序,点击安装,进⼊下⼀步,需要输⼊密码,猜测可能需要逆向破解密码尝试通过winhex和IDA分析⽆果

仔细观察,在安装软件协议的条款⾥⾯发现了⼀些关于和flag有关的信息:YOU MAY SUBMIT THIS TO GET TEN POINTS(你可以提交这段字符串获得标识)。YOU MAY SUBMIT THIS TO GET TEN POINTS: ILOVEREADINGEULAS. 那么最终flag为:

ILOVEREADINGEULAS

题⽬名称:信号不好先挂了题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/b90a71f6e04b427dba2f8d307de79145.zip题⽬writeup:

下载附件,对其进⾏解压,获得⼀张apple.png图⽚,通过stegsolev图⽚隐写⼯具的analyse---data extract功能对图⽚的LSB进⾏查看分析发现图⽚的LSB隐写中包含了PK,该PK为压缩数据包头。将其保存为flag.zip

对flag.zip进⾏解压,发现压缩⽂件已损坏

通过winrar的修复压缩⽂件功能对已损坏的flag.zip压缩⽂件进⾏修复

保存为rebuilt.flag.zip,并对其进⾏解压,获得⼀张pen.png图⽚

再次通过stegsolve对pen.png图⽚进⾏通道查看,发现好⼏个通道中都有⼀些条纹

然后两张图⽚长得⼀样,所以很容易想到可能是藏有盲⽔印,于是⽤opencv处理盲⽔印得到flag。python bwm.py decode pen.png apple.png flag.png打开合成的盲⽔印图⽚flag.png,可看到flag内容:最终flag为:

unctf{9d0649505b702643}

题⽬名称:黄⾦六年题⽬附件:题⽬writeup:

下载附件,对其解压得到⼀个mp4视频⽂件,通过winhex打开,发现在末尾隐藏的base64加密字符串也可以通过strings命令查看⽂件中包含的字符串strings hj6.mp4

得到base64加密字符串:

UmFyIRoHAQAzkrXlCgEFBgAFAQGAgADh7ek5VQIDPLAABKEAIEvsUpGAAwAIZmxhZy50eHQwAQADDx43HyOdLMGWfCE9WEsBZprAJQoBSVlWkJNS9TP5du2kyJ275JzsNo29BnSZCgMC3h+UFV9p1QEfJkBPPR6MrYwXmsMCMz67DN/k5u1NYw9ga53a83/B/t2G9FkG/IITuR+9gIvr/LEdd1ZRAwUEAA==通过在线解密⼯具,解密获得看起来像rar⽂件https://base64.us

这⾥通过python脚本将base64转换成rar压缩包:

import base64

code = \"UmFyIRoHAQAzkrXlCgEFBgAFAQGAgADh7ek5VQIDPLAABKEAIEvsUpGAAwAIZmxhZy50eHQwAQADDx43HyOdLMGWfCE9WEsBZprAJQoBSVlWkJNS9TP5du2kyJ275JzsNo29BnSZCgMC3h+UFV9p1QEfJkBPPR6MrYwXmsMCMzr = base64.b64decode(code)file = open(\"flag.rar\file.write(r)file.close()

打开压缩包,发现需要输⼊密码,通过爆破也没解密出来,解密密码可能和视频中的图⽚有关。通过free video to jpg converter,将视频中的图⽚提取出来

下载地址:https://secure-sc-dvdvideosoft.netdna-ssl.com/FreeVideoToJPGConverter_5.0.101.201_o.exe

得到316张图⽚,通过仔细查看,发现有4张图⽚⾥⾯包含了⼆维码

下⾯是提取出含有⼆维码的4张图⽚,并对4张图⽚中的⼆维码单独截图出来,通过QR Rearch进⾏扫描,并获得4个KEY的密码字符串。

做这种题⽬着实应该把屏幕调亮⼀点,最后⼀张⼆维码找了好久死活找不到,调亮了屏幕之后就⽴马找到了。

将⼆维码扫描获得的4个KEY的字符串按照属性拼接得到解压密码key:iwantplayctf输⼊iwantplayctf密码对flag.zip进⾏解压缩,获得flag.txt打开flag.txt获得flag

最终flag为:

roarctf{CTF-from-RuMen-to-RuYuan}

题⽬名称:打开电动车题⽬描述:

截获了⼀台电动车的钥匙发射出的锁车信号,3分钟之内,我要获得它地址位的全部信息。flag内容⼆进制表⽰即可题⽬附件:

https://adworld.xctf.org.cn/media/uploads/task/3d93f0c47ad94e31882e0a670eb6f5cf.zip题⽬writeup:

下载附件,对其解压,得到⼀个⾳频⽂件,通过Audacity打开⾳频⽂件,然后通过视图---放⼤查看波形图。可以看到短波和长波

短波为0,长波为1,转换得到 01 字符串:

0 011101001010101001100010

根据题⽬信息说需要地址位的全部信息

查资料得到:信号是由同步引导码,地址位和数据位构成

固定码遥控信号的构成:

⼀个是PT226x的,前⾯4bit表⽰同步码,中间的8bit表⽰地址码,后⾯的4bit表⽰功能码,后⾯最后⼀个是停⽌码⼀个是PT224x的,前⾯8bit表⽰同步码,中间的20bit表⽰地址码,后⾯的4bit表⽰功能码,后⾯最后⼀个是停⽌码

PT226X和PT224X不同之处,PT226X 中不可能出现10这种情况,这道题就是PT224X.

钥匙信号(PT224X) = 同步引导码(8bit) + 地址位(20bit) + 数据位(4bit) + 停⽌码(1bit)仔细查看波形图得到如下:

所以去掉前⾯的同步码0和后⾯的数据位0010得到全部20bit地址位如下:

01110100101010100110

最终flag:

flag{01110100101010100110}

题⽬名称:hong题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/3fce1ffa2af0438f82c38e321d3d3032.rar题⽬writeup:

下载附件,对其解压,得到⼀个hong.mp3的⾳频⽂件,通过binwalk分析⾳频⽂件包含的⽂件,可以看到包含有jpeg图⽚⽂件binwalk hong.mp3

通过foremost命令对hong.mp3⽂件进⾏分离,得到2个图⽚⽂件foremost hong.mp3

⾸先查看0000161.jpg⽂件,发现是⼀张⼆维码图⽚

通过QR Rearch⼆维码识别⼯具对0000161.jpg⽂件进⾏扫描识别,得到⼀串⼗六进制字符串通过在线⽹站https://ab126.com,对⼗六进制字符串进⾏转换为ascii,解密出来是乱码,⽆⽤。

03f30d0ad41db4576300000000000000000100000040000000730d0000006400008400005a00006401005328020000006300000000030000000700000043000000734b0000006401006402006403006404006405006406006407006707007d00006408007d0最后查看另⼀张00000269.jpg图⽚,发现图⽚中包含有flag内容

最终flag为:

BCTF{cute&fat_cats_does_not_like_drinking}

题⽬名称:3-1题⽬附件:题⽬writeup:

下载附件,对其进⾏解压,得到⼀个⼆进制⽂件flag,通过file命令查看⼆进制⽂件flag,发现⽂件格式为rar压缩包file flag

将其⼆进制⽂件flag 重命名为flag.rar,并对压缩⽂件进⾏解压,得到⼀个⽂件flag1再次通过file命令查看falg1的⽂件格式为pcapngfile flag1

将flag1重命名为flag1.pcapng,并通过wireshark打开。搜索关键字falg,发现在http协议中有flag.zip和flag.txt进⾏get 请求。猜测flag和这2个⽂件有关。通过wireshark的导出对象---http功能可导出http请求所有的⽂件内容。这⾥导出http请求的所有对象保存到flag⽂件夹下

导出来2个⽂件分别为receiver和flag.zip,并对flag.zip进⾏解压缩,发现需要密码,解压密码需要在流量包中分析获得。接下继续分析流量包,对flag.rar http get 请求处进⾏追踪流--tcp流分析追踪 TCP 流 6 时,发现⼀些linux操作命令和⼀段 python 代码。

Linux 系统账户为 root,密码为 jfm,尝试⽤ jfm 解压失败,接下来执⾏ ls,cd tf/ cd wireshark/,ls 命令。执⾏ cat 1 时得到 rar ⽂件内容,

执⾏ cat 2,得到 base64 编码,解码发现乱码,尝试直接⽤于解压,失败执⾏ cat 3,得到 ⼀段 python 代码,代码中有 AES,猜测是需要解密其中,那个base64应该就是密⽂base64加密之后的字符串。

该python是⼀个通过AES的CBC模式将字符串进⾏加密或解密的脚本,其中IV是密钥也是偏移量

# coding:utf-8

from Crypto import Randomfrom Crypto.Cipher import AESimport sysimport base64

IV = 'QWERTYUIOPASDFGH'def decrypt(encrypted):

aes = AES.new(IV, AES.MODE_CBC, IV) return aes.decrypt(encrypted)def encrypt(message): length = 16

count = len(message)

padding = length - (count % length) message = message + '\\0' * padding

aes = AES.new(IV, AES.MODE_CBC, IV) return aes.encrypt(message)str = 'this is a test'example = encrypt(str)print(decrypt(example))

对上⾯python 代码进⾏修改 ,并对其编 码 ⽤ base64 解 码 后 解 密 ((注意要先⽤base64解码才能进⾏AES-CBC解密):# coding:utf-8

__author__ = 'YFP'

from Crypto import Randomfrom Crypto.Cipher import AESimport sysimport base64

IV = 'QWERTYUIOPASDFGH'def decrypt(encrypted):

aes = AES.new(IV, AES.MODE_CBC, IV) return aes.decrypt(encrypted)def encrypt(message): length = 16

count = len(message)

padding = length - (count % length) message = message + '\\0' * padding

aes = AES.new(IV, AES.MODE_CBC, IV) return aes.encrypt(message)str = 'this is a test'example = encrypt(str)print(decrypt(example))#增加如下两⾏

a='19aaFYsQQKr+hVX6hl2smAUQ5a767TsULEUebWSajEo='print(decrypt(base64.b64decode(a)))

执⾏修改后的python 脚本,得到base64的AES解密字符串为:No_One_Can_Decrypt_Me,并将该字符串作为密码对flag.zip进⾏解压缩成功解压出flag.txt,打开flag.txt,获得flag最终flag为:

WDCTF{Seclab_CTF_2017}

wdflag{My_c4t_Ho}

题⽬名称:4-2题⽬描述:

格式为flag{xxxxxxxx}题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/1ddbc89c20c845928498c22cd3faf1c4.txt题⽬writeup:

下载附件 ,得到⼀个.txt⽂件,打开⽂件发现下⾯⼏个标红的字母具有⼀定频率数通过词频分析得到flag,附在线分析⽹站:https://quipqiup.com得到flag:classical-cipher_is_not_security_hs根据题⽬描述,提交的flag格式,最终flag为:flag{classical-cipher_is_not_security_hs}

题⽬名称:5-1题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/badd3e0621ff43de8cf802545bbd3ed0题⽬writeup:

下载附件,对其进⾏解压,得到⼀个⼆进制⽂件flag,通过命令file查看⽂件类型,并没有发现⽂件类型file flag

通过winhex打开flag⽂件,发现字符是加了密,猜测可能xor加密

这⾥通过xortool(https://github.com/hellman/xortool)对flag⽂件进⾏分析.

xortool.py是基于python的脚本,⽤于完成⼀些xor分析,包括:1.猜想key的长度;2.猜想key的值;3.解密⼀些经过xoe加密的⽂件.

下⾯查看flag的xor加密的密钥长度,可以看到占⽐最⼤的百分百就是密钥长度为13

xortool flag

xortool flag -l 13 -c 20参数解释:

其中-l就是指定密钥长度,-c表⽰出现频率最⾼的字符。字符出现的最⾼频率⼀般为20

尝试出了key:GoodLuckToYou(根据经验将试出来的),通过以下python脚本对原⽂件进⾏异或解密:import os

c = open(\"flag\key = \"GoodLuckToYou\"def xor(c,k):

keylen = len(k) res = \"\"

for pos,c in enumerate(c):

res +=chr(ord(c) ^ ord(k[pos % keylen])) return resprint xor(c,key)

运⾏python脚本得到⼀串字符串,其中字符串中就包含有flag内容最终 flag为:

wdflag{You Are Very Smart}

连环套娃压缩包破解之⾳频隐写题⽬名称:Miscellaneous-300题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/f932f55b83fa493ab024390071020088.zip题⽬writeup:

下载附件对其解压,得到⼀个压缩⽂件flag.zip,对其进⾏解压,提⽰需要输⼊密码,猜测需要对其压缩包进⾏密码爆破通过ziperello对压缩包进⾏爆破

发现爆破出来的密码是46783,密码正好是⾥⾯压缩包名称。

通过该密码对压缩包进⾏解压,可成功解密

解压完了,⼜出现了⼀个新的压缩包,解压压缩包,⼜提⽰需要输⼊密码接着,按照上⾯的爆破压缩包密码的⽅法进⾏爆破

结果发现密码就是压缩包内⽂件名。发现的规律是:解压⾥⾯⼜是个压缩包,解压⼀波,发现⼜是⼀个压缩包,后⼀个⽂件名的名字是前⼀个压缩包的解压密码。让我们编写⼀个sh 脚本,并调⽤fcrackzip命令递归地破解和提取zip⽂件:crack_zip.sh:

#!/usr/bin/env bashwhile [ -e *.zip ]; do files=*.zip; for file in $files; do

echo -n \"Cracking ${file}… \";

output=\"$(fcrackzip -u -l 1-6 -c '1' *.zip | tr -d '\\n')\";

password=\"${output/PASSWORD FOUND\\!\\!\\!\\!: pw == /}\"; if [ -z \"${password}\" ]; then echo \"Failed to find password\"; break 2;

fi;

echo \"Found password: \\`${password}\\`\"; unzip -q -P \"${password}\" \"$file\"; rm \"${file}\"; done;done;

执⾏sh脚本:bash crack_zip.sh

让它执⾏⼀段时间后,最后会得到⼀个12475.zip,发现纯数字密码爆破失败,这个⼀个复杂的密码加密的压缩包通过fackzip的复杂密码对其进⾏爆破,发现爆破出来的密码为:boyzz./fcrackzip -u -c a1 -l 1-6 12475.zip

通过unzip对12475.zip进⾏解压,得到⼀个⾳频⽂件mess.wavunzip -q -P b0yzz 12475.zip

通过⾳频隐写⼯具Audacity打开⾳频⽂件mess.wav,并选择频谱图,就可以查看到flag的内容。

最终 falg为:BallsRealBolls

题⽬名称:双⾊块题⽬附件:题⽬writeup:⽅法⼀:

下载附件,对其解压,得到⼀个out.gif的动态图⽚,且只存在绿⾊和紫⾊两个颜⾊,分布不均匀

通过binwalk命令查看图⽚隐藏的⽂件,可以看到隐藏了png图⽚binwalk out.gif

通过foremost命令对out.gif进⾏分离,可到⼀个00001436.png图⽚foremost out.gif

查看分离的图⽚,发现图⽚的内容为key:ctfer2333,猜测和flag有关,且分析这张图⽚⽆异常。通过GifSplitter将out.gif⽂件进⾏分帧处理

得到576张图⽚,所有图⽚中只有紫⾊和绿⾊两种颜⾊,应该对应的是1和0或者0和1,可转换成01⼆进制数据按照紫⾊1,绿⾊0的规则按照先后顺序排列出了以下数据:

0110111100111000010001000110110001111000010010110010101101001000001110000111011101110011011010010101100001100101001011110100010101010010010001100111000001000001010011010110000101000010010100000110100101

每⼋个⼀组转换成ascii字符。那么通过在线⼯具⼆进制转asciii,可得到ascii为:o8DlxK+H8wsiXe/ERFpAMaBPiIcj1sHyGOMmQDkK+uXsVZgre5DSXw==hhhhhhhhhhhhhhhh

按照紫⾊0,绿⾊1的规则排列出以下数据:

1001000011000111101110111001001110000111101101001101010010110111110001111000100010001100100101101010011110011010110100001011101010101101101110011000111110111110101100101001111010111101101011111001011010同理,按照上⾯⽅⾯,得到⼀些乱码字符,显然不是我们想要的加密字符串。得到的加密字符串:

o8DlxK+H8wsiXe/ERFpAMaBPiIcj1sHyGOMmQDkK+uXsVZgre5DSXw==hhhhhhhhhhhhhhhh

这应该是des加密或者base64,但是有提⽰key,所以应该是des加密,key是上⾯的图⽚内容ctfer2333,正常来说des结尾是=,最后⼀串h去掉就好了。

⽅法⼆:

gif轮播之后发现是⼀个24*24的像素点,每个像素为1010,每个点颜⾊为00ff00或是ff00ff 先把gif分离成单帧,那么可以通过 python脚本对其进⾏分割成不同的单帧图像。# ! /usr/bin/env python2# -*- coding: utf-8 -*-import os

from PIL import Image

def main(gif_file):

png_dir = 'C:\\\\Users\\\\backlion\\\\Desktop\\\\flag\\\\' img = Image.open(gif_file) while True:

current = img.tell()

img.save(png_dir + str(current + 1) + '.png') img.seek(current + 1)if __name__ == '__main__': gif_file = 'out.gif'main(gif_file)

然后读取每个png中的对应点的信息,并按照8bit转换为ascii

#! /usr/bin/env python2# -*- coding: utf-8 -*-import os

from PIL import Image

def main():

png_dir = 'C:\\\\Users\\\\backlion\\\\Desktop\\\\flag\\\\' ret = \"\"

for i in range(0, 24): line = \"\"

for j in range(0, 24):

file_name = \"C:\\\\Users\\\\backlion\\\\Desktop\\\\flag\\\\\" + str(i * 24 + j + 1) + \".png\" x = j * 10 + 5 y = i * 10 + 5

img = Image.open(file_name) img = img.convert(\"RGB\") img_array = img.load()

r, g, b = p = img_array[x, y] if g == 255: line += \"0\"

if r == 255 and b == 255: line += \"1\" if len(line) == 8:

ret += chr(int(line, 2)) line = \"\" print ret

if __name__ == '__main__': main()

最终flag为:

flag{2ce3b416457d4380dc9a6149858f71db}

题⽬名称:Py-Py-Py题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/58cadd8d8269455ebc94690fd777c34a.pyc题⽬writeup:

下载附件,得到⼀个pyc⽂件,通过uncompyle6命令将其反编译成python脚本uncompyle6 flag.pyc>flag.py

其中flag.py是⼀个rc4的加密解密python脚本:

# uncompyle6 version 3.7.4# Python bytecode 3.6 (3379)

# Decompiled from: Python 2.7.18 (default, Feb 27 2021, 08:40:44) # [GCC 10.2.1 20210110]

# Warning: this version of Python has problems handling the Python 3 \"byte\" type in constants properly.

# Embedded file name: pystego.py# Compiled at: 2017-08-01 00:44:47# Size of source mod 2**32: 1961 bytesimport sys, os, hashlib, time, base64

fllag = '9474yeUMWODKruX7OFzD9oekO28+EqYCZHrUjWNm92NSU+eYXOPsRPEFrNMs7J+4qautoqOrvq28pLU='

def crypto(string, op='encode', public_key='ddd', expirytime=0): ckey_lenth = 4

public_key = public_key and public_key or ''

key = hashlib.md5(public_key).hexdigest() ##将public_key以MD5⽅式加密,再转化成⼗六进制 keya = hashlib.md5(key[0:16]).hexdigest() keyb = hashlib.md5(key[16:32]).hexdigest()

keyc = ckey_lenth and (op == 'decode' and string[0:ckey_lenth] or hashlib.md5(str(time.time())).hexdigest()[32 - ckey_lenth:32]) or '' cryptkey = keya + hashlib.md5(keya + keyc).hexdigest() key_lenth = len(cryptkey)

string = op == 'decode' and base64.b64decode(string[4:]) or '0000000000' + hashlib.md5(string + keyb).hexdigest()[0:16] + string string_lenth = len(string) result = ''

box = list(range(256)) randkey = []

for i in xrange(255):

randkey.append(ord(cryptkey[(i % key_lenth)])) for i in xrange(255): j = 0

j = (j + box[i] + randkey[i]) % 256 tmp = box[i] box[i] = box[j] box[j] = tmp

for i in xrange(string_lenth): a = j = 0

a = (a + 1) % 256 j = (j + box[a]) % 256 tmp = box[a] box[a] = box[j] box[j] = tmp

result += chr(ord(string[i]) ^ box[((box[a] + box[j]) % 256)])

if op == 'decode':

if result[0:10] == '0000000000' or int(result[0:10]) - int(time.time()) > 0: if result[10:26] == hashlib.md5(result[26:] + keyb).hexdigest()[0:16]: return result[26:] return else:

return keyc + base64.b64encode(result)

if __name__ == '__main__': while True:

flag = raw_input('Please input your flag:') if fllag == crypto(fllag, 'decode'): print('Success')

print crypto(fllag, 'decode') break else:

continue

# okay decompiling flag.pyc

根据脚本分析,在原flag.py脚本基础上,直接把下⾯这段代码删除了,再添加⼀句 print crypto(fllag,'decode')就可以修改成解密脚本。if __name__ == '__main__': while True:

flag = raw_input('Please input your flag:') if flag == crypto(fllag, 'decode'): print('Success') break else:

continue

最终修改后的解密脚本为:

# uncompyle6 version 3.7.4# Python bytecode 3.6 (3379)

# Decompiled from: Python 2.7.18 (default, Feb 27 2021, 08:40:44) # [GCC 10.2.1 20210110]

# Warning: this version of Python has problems handling the Python 3 \"byte\" type in constants properly.

# Embedded file name: pystego.py# Compiled at: 2017-08-01 00:44:47# Size of source mod 2**32: 1961 bytesimport sys, os, hashlib, time, base64

fllag = '9474yeUMWODKruX7OFzD9oekO28+EqYCZHrUjWNm92NSU+eYXOPsRPEFrNMs7J+4qautoqOrvq28pLU='

def crypto(string, op='encode', public_key='ddd', expirytime=0): ckey_lenth = 4

public_key = public_key and public_key or '' key = hashlib.md5(public_key).hexdigest() keya = hashlib.md5(key[0:16]).hexdigest() keyb = hashlib.md5(key[16:32]).hexdigest()

keyc = ckey_lenth and (op == 'decode' and string[0:ckey_lenth] or hashlib.md5(str(time.time())).hexdigest()[32 - ckey_lenth:32]) or '' cryptkey = keya + hashlib.md5(keya + keyc).hexdigest() key_lenth = len(cryptkey)

string = op == 'decode' and base64.b64decode(string[4:]) or '0000000000' + hashlib.md5(string + keyb).hexdigest()[0:16] + string string_lenth = len(string) result = ''

box = list(range(256)) randkey = []

for i in xrange(255):

randkey.append(ord(cryptkey[(i % key_lenth)])) for i in xrange(255): j = 0

j = (j + box[i] + randkey[i]) % 256 tmp = box[i] box[i] = box[j] box[j] = tmp

for i in xrange(string_lenth): a = j = 0

a = (a + 1) % 256 j = (j + box[a]) % 256 tmp = box[a] box[a] = box[j] box[j] = tmp

result += chr(ord(string[i]) ^ box[((box[a] + box[j]) % 256)])

if op == 'decode':

if result[0:10] == '0000000000' or int(result[0:10]) - int(time.time()) > 0: if result[10:26] == hashlib.md5(result[26:] + keyb).hexdigest()[0:16]: return result[26:] return else:

return keyc + base64.b64encode(result)print crypto(fllag,'decode')

执⾏脚本,得到 flag 的值:The challenge is Steganography, 直接提交不对,加flag{}提交仍然也不对。

根据脚本解密得到The challenge is Steganography,是pyc的隐写,百度到在pyc中隐藏payload的⼯具为stegosaurus。通过 stegosaurus脚本查看隐藏在flag.pyc中的字符串./stegosaurus -x flag.pyc 最终 flag:

Flag{HiD3_Pal0ad_1n_Python}

题⽬名称:warmup题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/b7b7e994d7fb4316b03f446295cfd03b.zip题⽬writeup:

下载附件,对其进⾏解压,得到⼀个png图⽚以及⼀个压缩包⽂件

对压缩包进⾏解压提⽰需要输⼊密码,这⾥猜测可能需要爆破压缩包密码或者明⽂攻击、

打开压缩包预览,发现其中包含的图⽚⽂件和附件解压得到的图⽚⽂件名称是⼀致的。猜测需要⽤到明⽂攻击。这⾥⾸先对open_forum.png图⽚通过winrar对其压缩成⽂件open_forum.zip

同时查看到open_forum.zip⽂件的CRC232值和需要密码解密的压缩包⽂件warmup.zip的CRC232的值⼀样。那么warmup.zip压缩包解压存在明⽂攻击。通过ARCHRP攻击对warmup.zip进⾏明⽂攻击

这⾥可能完全解密成功需要⼀晚上,实际需要不了那么多少,在10分钟左右就可以终⽌。终⽌压缩包爆破后,可确定直接保存为warmup_decrypted.zip⽂件。

对warmup_decrypted.zip⽂件进⾏解压缩,成功解压出三张图⽚,其中fuli.png和fuli2.png图⽚显⽰是⼀样的。通过stegsolve对其fuli.png图⽚进⾏通道查看,并没有发现啥。再次通过stegsolve对其fuli2.png进⾏通道查看,发现出现⼀些根据以上判断,2张图⽚存在盲⽔印。

通过bwm.py脚本可以将2张图⽚合成⼀张图⽚flag.pngpython bwm.py decode pen.png apple.png flag.png打卡flag.png图⽚,可以看到flag内容最终flag为:

flag{bWm_Are_W0nderfu1}

题⽬名称:传感器1题⽬描述:

已知ID为0x8893CA58的温度传感器的未解码报⽂为:3EAAAAA56A69AA55A95995A569AA95565556 此时有另⼀个相同型号的传感器,其未解码报⽂为:3EAAAAA56A69AA556A965A5999596AA95656 请解出其ID,提交格式为flag{xxx}题⽬writeup:基础知识:

曼彻斯特编码(Manchester Encoding),也叫做相位编码( Phase Encode,简写PE),是⼀个同步时钟编码技术,被物理层使⽤来编码⼀个同步位流的时钟和数据。它在以太⽹媒介系统中的应⽤属于数据通信中的两种位同步⽅法⾥的⾃同步法(另⼀种是外同步法),即接收⽅利⽤包含有同步信号的特殊编码从信号⾃⾝提取同步信号来锁定⾃⼰的时钟脉冲频率,达到同步⽬的。

IEEE 802.4(令牌总线)和低速版的IEEE 802.3(以太⽹)中规定, 按照这样的说法, 01电平跳变表⽰1, 10的电平跳变表⽰0。⽅法⼀:

先把16进制3EAAAAA56A69AA55A95995A569AA95565556都转成2进制,得到:

1111101010101010101010101001010110101001101001101010100101010110101001010110011001010110100101011010011010101010010101010101100101010101010110

⼜得知曼切斯特是从低到⾼跳变表⽰“1”,从⾼到低跳变表⽰“0”,即01->1,10->0。可以看到⼆进制除了前4位,后⾯都是10,01,差分曼切斯特有跳变为\"0\",⽆跳变为\"1

那么实际上转换成的⼆进制为(去掉前⾯最前⾯1111):

101010101010101010101001010110101001101001101010100101010110101001010110011001010110100101011010011010101010010101010101100101010101010110

因此将编码进⾏曼切斯特解码:

00000000001001001101100010001001001111001010010110000100000110000001转成16进制得到:24d8893ca584181

⼜得知第⼀个ID为0x8893CA58的温度传感器就在第⼀个曼切斯特解码24d8893ca584181中,是第4位到11位为:8893ca58,转换成⼤写为8893CA58根据上⾯原理,可将3EAAAAA56A69AA556A965A5999596AA95656,转换成曼切斯特解码为24d8845abf34119,取第4位到11位,最终为:8845ABF3那么flag为:flag{8845ABF3}⽅法⼆:

python脚本(这⾥需要将3E前缀去掉,因为转换成⼆进制为1111,不存在曼切斯特解码特性)

char = \"AAAAA56A69AA556A965A5999596AA95656\"

result = char.replace(\"5\num = len(result)flag = \"\"

flag_final = \"\"

result = \"0\"+resultfor i in range(1,num,2):

if result[i:i+2][0] !=result[i-1]: flag += \"0\"

if result[i:i+2][0] ==result[i-1]: flag += \"1\"

print hex(int(flag,2)).upper()[2:]

或者:

id1 = 0x8893CA58

msg1 = 0x3EAAAAA56A69AA55A95995A569AA95565556

msg2 = 0x3EAAAAA56A69AA556A965A5999596AA95656def calc(msg): id=''

s = bin(msg)[6:]

for i in range(2, len(s), 2): if s[i-2:i] == s[i:i+2]: id += '0' else:

id += '1'

return hex(int(id, 2)).upper()print(calc(msg1))print(calc(msg2))

可以看到id是取结果的4到11位,ID为:8845ABF3

最终flag为:

flag{8845ABF3}

题⽬名称:halo题⽬描述:

答案的格式为flag{XXXX}题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/56afc3a6c8d04cde8b1354b77fe91731.zip题⽬writeup:

下载附件,对其进⾏解压得到⼀个txt⽂件,⽂件内容看来像base64加密

通过在线base64解密⽹站对其进⾏base64解密,得到特殊的字符串:igq4;441R;1ikR51ibOOp,提交flag显⽰不对

尝试多种后情况后,该加密字符串为base64和异或的加密,通过以下脚本对其进⾏解密:import string

from base64 import *

b=b64decode(\"aWdxNDs1NDFSOzFpa1I1MWliT08w\")data=list(b)

for k in range(0,200): key=\"\"

for i in range(len(data)): key+=chr(ord(data[i])^k) print (key)

得到的结果,发现唯⼀⼀个没有特殊字符为:jdr78672Q82jhQ62jaLL3

最终flag为:

flag{jdr78672Q82jhQ62jaLL3}题⽬名称:picture3题⽬描述:

flag提交形式为flag{XXXX}

题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/7128eb78f49242d39b71e0496c3b52ab.jpg题⽬writeup:

下载附件,得到⼀张图⽚,通过binwalk对其进⾏解压。得到149EC.zip 和stego.txt⽂件binwalk -e flag.jpg

查看压缩包149EC. zip⽂件⾥⾯包含⼀个stego.txt⽂件且CRC32值为0CF2D018,同时对其解压,提⽰需要输⼊密码,该⽂件名和图⽚解压出来的stego.txt是相同的。需要解压该压缩包⽂件,猜测是、、

通过winrar对stego.txt⽂件进⾏压缩成stego.txt,查看CRC32值和149EC. zip压缩包中值相同这⾥通过ARCHPR对压缩包149EC. zip进⾏明⽂攻击,但是明⽂攻击并不能恢复

通过winrar的⾃带修复功能对149EC. zip进⾏修复

修复后的⽂件保存为rebuilt.149EC.zip,对其进⾏解压,发现不需要输⼊密码,直接解压得到⼀个stego.txt⽂件打开⽂件发现是很多⾏base64加密字符串b2Q5dU==aDk5Ni==ZG8wOW==ZzYxYh==ZjU4NT==aXBjNF==Q3dTM2==d1Y5c1==dFA3WV==ZDNQUP==ejhBMT==dUowaW==OVQ2ZD==aUM5ZU==NnFFek==ZGc0T/==NGpWNE==NVZpUW==ejZDTm==a1VEN5==azNMUX==TXlhNW==bjZwWm==Q2Q0b1==

猜测可能是base64隐写:

依次读取每⾏,从中提取出隐写位。

如果最后没有‘=’,说明没有隐写位,跳过。

如果最后是⼀个‘=’,说明有两位隐写位,将倒数第⼆个字符转化为对应的⼆进制索引,然后取后两位。如果最后是两个‘=’,说明有四位隐写位,将倒数第三个字符转化为对应的⼆进制索引,然后取后四位。将每⾏提取出的隐写位依次连接起来,每8位为⼀组转换为ASCII字符,最后不⾜8位的丢弃。通过脚本跑出隐写,获得flag:

def get_base64_diff_value(s1, s2):

base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' res = 0

for i in xrange(len(s1)):

if s1[i] != s2[i]:

return abs(base64chars.index(s1[i]) - base64chars.index(s2[i])) return res

def solve_stego():

with open('stego.txt', 'rb') as f: file_lines = f.readlines()

bin_str = ''

for line in file_lines:

steg_line = line.replace('\\n', '')

norm_line = line.replace('\\n', '').decode('base64').encode('base64').replace('\\n', '') diff = get_base64_diff_value(steg_line, norm_line) pads_num = steg_line.count('=') if diff:

bin_str += bin(diff)[2:].zfill(pads_num * 2) else:

bin_str += '0' * pads_num * 2 res_str = ''

for i in xrange(0, len(bin_str), 8):

res_str += chr(int(bin_str[i:i + 8], 2)) print res_strsolve_stego()

根据falg提交格式,最终flag为:

flag{Ba5e_64OFive}

题⽬名称:7-2题⽬描述:

提交格式为wdflag{......}题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/118956c97c7c4a3e9b1508c1f5ea44be.zip题⽬writeup:

下载附件,对其进⾏解压,得到很多⽂件,⽂件的名称都是base64加密字符串同时,打开其中任意⽂件,发现都是⼀串⼗进制加密字符串通过脚本对解压的所有⽂件夹的⽂件名进⾏将base64解密# coding=utf-8import os

import base64

for name in os.listdir(\"C:\\\\Users\\\\backlion\\\\Desktop\\\\flag\\\\problem\\\\\"): print name

# 由于⽂件名不是4的倍数,需要在后⾯补‘=’ missing_padding = 4 - len(name) % 4 if missing_padding:

name += '=' * missing_padding

print str(base64.b64decode(name.encode()))

执⾏脚本得到只有⽂件名YWluaWRleGluZ3podWFuZw base64解密出来的字符串ainidexingzhuang是正常显⽰⽆乱码。

打开YWluaWRleGluZ3podWFuZw⽂件,发现⼀串数字,其中包括了{和}中的数字。那么很有可能这些数字解码后就是flag得到{和}中的数字为:82 42 82 52 63 21 42 22 73 21

该数字使⽤的是⼿机9键加密,第⼀个数字代表9键键盘下的数字,第⼆个数字代表该数字下的第⼏个字母。

得到9键盘加密的字符为:uhukoahbra

通过凯撒解密得到⼀个有意义的字符ylyoselfve就是ctf的内容。根据flag提交格式,最终flag为:wdflag{ylyoselfve}

题⽬名称:4433题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/3f8b0f935fa74f3c9cea382bf3687569.rar题⽬writeup:

下载附件,对其解压得到⼀张图⽚,通过stegsolve图⽚隐写⼯具打开,查看通道,在橙⾊通道中出现了⼀张⼆维码图⽚。

通过QR Reach⼆维码图⽚扫描⼯具识别出内容是⼀串摩尔斯字符。得到内容:...--.----...--..

想要解码但是不知道怎么分割,于是想到题⽬名称 4433,表⽰ 4 个 4 个 3 个 3 个分隔开。那么摩尔斯密码加密密⽂为:...-/-.--/--./..-/-..

通过在线⼯具⼯具对其解密得到:VYGUDhttps://www.bejson.com/enc/morse/将VYGUD进⾏flag提交,发现不对

由搜索引擎搜索摩斯密码可知摩斯密码常⽤的缩写中:VY代表VERY,GUD代表GOOD,那么flag为内容为:VERYGOOD

可参考:https://zh.wikipedia.org/wiki/%E6%91%A9%E5%B0%94%E6%96%AF%E7%94%B5%E7%A0%81#%E5%B8%B8%E7%94%A8%E7%BC%A9%E5%86%99最终flag为:

flag{VERYGOOD}

题⽬名称:Run题⽬描述:

Run away! nc **.**.**.** XXXX题⽬场景:

111.200.241.244:64579题⽬writeup:

nc连上发现是⼀个python沙盒逃逸,⼀些能引发命令执⾏的python库全部被禁⽤了。

最后在⽹上发现这么⼀个⽂章

通过().class.bases[0].subclasses()获取当前加载的类发现func_globals被过滤了,我们使⽤__getattribute__绕过最终payload:

w = ().__class__.__bases__[0].__subclasses__()

o = w[59].__enter__.__func__.__getattribute__('__global' + 's__')['s'+'ys'].modules['o'+'s']s = o.__getattribute__('sy' + 'stem')s('/bin/sh')

执⾏payload得到当前sh脚本运⾏权限

通过cat命令查看⽂件5c72a1d444cf3121a5d25f2db4147ebb,得到falg最终flag:

flag{eee93c33d97aa55f785a7d10ba4ae3ce}

题⽬名称:流量分析题⽬描述:sql注⼊题⽬附件:

https://adworld.xctf.org.cn/media/task/attachments/4d7c14206a5c4b74a0af595992bbf439.pcapng题⽬writeup:

下载附件,得到⼀个pcapng流量包⽂件,通过wrireshark打开该⽂件,根据题⽬描述SQL注⼊,那么过滤HTTP协议,对其进⾏分析

看到很多注⼊语句,sql注⼊语句都是字符32开始的,第⼀波语句结束字符是102,恰好对应的ascii为f第⼆波语句结束字符是108,对应的ascii为l

第三波语句结束字符是97,对应的ascii为a第四波语句结束字符是103,对应的ascii为g第六波语句结束字符是123,对应的ascii为{

以此类推得到flag: flag{c2bbf9cecdaf656cf524d014c5bf046c}也可以通过python脚本获取

import reimport os

def getflag(contents):

req_reg = re.compile(r'0,1\\),(\\d+),1\\)\\)=(\\d+)%23') results = req_reg.findall(contents) flag_map = {}

for result in results:

if result[0] in flag_map:

if int(result[1]) > flag_map[result[0]]: flag_map[result[0]] = int(result[1]) else:

flag_map[result[0]] = int(result[1]) flag = \"\"

for i in range(1,39):

flag += chr(flag_map[str(i)]) print(flag)

if __name__ == \"__main__\":

basedir = os.path.dirname(__file__) filename = \"misc.pcapng\"

file_path = os.path.join(basedir, filename) print(filename)

with open(file_path, 'rb') as f: getflag(f.read())

最终得到falg:

flag{c2bbf9cecdaf656cf524d014c5bf046c}

题⽬名称:传感器2题⽬描述:

已知ID为0x8893CA58的温度传感器未解码报⽂为:3EAAAAA56A69AA55A95995A569AA95565556 为伪造该类型传感器的报⽂ID(其他报⽂内容不变),请给出ID为0xDEADBEEF的传感器1的报⽂校验位(解码后hex),以及ID为0xBAADA555的传感器2的报⽂校验位(解码后hex),并组合作为flag提交。例如,若传感器1的校验位为0x123456,传感器2的校验位为0xABCDEF,则flag为flag{123456ABCDEF}。题⽬writeup:⽅法⼀:

先把16进制3EAAAAA56A69AA55A95995A569AA95565556都转成2进制,得到:

1111101010101010101010101001010110101001101001101010100101010110101001010110011001010110100101011010011010101010010101010101100101010101010110⼜得知曼切斯特是从低到⾼跳变表⽰“1”,从⾼到低跳变表⽰“0”,即01->1,10->0。可以看到⼆进制除了前4位,后⾯都是10,01,差分曼切斯特有跳变为\"0\",⽆跳变为\"1那么实际上转换成的⼆进制为(去掉前⾯最前⾯1111):

101010101010101010101001010110101001101001101010100101010110101001010110011001010110100101011010011010101010010101010101100101010101010110因此将编码进⾏曼切斯特解码:

00000000001001001101100010001001001111001010010110000100000110000001转成16进制得到:24d8893ca584181

⼜得知第⼀个ID为0x8893CA58的温度传感器就在第⼀个曼切斯特解码24d8893ca584181中,是第4位到11位为:8893ca58,ID转换成⼤写为:8893CA58根据上⾯原理,可将3EAAAAA56A69AA556A965A5999596AA95656,转换成曼切斯特解码为24d8845abf34119,取第4位到11位,ID转换成⼤写为:8845ABF3或者

id1 = 0x8893CA58

msg1 = 0x3EAAAAA56A69AA55A95995A569AA95565556msg2 = 0x3EAAAAA56A69AA556A965A5999596AA95656def calc(msg): id=''

s = bin(msg)[6:]

for i in range(2, len(s), 2): if s[i-2:i] == s[i:i+2]: id += '0' else:

id += '1'

return hex(int(id, 2)).upper()print(calc(msg1))print(calc(msg2))

根据计算机⽹络报⽂⾸部的⼀些学习,这⾥我进⾏了类⽐,可能校验位应该是最后⼏位,依次尝试过都⽆果,但想到,除了最后2位不同,中间ID不同,其他均相同,可见校验位就是最后2位,那么校验位的计算应该是⽤CRC进⾏计算,⽽前⾯的位数后来想到可能缺位了,故⼜往前算了⼀位:

得到:024D 8893CA58 41 81和024D 8845ABF3 41 19对024D 8893CA58 41和024D 8845ABF3 41进⾏CRC8运算

可以得到81和19,与猜想⼀致下⾯就可以⽤这个⽅法解出flag带⼊ID:DEADBEEF和BAADA555得到:024D DEADBEEF 41

024D BAADA555 41

计算CRC8,分别得到:B5和15⽅法⼆:

也可以通过脚本获取:#!/usr/bin/python

def crc(x,y): while(x>y):

l = len(bin(x)) - len(bin(y)) t = int(bin(y)[2:]+'0'*l,2) x ^= t return xm = 0

for i in range(0x200): if i < 100: continue

if crc(0x24d8893ca584100,i) == 0x81 and crc(0x24d8845abf34100,i) == 0x19: m = i print i break

print hex(crc(0x00024ddeadbeef4100,m))print hex(crc(0x00024dbaada5554100,m))

最终得到flag:flag{B515}

因篇幅问题不能全部显示,请点此查看更多更全内容

Top