我是从攻防世界入门的,感谢攻防世界的免费靶场
靶场地址:攻防世界
https://adworld.xctf.org.cn/
WP:
明显,入门用的,了解flag格式,直接提交题目例子的flag就可以了
flag{th1s_!s_a_d4m0_4la9}
WP:
题目给的一个PDF文件,使用PDF编辑器打开(我用的是万兴PDF编辑器)
移出来看到就是flag了
附件是一份文档:
一段经文,那不就是与佛论禅加密?
http://www.keyfc.net/bbs/tools/tudoucode.aspx
记得加“佛曰”前缀
得到一串字符:
MzkuM3gvMUAwnzuvn3cgozMlMTuvqzAenJchMUAeqzWenzEmLJW9
看着这段字符,百思不得其解,最后题目:“如来十三掌”,十三??试试rot13解码,得到一串字符串:
ZmxhZ3tiZHNjamhia3ptbmZyZGhidmNraWpuZHNrdmJramRzYWJ9
最后丢到解密工具里一键解码,得到flag:
flag{bdscjhbkzmnfrdhbvckijndskvbkjdsab}
WP:附件是个GIF图片,看到闪的飞快,最后有一帧黑乎乎的,那就是可疑的地方了,思路肯定是工具逐帧分解GIF
可以用“GIF动画帧提取器”,或者PS分解出来。
PS打开:找到可疑图层,打开图层显示,就可以看到可疑的那一帧。
GIF动画帧提取器打开,找到可疑帧
小恐龙手上拿着的是二维码,但是少了三个定位点,要PS回去。
扫描二维码得到flag
使用gd-gui工具反编译看看
查找关键字flag
看到还真能找到
flag{RGFqaURhbGlfSmlud2FuQ2hpamk=}
拿去提交,发现是不对的
flag{RGFqaURhbGlfSmlud2FuQ2hpamk=}看着像base64加密,拿去解密。
得到flag
flag{DajiDali_JinwanChiji}
下载下来,发现是个压缩包,打开看看,发现都是黑、白两色块。脑袋里啪的想到:白:0 ,黑 :1,为啥不是白:1,黑:0??做久了开发就知道,0是白黑是1,1都是反派的那个。
一番比对后得到一串数字:
01100110011011000110000101100111011110110100011001110101010011100101111101100111011010010100011001111101
然后发现总数是104个,这要么是2、4、8一组,计算机中以字节为单位存储和解释信息,规定一个字节由八个二进制位构成,那么8个一组没跑了。
8个一组得到:
01100110 01101100 01100001 01100111 01111011 01000110 01110101 01001110 01011111 01100111 01101001 01000110 01111101
二进制转字符得到flag(用的随波逐流提供的解密工具):flag{FuN_giF}
**
**
这题没啥附件,只有一串字符,看字符是0-9,a-f组成的,就知道这是16进制字符串咯,那么2个16进制可以代表一个字符串,就用python进行转换下。
string = "c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2"
for i in range(0,len(string),2):
s = '0x'+string[i]+string[i+1]
i = int(s,16)
print(str(i))
发现结果字符块都大于128,ASCII码范围是0-127
怎么办呢?上面结果再减下128
这就对了。跟着感觉走没毛病,把进制转换成字符。
string = "c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2"
flag = ''
for i in range(0,len(string),2):
s = '0x'+string[i]+string[i+1]
i = int(s,16)-128
flag+=chr(i)
print(flag)
转换后得到以下结果,可以得到flag咯:
Hi, FreshDog! The flag is: hjzcydjzbjdcjkzkcugisdchjyjsbdfr
下载得到附件
PDF编辑器,删掉挡在前面的那对英文,看到还剩下几个文本框。
复制文本出来,贴在记事本上
很明显,ABAB那串就是密文了。复制出来
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
试下转换为摩斯密码,记事本替换下A和B,A替换为 .,B替换为-。
到如下结果。
-.-. --- -. --. .-. .- - ..- .-.. .- - .. --- -. ... --..-- ..-. .-.. .- --. ---... .---- -. ...- .---- ..... .---- -... .-.. ...-- -- ...-- ..... ..... ....- --. ...--
放到解密工具上解密
去掉空格,得到一串字符
CONGRATULATIONS,FLAG:1NV151BL3M3554G3
题目说flag是小写,转换为小写,得到flag。
congratulations,flag:1nv151bl3m3554g3
那么flag就是flag{1nv151bl3m3554g3}
下载是1个压缩包,360解压
当然是用rar啦,360压缩不会提示错误的,winrar才会。
文件头损坏,那就用winhex打开修复。
首先了解下rar块头的知识:
在这里怎么定位坏的块呢?
1、定位文件位置
rar提示secret.png文件头已损坏,winhex先定位到文件所在。
通过搜索文本,可以定位到文件所在了。
题目用到的是这两个知识点
附上常见的块类型(HEAD_TYPE)如下:
标记块:HEAD_TYPE=0x72
压缩文件头:HEAD_TYPE=0x73
文件头:HEAD_TYPE=0x74
旧风格的注释头:HEAD_TYPE=0x75
旧风格的用户身份信息:HEAD_TYPE=0x76
旧风格的子块:HEAD_TYPE=0x77
旧风格的恢复记录:HEAD_TYPE=0X78
旧风格的用户身份信息:HEAD_TYPE=0X79
子块:HEAD_TYPE=0x7A
最后的结束块:HEAD_TYPE=0x7B
2、找到块头
上一个文件结束,是 flag is not here,就是那个迷惑的txt文件内容结尾啦。那么跟着的就是下个文件,图片文件的开头。看下图,从上面知识,知道第三个字节开始,就是文件块头咯,那么我们要改的就是这个字节。提示文件头损坏,那就给他改成对应的 文件头:HEAD_TYPE=0x74
改完后保存,如下图
解压压缩包,看到图片出来了。
打开图片,发现空白的,所以再winhex打开,发现是gif的图
把后缀改为gif。
用stegsolve打开,得到半截二维码。
题目说是分层图片,ps打开,发现有图层是隐藏的。
开启图层再另存为。
用stegsolve打开,得到半截二维码。
两半二维码拼合
还是缺定位点没有,ps上去,得到完整的二维码。
扫码得到flag
flag{yanji4n_bu_we1shi}
下载完提示有密码,但是这是伪加密,360压缩可以无视。
360压缩打开压缩包是这么一大串东西
base64解密
就一段隐写技术的说明,没啥用。
题目中说base64解密,最后一步精髓(最后一步是精髓,不就是提示你取行尾的密文),所以提示很明显啦,base64隐写。
这篇文章说的很好啦,base64隐写原理。
https://blog.csdn.net/xnightmare/article/details/103774379
然后解题思路是,边解密边把隐写的密文拿到再解密。
依次读取每行,从中提取出隐写位。
如果最后没有‘=’,说明没有隐写位,跳过。
如果最后是一个‘=’,说明有两位隐写位,将倒数第二个字符转化为对应的二进制索引,然后取后两位。
如果最后是两个‘=’,说明有四位隐写位,将倒数第三个字符转化为对应的二进制索引,然后取后四位。
将每行提取出的隐写位依次连接起来,每8位为一组转换为ASCII字符,最后不足8位的丢弃。
贴上大佬的代码:
# -*- coding: cp936 -*-
import base64
b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'#base64字典库
with open(r'C:\Users\XUHC\Documents\代码段\stego.txt', 'rb') as f: #读取文件内容
bin_str = ''
for line in f.readlines():
stegb64 = str(line, "utf-8").strip("\n")
rowb64 = str(base64.b64encode(base64.b64decode(stegb64)), "utf-8").strip("\n")
offset = abs(b64chars.index(stegb64.replace('=','')[-1])-b64chars.index(rowb64.replace('=','')[-1]))
equalnum = stegb64.count('=') #no equalnum no offset
if equalnum:
bin_str += bin(offset)[2:].zfill(equalnum * 2)
print(''.join([chr(int(bin_str[i:i + 8], 2)) for i in range(0, len(bin_str), 8)])) #8 位一组
得到flag
Base_sixty_four_point_five
提示很明显:ext3文件系统,Linux环境。
直接mount试试看,然后再进到目录,试着查找flag文件,没想到还真有,查看flag.txt,得到密文:
ZmxhZ3tzYWpiY2lienNrampjbmJoc2J2Y2pianN6Y3N6Ymt6an0=
解密后得到flag
flag{sajbcibzskjjcnbhsbvcjbjszcszbkzj}