攻防世界misc部分
[攻防世界]1-misc
解题

根据提示“生日”,猜测8位数暴力破解,大概试一下20000000开始,不然一个小时太久了

得到口令20001228

又是压缩包,注意CRC,与上图2.zip中相同,猜测明文破解
[攻防世界]BotW-
题目
MASTER USING IT AND YOU CAN HAVE THIS.
分析
图片隐写
解题

某某装备吧,逐日之弓
图片隐写,分离一下
果然有东西

回到题目MASTER USING IT AND YOU CAN HAVE THIS.
搜一下

点开“游戏家的浪漫”,还真有

flag{canzeldagetduplexbow}
[攻防世界]CatFlag
题目描述:Just cat flag or type flag
解题
下载得到未知明文件

没有发现什么,回去看一眼题目
原来linux中有cat与tpye两个命令
那就直接使用一下

知识点:linux读文件口令
[攻防世界]challenge_how_many_Vigenère

分析
下载得到一堆字符串,分析题目,维吉尼亚
Vigenere算法加密和解密原理及其实现_vigenere密码算法-CSDN博客
没有提供key,这里有个爆破
先就跟着题目要求一步一步来
解题

进入网址爆破

得到key
ohihzkssefkmqxqbkihybnynvndzkdlqvhwhgywaftmeteecqprzjczvnmhnzwyasmlwbwvaqitejbfofycejjlcbpk
result
aliceleavestheteapartyandentersthegardenwhereshecomesuponthreelivingplayingcardspaintingthewhiterosesonarosetreeredbecausethequeenofheartshateswhiterosesaprocessionofmorecardskingsandqueensandeventhewhiterabbitentersthegardenalicethenmeetsthekingandqueenthequeenafiguredifficulttopleaseintroduceshertrademarkphraseoffwithhisheadwhichsheuttersattheslightestdissatisfactionwithasubjectaliceisinvitedorsomemightsayorderedtoplayagameofcroquetwiththequeenandtherestofhersubjectsbutthegamequicklydescendsintochaosliveflamingosareusedasmalletsandhedgehogsasballsandaliceonceagainmeetsthecheshirecatthequeenofheartsthenordersthecattobebeheadedonlytohaveherexecutionercomplainthatthisisimpossiblesincetheheadisallthatcanbeseenofhimbecausethecatbelongstotheduchessthequeenispromptedtoreleasetheduchessfromprisontoresolvethematter
得到作品《爱丽丝梦游仙境》Alice's Adventures in Wonderland
再根据题目意思加密作品名字

得到flag
知识点:维吉尼亚爆破
[攻防世界]check
分析

图片隐写,看看属性,考虑宽高,文头文尾,分离,LSB。。。。。。
在LSB中发现线索
解题

这是一段HTML解码HTML编码解码
在notepad中将其提取出来


得到flag{h0w_4bouT_enc0de_4nd_pnG}
看到这么一段

于是改后缀为html

知识点:图片隐写,LSB,html编码
[攻防世界]Disk
分析
下载得到vmdk,凡事放入010
解题

flag is not here 此地无银三百两
在下面获得4组数,二进制
0110011001101100011000010110011101
1110110011010001000100010100110101
1111001100010110111001011111010001
0000110001011100110110101101111101
2进制到ASCII字符串在线转换工具 - Coding.Tools

得到flag{4DS_1n_D1sk}
[攻防世界]Just-No-One
解题
下载得到exe文件

一路next,需要密码

接下来就离谱了
放入010,ida无果
看一眼wp

YOU MAY SUBMIT THIS TO GET TEN POINTS: ILOVEREADINGEULAS.
即答案(没有flag{}):
ILOVEREADINGEULAS
知识点:阅读安装协议
[攻防世界]m0_01
分析
下载得到一个流量包,usb流量知识点

解题
在winshark中提取USB指定的4个字节
用tshark提取流量
tshark -r 12.pcapng -T fields -e usb.capdata > usbdata.txt
如果提取出来的数据有空行可以将命令改为如下形式
tshark -r 12.pcapng -T fields -e usb.capdata | sed '/^\s*$/d' > usbdata.txt
或者工具去空行符

在Wireshark中得到该txt文件

然后运行这个脚本???
第一次遇到这种题,有些懵逼
f=open('usbdata.txt','r')
fi=open('out.txt','w')
while 1:
a=f.readline().strip()
if a:
if len(a)==16: # 鼠标流量的话len改为8
out=''
for i in range(0,len(a),2):
if i+2 != len(a):
out+=a[i]+a[i+1]+":"
else:
out+=a[i]+a[i+1]
fi.write(out)
fi.write('\n')
else:
break
fi.close()
normalKeys = {
"04":"a", "05":"b", "06":"c", "07":"d", "08":"e",
"09":"f", "0a":"g", "0b":"h", "0c":"i", "0d":"j",
"0e":"k", "0f":"l", "10":"m", "11":"n", "12":"o",
"13":"p", "14":"q", "15":"r", "16":"s", "17":"t",
"18":"u", "19":"v", "1a":"w", "1b":"x", "1c":"y",
"1d":"z","1e":"1", "1f":"2", "20":"3", "21":"4",
"22":"5", "23":"6","24":"7","25":"8","26":"9",
"27":"0","28":"<RET>","29":"<ESC>","2a":"<DEL>", "2b":"\t",
"2c":"<SPACE>","2d":"-","2e":"=","2f":"[","30":"]","31":"\\",
"32":"<NON>","33":";","34":"'","35":"<GA>","36":",","37":".",
"38":"/","39":"<CAP>","3a":"<F1>","3b":"<F2>", "3c":"<F3>","3d":"<F4>",
"3e":"<F5>","3f":"<F6>","40":"<F7>","41":"<F8>","42":"<F9>","43":"<F10>",
"44":"<F11>","45":"<F12>"}
shiftKeys = {
"04":"A", "05":"B", "06":"C", "07":"D", "08":"E",
"09":"F", "0a":"G", "0b":"H", "0c":"I", "0d":"J",
"0e":"K", "0f":"L", "10":"M", "11":"N", "12":"O",
"13":"P", "14":"Q", "15":"R", "16":"S", "17":"T",
"18":"U", "19":"V", "1a":"W", "1b":"X", "1c":"Y",
"1d":"Z","1e":"!", "1f":"@", "20":"#", "21":"$",
"22":"%", "23":"^","24":"&","25":"*","26":"(","27":")",
"28":"<RET>","29":"<ESC>","2a":"<DEL>", "2b":"\t","2c":"<SPACE>",
"2d":"_","2e":"+","2f":"{","30":"}","31":"|","32":"<NON>","33":"\"",
"34":":","35":"<GA>","36":"<","37":">","38":"?","39":"<CAP>","3a":"<F1>",
"3b":"<F2>", "3c":"<F3>","3d":"<F4>","3e":"<F5>","3f":"<F6>","40":"<F7>",
"41":"<F8>","42":"<F9>","43":"<F10>","44":"<F11>","45":"<F12>"}
output = []
keys = open('out.txt')
for line in keys:
try:
if line[0]!='0' or (line[1]!='0' and line[1]!='2') or line[3]!='0' or line[4]!='0' or line[9]!='0' or line[10]!='0' or line[12]!='0' or line[13]!='0' or line[15]!='0' or line[16]!='0' or line[18]!='0' or line[19]!='0' or line[21]!='0' or line[22]!='0' or line[6:8]=="00":
continue
if line[6:8] in normalKeys.keys():
output += [[normalKeys[line[6:8]]],[shiftKeys[line[6:8]]]][line[1]=='2']
else:
output += ['[unknown]']
except:
pass
keys.close()
flag=0
print("".join(output))
for i in range(len(output)):
try:
a=output.index('<DEL>')
del output[a]
del output[a-1]
except:
pass
for i in range(len(output)):
try:
if output[i]=="<CAP>":
flag+=1
output.pop(i)
if flag==2:
flag=0
if flag!=0:
output[i]=output[i].upper()
except:
pass
print ('output: ' + "".join(output))

wp说这是云影密码(由84210组成)

得出THISISFLAG
补充
云影密码
Crypto入门 (六)幂数加密(云影密码) - 缘初 - 博客园

感动!
一段大佬的解码脚本
a="8842101220480224404014224202480122"
s=a.split('0')
print(s)
l=[]
for i in s:
sum=0
for j in i:
sum+=eval(j)
l.append(chr(sum+64))
print(''.join(l))
USB流量
[攻防世界]message

解题
下载得到一大段字符串
7fffffffffffffffffffffffffffffffbffff0e10419dff07fdc3ffdaeab6deffdbfff6ffed7f7aef3febfffb7ff1bfbc675931e33c79fadfdebbae7aeddedb7dafef7dc37df7ef6dbed777beedbedb77b6de24718f260e0e71879fffffffffffffffffffffffffffffffffffffffffff07f87fc7f9ffffffffdbfbbfdbfeffffffffebfdffdfff7ffffff871c33e6fe7bffffffd5aefeed62dcffffffeadf9fb8bb0efffffff56df5db6dbf7ffffffaa0c21e19e3bffffe07ffffffffff9fffffffffffffffffffffffffffffffffffffff
刚开始还以为是按数量排序字符串,当然,失败了
直接解码也是失败告终
观察字符串,09,af,像是16进制,将其转换成二进制0与1分布有何特点或者二维码啥的

然而并无发现,看了wp,原来这个样子

运行代码
def print_fixed_width(text, width=73):
for i in range(0, len(text), width):
print(text[i:i+width])
# 示例字符串
input_text = "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111011111111111111111100001110000100000100000110011101111111110000011111111101110000111111111111011010111010101011011011011110111111111101101111111111111101101111111111101101011111110111101011101111001111111110101111111111111110110111111111110001101111111011110001100111010110010011000111100011001111000111100111111010110111111101111010111011101011100111101011101101110111101101101101111101101011111110111101111101110000110111110111110111111011110110110110111110110101110111011110111110111011011011111011011011011101111011011011011110001001000111000110001111001001100000111000001110011100011000011110011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000001111111100001111111110001111111100111111111111111111111111111111111110110111111101110111111110110111111111011111111111111111111111111111111111010111111110111111111110111111111111101111111111111111111111111111000011100011100001100111110011011111110011110111111111111111111111111111101010110101110111111101110110101100010110111001111111111111111111111111110101011011111100111111011100010111011000011101111111111111111111111111111010101101101111101011101101101101101101111110111111111111111111111111111101010100000110000100001111000011001111000111011111111111111111111100000011111111111111111111111111111111111111111111001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
# 调用函数
print_fixed_width(input_text)

用笔画一下得到flag
或者运行
import binascii
import numpy as np
from matplotlib import pyplot as plt
# 原始十六进制字符串
x = '7fffffffffffffffffffffffffffffffbffff0e10419dff07fdc3ffdaeab6deffdbfff6ffed7f7aef3febfffb7ff1bfbc675931e33c79fadfdebbae7aeddedb7dafef7dc37df7ef6dbed777beedbedb77b6de24718f260e0e71879fffffffffffffffffffffffffffffffffffffffffff07f87fc7f9ffffffffdbfbbfdbfeffffffffebfdffdfff7ffffff871c33e6fe7bffffffd5aefeed62dcffffffeadf9fb8bb0efffffff56df5db6dbf7ffffffaa0c21e19e3bffffe07ffffffffff9fffffffffffffffffffffffffffffffffffffff'
# 将十六进制字符串转换为二进制,并去除前缀'0b'
x = np.array(list(bin(int(x, 16))[2:]), dtype=np.uint8)
# 定义图像的行数
n = 23
# 重塑数组并显示图像
plt.imshow(x.reshape(n, -1), cmap='gray') # 使用灰度颜色映射
plt.show() # 显示图像
直接可视化得到flag

[攻防世界]Miscellaneous-200
分析
下载得到txt,内容也比较奇特

搜一下,大致和RGB有关

解题

通过代码创建一幅图,将每一行数据当做像素值写入图片
from ast import literal_eval
from PIL import Image #导入Python图像库PIL(Python Imaging Library)中的Image模块,用于图像处理。
f = open('62f4ea780ecf4e6bbef5f40d674ec073.txt', 'r')
corl = [literal_eval(line) for line in f.readlines()] #读取文件的每一行,并使用literal_eval函数将每行的内容(假设是可评估的Python表达式,比如元组)转换成Python对象(在这个上下文中,可能是颜色值),并将这些对象存储在列表corl中。
f.close()
img = Image.new('RGB', (270, 270), '#ffffff')
k=0 #初始化一个计数器k,用于遍历corl列表
for i in range(246):
for j in range(246):
img.putpixel ([i , j], corl[k]) #在图像的第i行第j列的像素位置放置corl列表中索引为k的颜色值。
k=k+1 #每次放置一个像素后,k的值增加1,以便在下一次迭代中使用corl列表中的下一个颜色值。
# 输出图片
img.save("flag.png")
得到如下图

凑合看一下(离谱了 括号与字母间还有空格)
flag{ youc@n'tseeme }
[攻防世界]Misc文件类型
解题
下载得到一串字符,应该是16进制

进行解码

46ESAB_UEsDBBQAAAAIAAldCFXqOw7cKAAAACYAAAAIAAAAZmxhZy50eHRLy0lMrzZISk02SEwxTkk0MjQ0TjY3SDU1SEsxNTM0T7JINU+zrAUAUEsBAhQAFAAAAAgACV0IVeo7DtwoAAAAJgAAAAgAJAAAAAAAAAAgAAAAAAAAAGZsYWcudHh0CgAgAAAAAAABABgAGxEfk9iq2AEbER+T2KrYAQJF+4rYqtgBUEsFBgAAAAABAAEAWgAAAE4AAAAAAA
开头的base64倒序了
起初,我以为整个字符串倒序,结果解码失败
注意:去掉前面的base64_; 长度只有254,需要再添加两个==
# 实现字符串倒序
def reverse_string(s):
return s[::-1]
# 使用函数
input_string = "Hello, World!"
reversed_string = reverse_string(input_string)
print(reversed_string)
那就去掉base64_正序

下载txt文件

flag{0bec0ad3da2113c70e50fd5617b8e7f9}
知识点:对编码的熟悉
[攻防世界]Peekaboo
比较简单的题目,但是很离谱,我一定要把这个wp写下来

解题
下载得到一张图片

王者荣耀盛世长安,还有我的本命英雄奕星
图片隐写,当然是对图片一顿分析,无果
回到题目“最后一次使用的英雄”
没错,flag就是每个英雄试一遍,得到百里玄策
CatCTF{bailixuance}
[攻防世界]Pixel-Princess
解题
下载得到一个压缩包
一开始用winrar解压。得到一串jpg字符

修改文件头发现没有,以为就是这么一个文件
后面卡住时看一眼wp发现原来这就有一个图片,换成7Z之后能解压出来


分离一下这个,得到MarioCastle.jpg

得到一个密码:BaD_DR4G0N
没错,就是卡在了这里发现winrar解压出来的本应是一个图片文件
看了一下wp,原来这里还要分离

得到flag
[攻防世界]saleae
大部分题解在这里
https://arui-li.notion.site/b8cd06fe61f44bb4bce09e0f8d56530c?pvs=4

分析
下载得到一个logicdata文件

第一次见
回头看题目 saleae


下载saleae逻辑分析工具
这个题大致是这么使用的,些许懵逼……
1.open文件

2.选择SPI

3.修改参数,save

4.拖拉,得到flag

flag{12071397-19d1-48e6-be8c-784b89a95e07}
来自官方的解释:


看了依旧懵逼
求大佬给与解释
[攻防世界]steg没有py
分析
下载得到图片Do_you_like_misc.png

观察题目,使用工具stegpy
解题
指令中的密码就是文件名称(李大普)

以为那段就是flag,当然是错误的
看了wp,原来是仿射密码,涨知识了
CTF在线工具-在线仿射密码加密|在线仿射密码解密|仿射密码算法|Affine Cipher

根据a,b范围以及上图给的a与b的运算关系得出a,b

然后我一提交,诶,又错了
题目要求注意大小写,发现加密前大写位置,在解密后变成了小写,将解密后由大写变为小写的地方,再改回相应大写字母。

得到flag{4f71ne_c1ph3r_15_ffffunny!!}
知识点:新工具stegpy
[攻防世界]test.pyc
分析
下载得到一个pyc文件
解题
在kail在uncompyle6
uncompyle6 -o test.py test.pyc

得到
=cWbihGfyMzNllzZ0cjZzMWN5cTM4YjYygTOycmNycWNyYmM1Ujf
反转脚本
str = "=cWbihGfyMzNllzZ0cjZzMWN5cTM4YjYygTOycmNycWNyYmM1Ujf"
print(str[::-1])
反转得到base64
fjU1MmYyNWcyNmcyOTgyYjY4MTc5NWMzZjc0ZzllNzMyfGhibWc=
进行解码,得到
~552f25g26g2982b681795c3f74g9e732|hbmg
再次反转
gmbh|237e9g47f3c597186b2892g62g52f255~
凯撒

当我直接复制flag那一行,提交失败
发现只有字母变化,数字没变,将数字也往后移一位
不完全凯撒
所以我们抄一段脚本
c='gmbh|237e9g47f3c597186b2892g62g52f255~'
d=''
for i in range(0,len(c)):
k = chr(ord(c[i])-1)
d+=k
print(d)
flag{126d8f36e2b486075a1781f51f41e144}
知识点:反编译,凯撒,对字符的敏感
[攻防世界]Time_losing
这思路万万没想到……
题目
2033-05-18 11:33:20似乎是个好时间。
分析
下载压缩得到许多txt,内容为空

先看一下属性

发现与题目大致相同的内容


中间相差88
88是啥?????????
卡了

88→X
这个题目来源于XMAN,难道下一个文件操作下来代表M?
#Author:Luci4n
import os,time
flag = ""
origin_time = 2000000000
for i in range(0,47):
file = r'./{0}.txt'.format(i)
get_time = int(os.path.getmtime(file)) #获取最近修改时间
key = get_time - origin_time
flag += chr(key)
print(flag)
XMan{seems_to_be_related_to_the_special_guests}
[攻防世界]Usb-probing
分析
下载得到一个流量包

猜测USB流量分析
解题
按照USB流量题进行题解
tshark -r 1.pcap -T fields -e usb.capdata > usbdata.txt
然而,并无发现
binwalk一下,看下是否有其他文件

藏有png文件,尝试分离,分离失败
回到wireshark,过滤USB流量

发现png

将其复制进txt文件,在010editor导入该16进制保存为png格式
发现还是打不开,原来缺少png文件尾,加进去

重新导入并保存,得到图片

.......啥玩意?看了wp,原来要进浏览器查看

[攻防世界]Wire1
解题
下载得到一个流量包
打开wireshark
首先,协议分级

发现http占比大,过滤http
先搜索flag,看看有没有发现
http contains "flag"

导出http

按大小排序,102是f,猜测是flag,并且是几个flag重复排列在一起
咱不会脚本,直接一个一个输入

flag{w1reshARK_ez_1sntit}
对于后面提取数字一步,之前写过一道类似的可将其保存为excel表格进行提取,不过实验失败

[攻防世界]不确定,再看看
题目
做题做累了吧,给你准备了一道钢琴曲,要仔细听哦!我藏得很深。
hint1:信息隐藏一般要求载体需要有一定的冗余度,而base64编码刚好就有这个特点。
解题
下载得到音频文件
放入Audacity,并无收获


解锁新工具Deepsound
主要用于处理音频文件的加密。以将敏感数据隐藏在音频文件中,从而实现数据的保密和安全传输。

得到txt文件
解码

知识点:音频隐写,新工具Deepsound
[攻防世界]打野
解题
得到一张bmp文件

查看010,stegslove,暂时没啥发现
看了wp,学到一个新工具———zsteg
然后我一使用,出问题了
(but之前写另外一个题目没问题)
…………
时隔多日,我又回来了
如果zsteg出现栈报错“tack level too deep (SystemStackError)”,可以将命令改成“zsteg --msb 瞅啥.bmp”或“zsteg -o xY 1.bmp”,改变扫描顺序。 -o 是设置行列的读取顺序 --msb:most significant BIT comes first,最高有效位排在第一位

得出qwxf{you_say_chick_beautiful?}
[攻防世界]第四扩展FS
题目描述:
D公司正在调查一起内部数据泄露事件,锁定嫌疑人小明,取证人员从小明手机中获取了一张图片引起了怀疑。这是一道送分题,提示已经在题目里,日常违规审计中频次有时候非常重要。
分析
下载得到一张图片,比较大

考虑到文件分离
解题
分离后得到加密zip
回到题目“提示已经在题目里”

以为是啥线索,没想到就是密钥,打开zip

再次回到题目“频次”
运行脚本
text = ""
count = []
for i in range(256):
count.append([i, 0])
for ch in text:
count[ord(ch)][1] += 1
count.sort(key=lambda x: x[1], reverse=True)
for i in range(256):
if count[i][1] > 0:
print(chr(count[i][0]), end = "")
DCTF{ka1f4NgxIntAi}
然后答案错误??????
官方wp:DCTF{ka1f4NgxlntAi}
[攻防世界]很普通的Disco
分析
音频文件,查看是否有摩斯密码,二进制,频谱等
音频开头有一段空白,应该有问题
解题
超级放大,上1下0

110011011011001100001110011111110111010111011000010101110101010110011011101011101110110111011110011111101

其实最前面还有一个,太可恶了!
s = '110011011011001100001110011111110111010111011000010101110101010110011011101011101110110111011110011111101'
flag = ''
for i in range(0,len(s),7):
flag += chr(int('0'+s[i:i + 7],2))
print(flag)
得出flag
知识点:音频隐写,进制转换
[攻防世界]坚持60s
题目描述
菜狗发现最近菜猫不爱理他,反而迷上了菜鸡
我是菜狗
分析
下载得到一个jar文件
JAR 文件就是 Java Archive File,顾名思意,它的应bai用是与 Java 息息相关的,是 Java 的一du种文档格式。JAR 文件非常类似 ZIP 文件——zhi准确的说,它就是 ZIP 文件,所以叫它文件包。JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,这个文件是在生成 JAR 文件的时候自动创建的。
解题
放至010,发现这其实是个zip

改后缀,里面有3个文件夹,文件夹内有许多文件,一个一个看还是比较容易找到flag(就在前几个文件中)


直接提交失败,需要base64解码
得到flag{DajiDali_JinwanChiji}
上文提到,flag刚好在前面几个文件夹,如果在后面呢……
学到一个新工具id-gui

知识点:jar文件
[攻防世界]看雪看雪看雪
分析
得到一个rar文件,里面有一张jpg
南方孩子羡慕

按照图片隐写思路:
- 属性
- 010editor(隐藏文件分离,宽高)
- stegslove
- 等
解题
按照刚才思路,没有什么发现
回头看看题目“看雪看雪看雪”,好像有个东西叫雪隐写
后面看wp,其实属性里面有提及过,只是我没有注意到…….


所以压缩包内可能有其他我看不见的文件
于是乎





将后面这一大段复制进sublime

看吧,里面还是有东西的
将其全部复制下来进一个新的txt文件,用snow工具

得到flag
知识点:图片隐写,snow隐写
[攻防世界]碎纸机11
分析
下载得到一堆图片

打开看一眼,应该是一个二维码被“分尸”了
解题
碎片的排列应该有个顺序,010editor,属性暂时没有发现
可能是文件时间,大小
将图片按日期递增排序,随后放入网站

注意选择水平
得到二维码


[攻防世界]我们的秘密是绿色的
分析
下载得到一张图片,图片隐写

解题
常用的图片隐写思路好像没发现什么,网上搜索原来有个工具就叫oursecret
Our Secret可以隐藏文本,视频,音频,图像还有其他格式的文件,它创建的初衷是为了隐藏和发送敏感文件或消息。
[攻防世界]信号不好先挂了
分析
又是图片隐写

我也先挂了……
解题

save bin
保存后的zip还需要修复一下才能解压缩

……怎么里面又是这张图片

两张一样图片还可在stegslove合成图片
用BlindWaterMark这个工具一直报错(麻木)
直接打开puzzlesolve,得到图片

知识点:盲水印
信女愿一台不会报错的电脑
[攻防世界]再见李华
题目描述
李华的图片被弄脏了,你能帮忙看看弄脏的字符吗,要求不少于10000字,没有特殊字符
分析
得到一张图片

凡是去010里面看一眼
解题

在010里发现txt文件,foremost分离出来,得到压缩包,里面含有txt文件,需要密码
看一眼,也不是伪加密,使用爆破
掩码加密(离谱)
观察题目 不少于10000字
可能是?????LiHua 看了wp,题目提示错误,因该是????LiHua

得到密码 15CCLiHua
打开得到

[攻防世界]互相伤害!!!

解题
下载得到一个没有后缀的文件
去kail查看

将其改成流量包后缀,打开

发现http中很多jpg文件,将其导出

在其中一张图中发现二维码

扫码得到
U2FsdGVkX1+VpmdLwwhbyNU80MDlK+8t61sewce2qCVztitDMKpQ4fUl5nsAZOI7\nbE9uL8lW/KLfbs33aC1XXw==
看似base64,但解码得到一堆乱码

看来是其他,看了wp,原来是AES解密
密钥猜测为图上的CTF
得到
668b13e0b0fc0944daf4c223b9831e49
输入flag,失败
再去看看那些图片

发现一张与题目相同内容的图片,按照图片隐写思路
进行分离得到一个zip

里面有一个图片,但被加密了,用刚才的字符串做为密钥,得到一个二维码,解码

flag{97d1-0867-2dc1-8926-144c-bc8a-4d4a-3758}
[攻防世界]misc_xor

一个只是巩固题
题目信息:异或
解题
得到一串字符
cidb~0f<f==0f634014`5g734c0=g34ag=f`fx
txt中只有该字符,无其他隐写等
根据题目中的异或提醒解题【CTF】异或运算符的利用_ctf 异或-CSDN博客
0 xor 1 = 1
0 xor 0 = 0
1 xor 1 = 0
1 xor 0 = 1

大概过程:
先将字符转换成二进制,cidb即对应着flag,得出key
[26个字母的二进制代码 :](https://www.notion.so/26-15a8b1f47b6180d481c0fd87ffef8df7?pvs=21)
| c | 0 1 1 0 0 0 1 1 |
|---|---|
| key | 0 0 0 0 0 1 0 1 |
| f | 0 1 1 0 0 1 1 0 |
| i | 0 1 1 0 1 0 0 1 |
|---|---|
| key | 0 0 0 0 0 1 0 1 |
| l | 0 1 1 0 1 1 0 0 |
所有key=5(00000101)

flag{5c9c885c361541e0b261f58b61db8cec}
知识点:异或运算
官方wp直接这样,又让我发现了厨师的新功能

[攻防世界]北京地铁

也是一个比较令人“惊喜”的题目
解题
获得一张北京地铁图片

不愧是大城市
首先进行图片分析,发现类似于base64

根据题目提示的AES,但是缺少key
注意题目的“不要光记得隐写不看图片本身啊”
李大普

猜测key就是weigongcun
然后再根据提示

DDCTF{Q*2!x@B0}
[攻防世界][中等] QR1

解题
下载得到一张空白照片,根据平常的图片隐写并无什么发现

观察图片,放大居然还有点东西

放在画图工具中查看,是一张二维码

将图片大小改为533X533


flag{AHA_U_Kn0w_QR_c0d3_312468ed-ea59-4fe9-9cd2-b5e9d8b39498}
[攻防世界]你猜他是什么文件

解题
下载得到一个打不开的png

根据题目,将文件头改成png形式,失败

这意味着file命令无法确定misc.png文件的具体类型,它只能识别出这是一个数据文件。这可能是因为文件的内容不符合任何已知的文件格式,或者文件可能已损坏。通常,一个PNG文件(Portable Network Graphics)应该包含PNG文件格式的特定头部信息,这样file命令才能正确识别它。如果misc.png确实应该是一个PNG图片文件,那么这个结果表明文件可能已损坏或者被错误地命名
然后就挨个得改
发现是rar文件,将其修改

保存为rar,发现加密文件

无提示情况下尝试伪加密与暴力破解
暴力破解得到密钥123456
打开发现又有加密

暴力破解失败
观察发现加密文件内得png的crc与外面png文件crc相同,猜测明文攻击


将外面png打包成1.zip对flag进行明文破解,得到decrypted

打开

flag{3f76318f507fe7eb6422cd0703c64c88}
[攻防世界]7-2

解题

下载得到许多文件,里面内容如下:

先把名字与内容都提取出来
# 名字提取
import os
# 设置文件夹路径
folder_path = r"D:\CTF\重生之我是工商做题人\118956c97c7c4a3e9b1508c1f5ea44be\problem" # 请将'your_folder_path_here'替换成你的文件夹路径
# 遍历文件夹中的文件
for filename in os.listdir(folder_path):
# 检查文件是否有后缀
if '.' not in filename:
# 打印没有后缀的文件名
print(filename)
再进行bese64解码
只有这个文件解码后不是乱码:YWluaWRleGluZ3podWFuZw(其实我并没有看到就直接下一步)
# 将一个文件夹内若干个文件内容提取出来
import os
def extract_file_contents(folder_path):
# 遍历指定文件夹
for filename in os.listdir(folder_path):
# 构建完整的文件路径
file_path = os.path.join(folder_path, filename)
# 确保是文件而不是文件夹
if os.path.isfile(file_path):
try:
# 打开并读取文件内容
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()
print(content)
# 打印分隔线以区分不同文件的内容
except Exception as e:
print(f"Failed to read {filename}. Reason: {e}")
# 替换为你的文件夹路径
folder_path = r"D:\CTF\重生之我是工商做题人\118956c97c7c4a3e9b1508c1f5ea44be\problem"
extract_file_contents(folder_path)
内容如下,主要发现两段比较像flag

又因为文件名给的提示指定了一个文件,所以应该是下面这段字符

随波逐流一下,没啥发现,又卡住了
原来是这个:键盘密码 + 凯撒得到flag
74 94 22 42 91 23 {82 42 82 52 63 21 42 22 73 21 }
键盘密码:
例如 a-21 b-35 c-33
或者倒过来 a-12 b-53 c-33
w d f l a g { y l y o s e l f v e }
但确实实在想不通怎么就对应到这几个字符上了???
然后突然想到,莫不是这是九键??(难度题目7-2提示为9???)
szbhwc{uhujoahbra}

知识点:凯撒密码,键盘密码
[攻防世界]pyHAHA

解题

得到一个pyc文件,反编译失败,用010看一下

发现倒序的两个flag与kp,猜测里面所有字符都倒序了
f = open('PyHaHa2.pyc','wb')
with open('PyHaHa.pyc','rb') as g:
f.write(g.read()[::-1])
f.close()
将其正序
flag1: ec8d57d820ad8c586e4be0122b442c871a3d71cd8036c45083d860caf1793
ddc
flag2: c40a0be335babcfbd8c47aa771f6a2ceca2c8638caa5924da58286d2a9426
97e
然后将zip分离出来

发现加密音频文件,试一下刚才的两个flag,失败了,试一下伪加密

发现有信息,李大普了,为啥我电脑突然不能将其复制出来?????
在audacity与deepsound也没发现啥
原来还有一个音频工具DeEgger Embedder,又学到一个新工具


又是base64隐写

然而这些01暂时没什么用
(谁来救救孩子//)
想起来还没有反编译那个倒序后的pyc

。。。。。。
文件头错了??

添加文件头03f30d0a,反编译

# uncompyle6 version 3.9.2
# Python bytecode version base 2.7 (62211)
# Decompiled from: Python 3.12.6 (main, Sep 7 2024, 14:20:15) [GCC 14.2.0]
# Embedded file name: Fl4g.py
# Compiled at: 2017-07-02 00:15:33
from os import urandom
def generate(m, k):
result = 0
for i in bin(m ^ k)[2:]:
result = result << 1
if int(i):
result = result ^ m ^ k
if result >> 256:
result = result ^ P
return result
def encrypt(seed):
key = int(urandom(32).encode('hex'), 16)
while True:
yield key
key = generate(key, seed) + 233333333333L
def convert(string):
return int(string.encode('hex'), 16)
P = 115792089237316195423570985008687907853269984665640564039457584007913129640997L
flag1 = 'ThIs_Fl4g_Is_Ri9ht'
flag2 = 'Hey_Fl4g_Is_Not_HeRe'
key = int(urandom(32).encode('hex'), 16)
data = open('data.txt', 'r').read()
result = encrypt(key)
encrypt1 = bin(int(data, 2) ^ eval('0x' + hex(result.next())[2:-1] * 22))[2:]
encrypt2 = hex(convert(flag1) ^ result.next())[2:-1]
encrypt3 = hex(convert(flag2) ^ result.next())[2:-1]
print 'flag1:', encrypt2
print 'flag2:', encrypt3
f = open('encrypt.txt', 'w')
f.write(encrypt1)
f.close()
现在已知flag1,flag2,二进制以及一段python代码
看了wp发现这是otp加密(新知识)

以下为引用writeup内容
分析脚本发现flag1和flag2的密文在前面的zip注释信息已给出,脚本对三段明文使用了同个
Seed做了加密,其中后两段明文和密文还有第一段的密文已知,考虑OTP加密。
其中encrypt实现的是一个256bit随机数生成器的功能,generate实现的是在有限域GF(2^256)
下的平方运算:new_key=(old_key+seed)^2
因此,先由后两段明文和密文算出key2和key3,再在GF(2^256)下进行开方即可得到seed,
key3 = (key2+seed)^2
再由第一段密文(即base32隐藏的数据)key1和seed解得key1
Key2= (key1+seed)^2
最后对第一段密文(即base32隐藏的数据)和22次叠加的key1做异或得到原始二进制数据
然后运行代码
# Python2
def generate(m, k):
result = 0
for i in bin(m ^ k)[2:]:
result = result << 1
if int(i):
result = result ^ m ^ k
if result >> 256:
result = result ^ P
return result
def convert(string):
return int(string.encode('hex'), 16)
# P = 11579208923731619542357098500868790785326998466564056403945758
4007913129640997L
P = 0x10000000000000000000000000000000000000000000000000000000000000
425L
flag1 = 'ThIs_Fl4g_Is_Ri9ht'
flag2 = 'Hey_Fl4g_Is_Not_HeRe'
encrypt1 = open('encrypt.txt', 'r').read()
encrypt2 = 0xec8d57d820ad8c586e4be0122b442c871a3d71cd8036c45083d860c
af1793ddc
encrypt3 = 0xc40a0be335babcfbd8c47aa771f6a2ceca2c8638caa5924da58286d
2a942697e
key3 = encrypt3 ^ convert(flag2)
key2 = encrypt2 ^ convert(flag1)
print 'Found key2:',key2
print 'Found key3:',key3
tmp = key3 - 233333333333L
for i in range(0,255):
tmp = generate(tmp,0)
seed = tmp ^ key2
print 'Found seed:',seed
print 'use seed generate key3:',generate(key2,seed)+233333333333L
tmp = key2 - 233333333333L
for i in range(0,255):
tmp = generate(tmp,0)
key1 = tmp ^ seed
print 'Found key1:',key1
print 'use key1 generate key2:',generate(key1,seed)+233333333333L
result = eval(hex(int(encrypt1,2))[:-1]) ^ eval('0x'+hex(key1)[2:-1]
*22)
data = open('data.txt', 'w')
data.write(bin(result)[2:])
data.close()
“encrypt.txt”和“data.txt”中的二进制数据其实是二值图像,转化为png
# Python3
from PIL import Image
str=open("data.txt","r").read()
length=240
width=30
pic=Image.new("RGB",(length,width))
i=0
for x in range(length):
for y in range(width):
if str[i] == '0':
pic.putpixel([x,y],(0,0,0))
else:
pic.putpixel([x,y],(255,255,255))
i += 1
pic.show()
pic.save("Fl4g.png")
得到

其实后面那一段操作还是有些懵逼,太有难度了
知识点:pyc隐写,反编译,伪加密,DeEgger Embedder(新工具),base加密,otp加密
[攻防世界]picture3

解题

foremost得到一个加密文件(不解的是binwalk得到的该txt无加密,直接可以打开)

无提示情况下直接爆破或者伪加密
该文件是伪加,打开txt
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

解码如下,好像也没有什么发现
直接粗鲁将其放进工具

原来是base64隐写
得到flag{Ba5e_64OFive}
知识点:图片文件分离,base64隐写
网上找到了一个base64隐写脚本
d='''b2Q5dU==
aDk5Ni==
ZG8wOW==
ZzYxYh==
ZjU4NT==
aXBjNF==
Q3dTM2==
d1Y5c1==
dFA3WV==
ZDNQUP==
ejhBMT==
dUowaW==
OVQ2ZD==
aUM5ZU==
NnFFek==
ZGc0T/==
NGpWNE==
NVZpUW==
ejZDTm==
a1VEN5==
azNMUX==
TXlhNW==
bjZwWm==
Q2Q0b1=='''
e=d.splitlines()
binstr=""
base64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
for i in e :
if i.find("==")>0:
temp=bin((base64.find(i[-3])&15))[2:]
#取倒数第3个字符,在base64找到对应的索引数(就是编码数),取低4位,再转换为二进制字符
binstr=binstr + "0"*(4-len(temp))+temp #二进制字符补高位0后,连接字符到binstr
elif i.find("=")>0:
temp=bin((base64.find(i[-2])&3))[2:] #取倒数第2个字符,在base64找到对应的索引数(就是编码数),取低2位,再转换为二进制字符
binstr=binstr + "0"*(2-len(temp))+temp #二进制字符补高位0后,连接字符到binstr
str=""
for i in range(0,len(binstr),8):
str=str+chr(int(binstr[i:i+8],2)) #从左到右,每取8位转换为ascii字符,连接字符到字符串
print(str) #结果是 Base_sixty_four_point_five转换为
[攻防世界]picture
解题

得到信息“CODE‘猜测会出来什么密码

先分离一下
foremost无果,binwalk发现文件,其中文件存在


发现base64

保存下来,放进010,发现开头的kp,将其修改成为pk,保存为zip文件

发现注释与加密文件
[Python 2.7]
>>> ▆▆▆
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
▆▆▆
ZeroDivisionError: ▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆ <- password ;)
>>>
啥玩意?像极了我python代码报错的样子……
遇事不决问ai


ZeroDivisionError: integer division or modulo by zero
尝试integer division or modulo by zero,还真打开了



知识点:UUencode编码,文件头,base64转文件,文件分离
[攻防世界]4433
解题
得到一个指纹图片

发现二维码

得到摩斯密码
...--.----...--..

啊?
回到题目,4433
将摩斯按4 4 3 3分开
...- -.-- --. ..- -..

然后上传,然后失败

得到flag{VERY GOOD}
知识点:图片隐写,摩斯电码的缩写
[攻防世界]侧信道初探

解题
下载得到两张图片


有些懵逼,回到题目
首先,何为“测信道初探”?

还有一种侧信道是通过图像的隐蔽信道来传递机密信息

然后根据题目中“二进制形式读取出来”,猜测图像与二进制有关

得出flag{0110111010}
知识点:侧信道攻击

信女愿要一台永远不会报错的电脑
浙公网安备 33010602011771号