WP-攻防世界misc_新手区
文章目录
2、pdf
方法一:
用pdf打开时鼠标在图片上移动时,到有字的地方箭头就会变成I这种,说明有字, 直接ctrl+a全选,图片中间会有一条白色的,然后直接复制到txt中就是了
方法二:
在线pdf转word,打开word,移开图片,下面就是flag
flag{security_through_obscurity}
3、如来十三掌
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rsm4DTO4-1629108028065)(C:/Users/86155/AppData/Roaming/Typora/typora-user-images/image-20210808183617273.png)]
在线与佛论禅编码解码后,
MzkuM3gvMUAwnzuvn3cgozMlMTuvqzAenJchMUAeqzWenzEmLJW9
猜测base64,在线解码之后错误,结合题目如来十三掌
,猜测rot-13编码,得到:
ZmxhZ3tiZHNjamhia3ptbmZyZGhidmNraWpuZHNrdmJramRzYWJ9
再次base64解码,得到flag
flag{bdscjhbkzmnfrdhbvckijndskvbkjdsab}
总结:rot13编码
rot13编码:特殊的凯撒加密,偏移13位。
特殊性:英文字符为26个,26=13+13,所以字母通过rot13编码两次后不变,
——即:ROT13函数是它自己的逆反,对任何字元x:ROT13(ROT13(x))=ROT26(x)=x。
换句话说,两个连续的ROT13应用函式会回复原始文字(在数学上,这有时称之为对合(involution);在密码学上,这叫做对等加密(reciprocalcipher))。
4、give_you_flag
文件为一个gif文件,观看发现最后几帧有显示二维码。
用Stegsolve.jar打开,找到出现二维码的那一帧。
二维码缺少定位符,可以用PS给他p上去。
我用的Excel粘上去的,注意放大一点,似乎易识别一点。
总结:二维码
编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理。
所以,二维码中的黑白色正好映射二进制中的0和1,且二维码也有很多编码集。
在许多种类的二维条码中,常用的码制有:Data Matrix、MaxiCode、Aztec、[QR Code](https://baike.baidu.com/item/QR Code)、Vericode、PDF417、Ultracode、[Code 49](https://baike.baidu.com/item/Code 49)、[Code 16K](https://baike.baidu.com/item/Code 16K)等,
图中三个角相同的黑白相交正方形为二维码的定位符,保证即使东倒西歪也能定位正确扫描识别
每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能及处理图形旋转变化等特点。
5、stegano
拿到一个flag,打开后没有什么,
Ctrl+A
全选后复制到记事本里,发现特别字符串
BABA BBB BA BBA ABA AB B AAB ABAA AB B AA BBB BA AAA BBAABB AABA ABAA AB BBA BBBAAA ABBBB BA AAAB ABBBB AAAAA ABBBB BAAA ABAA AAABB BB AAABB AAAAA AAAAA AAAAB BBA AAABB
猜测为摩斯电码的映射。(存在两种映射关系,这里猜测一种即可)
用python跑一下
s= "BABA BBB BA BBA ABA AB B AAB ABAA AB B AA BBB BA AAA BBAABB AABA ABAA AB BBA BBBAAA ABBBB BA AAAB ABBBB AAAAA ABBBB BAAA ABAA AAABB BB AAABB AAAAA AAAAA AAAAB BBA AAABB"
str1 = s.replace('B','-' )
str2 = str1.replace('A', '.')
print(str2)
得到:
-.-. --- -. --. .-. .- - ..- .-.. .- - .. --- -. ... --..-- ..-. .-.. .- --. ---... .---- -. ...- .---- ..... .---- -... .-.. ...-- -- ...-- ..... ..... ....- --. ...--
在线解密一下,摩斯电码转化,得到:CONGRATULATIONS,FLAG:1NV151BL3M3554G3
提交flag时注意转换为小写:flag{1nv151bl3m3554g3}
总结:摩尔斯点码
表示方法:其实有两种“符号”是用来表示字元的:那就是划和点,或是长和短。而发报的速度是由点的长度来决定的,而且被当作是发报的时间参考。
摩斯电码是一种二进制编码集,利用二叉树进行构造。
似乎
条形码
、二维码
都可以看做摩斯电码的延伸,都是抽象成二进制进行编码。
6、坚持60s
拿到的是一个jar文件,因为熟悉一点安卓逆向,所以直接用jd-gui
反编译出java源码,
找到对应的逻辑函数,flag就在其中。
flag{RGFqaURhbGlfSmlud2FuQ2hpamk=}
直接提交发现不对,对应字符串结尾为‘=’
,很显然是经过base64编码的,直接在线base64解码即可。
flag{DajiDali_JinwanChiji}
(后来看wp,返现原来jar文件可以直接运行,原来是一个小游戏,尝试玩一下,结果不超过20s就死了,靠!😅)
7、gif
压缩包,解压后是104张黑白图片,并且名字有序号。
猜测黑白图片正好对应二进制的0和1。
直接得到其二进制编码
01100110011011000110000101100111011110110100011001110101010011100101111101100111011010010100011001111101
然后分别8位二进制转ascll即可得到flag。
也可以写python脚本跑出来
flag_b = ''
white = open(r"D:\\user\Desktop\\攻防世界\\misc\\7-gif\\gif\\0.jpg",'rb').read()
print(type(white))
black = open(r"D:\\user\Desktop\\攻防世界\\misc\\7-gif\\gif\\1.jpg",'rb').read()
for i in range(104):
with open(r"D:\user\Desktop\攻防世界\misc\7-gif\gif\%d.jpg"%i , 'rb') as f:
if f.read() == white:
flag_b += '0'
else:
flag_b += '1'
print(flag_b)
flag = ''
for i in range(len(flag_b)//8):
flag += chr( int(flag_b[i*8:(i+1)*8],2) )
print(flag)
flag{FuN_giF}
8、掀桌子
题目给了一串字符串:c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2
仔细一看,发现只有字母ae和数字09,
猜测为16进制,因为1个16字节数代表4bit,所以两个16进制代表一个字节。
将上述字符串两两分割,得到:
c8 e9 ac a0 c6 f2 e5 f3 e8 c4 ef e7 a1 a0 d4 e8 e5 a0 e6 ec e1 e7 a0 e9 f3 ba a0 e8 ea fa e3 f9 e4 ea fa e2 ea e4 e3 ea eb fa eb e3 f5 e7 e9 f3 e4 e3 e8 ea f9 ea f3 e2 e4 e6 f2
发现每个字节都大于0x7f,而ascll码表示的范围为00x7f(0127)。
所以尝试把每个字节减去128,再转为ascll码。正好得到flag。
#python脚本
a = "c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2"
flag = ""
for i in range(0,len(a),2):
temp = a[i:i+2]
flag += chr(int(temp,16)-128)
print(temp,end=' ')
print()
print(flag)
flag{hjzcydjzbjdcjkzkcugisdchjyjsbdfr}
9、ext3
题目描述:今天是菜狗的生日,他收到了一个linux系统光盘
提示是一个linux系统光盘。
上网查了下,百度百科:ext3。是linux的日志文件系统。
看了网上的wp跟着做。
linux中file f1fc23f5c743425d9e0073887c846d23
查看文件类型。
Linux rev 1.0 ext3 filesystem data, UUID=cf6d7bff-c377-403f-84ae-956ce3c99aaa
从ext3文件系统的镜像中恢复文件。使用工具ext3grep
,
安装:apt-get install ext3grep
先从目标二进制文件中搜索flag
相关的字符串,
strings f1fc23f5c743425d9e0073887c846d23 | grep -i flag
.flag.txt.swp
flag.txtt.swx
~root/Desktop/file/O7avZhikgKgbF/flag.txt
.flag.txt.swp
flag.txtt.swx
.flag.txt.swp
flag.txtt.swx
确定关键路径为O7avZhikgKgbF/flag.txt
。
所以使用ext3grep f1fc23f5c743425d9e0073887c846d23 --restore-all
恢复所有目录。目录中很多文件夹,进入到O7avZhikgKgbF
文件夹,cat flag.txt
。
ZmxhZ3tzYWpiY2lienNrampjbmJoc2J2Y2pianN6Y3N6Ymt6an0=
在线base64解码,得到flag:
flag{sajbcibzskjjcnbhsbvcjbjszcszbkzj}
也可以通过mount指令安全挂载文件系统。同样能恢复出目录,得到flag.exe。
10、SimpleRAR
拿到一个rar压缩包,常规打开,里面只有一个flag.txt
,打开显示flag is not here
。
010editor
打开查看rar的二进制数据
这么多二进制数据,解压出来却只有一个一句话的txt,
本来不熟悉rar结构,后来百度查了下优快云:RAR文件格式学习(了解)(rar4.0)
这道题的是4.0版本的rar,现在常用的是5.0(有细节上的差异)。
一般是rar压缩包中 文件块File Block
的文件头File Header
损坏,导致解压时无法识别。
这道题是第二个文件块中的Head_Type
字段错误,导致的无法识别,也就是地址0x53的数据不应该是0x7A,而应该是0x74,代表这一块头区
是File Header
。
所以把地址0x53的数据0x7A改为0x74,即可正常识别解压。
flag肯定与secret.png
相关,解压之后打开,只有一张白底图片。
用010editor
打开secret.png
查看二进制数据,发现是一个gif文件,
将其后缀名改为gif,打开后依然没有什么发现。
利用Stegsolve.jar
分析gif文件,不断翻找之后只发现半截二维码!
联想到题目提示双图层,所以应该是要分离图层。(利用PS:PhotoShop)
PS2021下载链接:http://www.91rjz.com/pcsoft/85216.html
ps打开后,可以看到的确是有双图层,
分别单机右键导出图层。
然后再利用Stegsolve.jar
打开,一帧一帧的看,即可看到两张半截的二维码,分别是上半部分和下半部分。
虽然上半部分的定位符
不完整,这个贴一下即可。
扫描即可得到flag
flag{yanji4n_bu_we1shi}
总结:(1)用010editor
时添加模板辅助分析文件结构
这道题可以利用rar
的模板辅助分析rar结构
这个功能尤其在分析windows的PE结构
时,特别好用!!!
总结:(2)RAR文件结构的理解
入门了解:百度百科:RAR文件
当时看这篇文章,讲的很好,又正好是分析的这道题中的rar:RAR文件格式学习(了解)(这个是4.0版本)
因为有PE结构
的基础,所以学习入门RAR结构这个也比较快,大概理解了4.0版本RAR的整体结构如下:
5.0版本的rar结构在细节上有变化,整体框架上应该也差不多。
11、base64stego
拿到一个zip压缩包,正常解压,但是提示有密码。
第一想到的是,检查是否存在zip伪加密。
zip文件结构及zip伪加密:https://blog.youkuaiyun.com/weixin_41687289/article/details/82695801
010editor
打开zip压缩包查看二进制数据,选用zip模板辅助分析,
的确是zip伪加密,
更改为00 00
即可正常解压,得到stego.txt
,打开后得到很多疑似base64编码:
尝试在线解码无果。
查了wp是base64隐写
base64隐写:https://www.tr0y.wang/2017/06/14/Base64steg/
所以写脚本提取隐写内容
#python
b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
with open("D:\\user\Desktop\攻防世界\misc\\11-base64stego\stego.txt","rb") as f:
txtlines = f.readlines()
print(type(txtlines))
flag = ''
for line in txtlines:
line = line.decode('utf-8')
equalnum = line.count('=')
if equalnum == 1:
#print(line[-3:-2])
x = ( b64chars.index(line[-3:-2]) ) & 0x3#base64隐写是查表前进行的隐写
x = '{:02b}'.format(x)#十进制转二进制(2位)高位补零
flag += x
elif equalnum == 2:
#print(line[-4:-3])
x = ( b64chars.index(line[-4:-3]) ) & 0xf#base64隐写是查表前进行的隐写
x = '{:04b}'.format(x)#十进制转二进制(4位)高位补零
flag += x
print(flag)
for i in range(0,len(flag),8):
print(chr(int(flag[i:i+8],2)) , end='')
提交时要加上flag{}
flag{Base_sixty_four_point_five}
总结:(1)zip文件结构及其伪加密
这篇文章写的好,zip文件结构及zip伪加密
细节的话有这篇:zip文件结构
我主要关注一下他的整体框架,通过测试发现,zip文件虽然整体是分为上图三个部分,但是:
**重点:**假设压缩包里有n个文件,文件数据区中就有n个文件数据结构,中央目录结构区里也有n个中央目录结构。
只有中央目录结尾节区只有一个固定的结构。
下图是压缩3个文件的zip压缩包,
所以zip文件的遍历是从尾部开始,依次向上遍历获得每个压缩文件对应的文件数据结构的偏移和一些基本信息。
中央目录结构的结构体大小是固定的,但是包含结构体包含指针指向一些字符串(比如文件名),由于中央目录结构也包含了文件名等字符串信息,所以大小有些许偏差,不过可以通过遍历正常区分。
总结:(2)base64隐写
这篇文章:Tr0y’s Blog :神奇的 Base64 隐写,也是这道misc的wp。
原理看这篇博客就能很好理解。
主要注意的是:base64隐写,是在base64编码的过程中进行的,也就是得到6位二进制分组后、而在进行查表前,这个阶段进行隐写,塞入数据。
也就是说,在提取base64隐写的时候,先要获取到最后一个字符在码表中的序号,从这个序号中提取base隐写内容。
下面是我写的对应这道题提取base64隐写的python脚本。
#python3.8
b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
with open("D:\\user\Desktop\攻防世界\misc\\11-base64stego\stego.txt","rb") as f:
txtlines = f.readlines()
print(type(txtlines))
flag = ''
for line in txtlines:
line = line.decode('utf-8')
equalnum = line.count('=')
if equalnum == 1:
#print(line[-3:-2])
x = ( b64chars.index(line[-3:-2]) ) & 0x3#base64隐写是查表前进行的隐写
x = '{:02b}'.format(x)#十进制转二进制(2位)高位补零
flag += x
elif equalnum == 2:
#print(line[-4:-3])
x = ( b64chars.index(line[-4:-3]) ) & 0xf#base64隐写是查表前进行的隐写
x = '{:04b}'.format(x)#十进制转二进制(4位)高位补零
flag += x
print(flag)
for i in range(0,len(flag),8):
print(chr(int(flag[i:i+8],2)) , end='')
12、功夫再高也怕菜刀
拿到一个pcapng文件,wirshark
打开发现里面有很多报文,没有什么有用信息。
linux下利用foremost
分离一下文件,
#linux安装
apt-get install foremost
对应的命令是
foremost 文件名
windows也可以,windows上使用foremost
在同文件夹下生成output文件夹,存放分离出来的文件
分离得到一个zip文件,解压需要密码。
即:得到关键信息flag.txt
。
还是用wirshark
打开,查找flag.txt
符合的报文段有好几个,基本是这样,并为查到什么有用信息,
知道查到序号No.1150的报文段
有一张可疑jpg图片,
右键点击序号No.1150的报文段,选择追踪流,再选择tcp流
这是为了提取jpg文件的二进制数据。
由于jpg文件格式规定,以FF D8 FF
开头,以FF D9
结尾。
所以复制这段数据,写入文件。
我这里是先复制上述数据,再用的是010editor
打开我们新建的空白jpg文件,
即可写入二进制数据。
保存后打开jpg文件,得到zip压缩包解压密码
解压压缩包之后得到flag.txt
。
打开即是flag。
flag{3OpWdJ-JP6FzK-koCMAK-VkfWBq-75Un2z}
总结:(1)在010editor中写入16进制数据
总结:(2)CTF中图片隐藏文件分离方法总结
这篇文章感觉还可以:CTF中图片隐藏文件分离方法总结