【CUMT-BXS】MISC部分题解
Safe or Security?
1. LSB
题目就是一张图片。
- 首先将这张图片另存为,右键-属性,在详细信息中并没有发现什么东西。
- 使用工具WinHex打开,也并不能发现什么端倪。
- 其实题目已经提示了:LSB!
在StegSolve中打开图片,【Analyse】-【Data Extract】,Red、Green、Blue都勾选0,点击【Preview】。如图所示:
看到第一行“.PNG”,我们点击【Save Bin(存为二进制文件)】,把它存在桌面,就叫它2333.png
吧!
惊奇发现是一张QR Code,扫一扫即可得到flag。
2. 爱因斯坦
题目就是这一张图片:
- 首先将这张图片另存为,右键-属性,在详细信息中发现备注内容是
this_is_not_password
,不知道有没有用,先记下来。 - 用StegSolve和WinHex打开,什么都发现不了。
- 将此图片复制到Kali Linux虚拟机桌面上。
- 用终端打开桌面,输入命令
binwalk misc2.jpg
发现这张照片还藏着一个zip压缩包,zip下还有个叫flag.txt的文件(惊不惊喜,意不意外),找到线索了!那就朝着此方向前行!
- 输入命令
foremost misc2.jpg
得到一个output文件夹,在这个文件夹下有个zip文件夹,打开压缩包,我们双击flag.txt试图打开它,正当我们将为得到flag而欢呼时,弹出这个窗口,情况不妙。
- 我们左思右想、上思下想,终于,嘴角微微上扬,将第1步发现的
this_is_not_password
输入,敲下Enter键,得到了flag!深藏功与名。
3. 视而不见
题目:
隐隐约约其实看出了什么,用StegSolve打开它,【Analyse】-【Stereogram Solver】,然后疯狂按住【←】(键盘上方向键【→】也可以),直到神龙(flag)出现:
4. 鲨鱼的套路
下载下来是个Wireshark的包,打开查看。
在上面找个TCP的包,追踪下TCP流,得到以下:
UEsDBBQAAAgIANeFfErNFL6kGwAAABsAAAAcAAAAaGludF9zb21lIF90aGluZ19pc19mYWtlLnR4dEvLSUyvTs5IzUuPL87IjC9JzI/PKQUyU/NqAVBLAQI/ABQACQAIANeFfErNFL6kGwAAABsAAAAcACQAAAAAAAAAIAAAAAAAAABoaW50X3NvbWUgX3RoaW5nX2lzX2Zha2UudHh0CgAgAAAAAAABABgAu7Ux1J+n0gGhDeAnl6fSAaEN4CeXp9IBUEsFBgAAAAABAAEAbgAAAFUAAAAAAA==
看起来像base64编码。
在线解下看看。
PK开头,应该是个zip文件。况且很多字符无法显示,那我们用Python写个脚本吧~
# base64编码转二进制文件
import base64
s = "" #这里填写刚刚那一串
s = base64.b64decode(s)
f = open('d:/flag.zip','wb')
f.write(s)
f.close()
print(s)
代码的意思是把s
base64解码后以二进制文件写入d:/flag.zip
,运行一下。
居然有密码,可能是伪加密。
对于伪加密有以下几种方法:
- 在Mac OS及部分Linux(如Kali)系统中,可以直接打开伪加密的zip压缩包
- 测伪加密的ZipCenOp.jar,解密后如果能成功打开zip包,则是伪加密,否则说明思路错误
- 16进制编辑器改回加密标记位
所以,我们可以直接拖进Kali Linux解压,就可以得到flag。
或者拖到010 editor中,把09
改为00
保存就可以了。
5. easy crypto
将zip解压,发现3个文件,先打开flag.txt,看到qqmiaiiigvrycgoquruly
,先不急着提交。
在打开morse.txt,文件名告诉我们这是摩斯密码,在线解码下,得到keyisvigenerecipher
,意思是维吉尼亚加密。
我们把flag.txt中的qqmiaiiigvrycgoquruly
复制过去,key填写vigenerecipher
,解密下得到flag。
6. code
仿射密码,暴力破解,特征字符串为“flag”。Python脚本:
encode = "joqtgyvlmcqivvvvmmmmzzzzcccciiiijjjjoooossssqqqqmmmm"
flag = ""
for key1 in range(1,26):
for key2 in range(0,30):
for i in range(0,len(encode)):
flag+=chr(key1*((ord(encode[i])-97)-key2)%26+97)
if "flag" in flag:
print(flag,key1,key2)
flag = ""
7. PS Master
作为一个PS炉火纯青的人,这题怎么可能难得到我?
题目:(Orz)
- 首先将这张图片另存为,发现它竟然是一张gif,右键-属性,在详细信息中并没有发现什么。
- 用Photoshop打开图片,发现了二维码图层:
- 三个识别点(左上、右上、左下)被遮住了,怎么办呢?当然是先从被遮面积最小的下手:右上,使用快速选择工具把右上角的本该为黑色的被doge遮住一部分的小方块选出来,右键-【填充】,【内容】选择【黑色】。
- 右上角OK了,根据积累的知识,这三个识别点(左上、右上、左下)是一模一样的,则把右上角的(连同外面的方框)选择出来,然后Ctrl+J两次复制两次图层,分别移到左上和左下,大功告成。
- 扫一扫即可得到flag:
flag{hi_doge_i_am_er_ha}
PS:
- 在移动过程中,可按住Shift键实现水平(or竖直or45°)移动;
- 觉得自己对不准,可以Ctrl+R召唤标尺,从上面的标尺往下拖拉可作出水平参考线,类似的,从左边的标尺往下拖拉可作出竖直参考线。
9. 传感器1
题目:
5555555595555A65556AA696AA6666666955
先转成二进制:
010101010101010101010101010101011001010101010101010110100110010101010101011010101010011010010110101010100110011001100110011001100110100101010101
然后曼彻斯特编码解下得到:
FFFF7FCBF8260AAA9F
但是找不到ID呀,联想到八位倒序传输协议将二进制每八位reverse一下得到.
最终脚本:
HEX = "5555555595555A65556AA696AA6666666955"
BIN = HEX.replace("5","0101").replace("9","1001").replace("A","1010").replace("6","0110")
flag = ""
flag2 = ""
for i in range(0,len(BIN),2):
if BIN[i:i+2] == "01":
flag += "1"
else:
flag += "0"
for i in range(0,len(flag),8):
flag2 += hex(int(flag[i:i+8][::-1],2))[2:]
print(str(hex(int(flag,2))[2:].upper()))
print(flag2.upper())
原来写的flag2 += hex(int(flag[i:i+8:-1],2))[2:]
会报错。([2:]
截取0X
),因为它ID给的是大写,我们提交大写。
10. 我就想试试这个名字到底能够起多长
题目:
蛮试试LSB的思路,用StegSolve中打开图片,【Analyse】-【Data Extract】,Red、Green、Blue都勾选0,点击【Preview】。看到开头是这样的:
PK是啥?baidu or google一下PK开头的文件,zip!原因:Phil Katz这个人发明了zip。
点击【Save Bin(存为二进制文件)】,把它存在桌面,就叫它2333.zip
吧!
解压得到一个无后缀文件“1”,直接用WinHex打开,搜索“ctf”或“flag”得出结果。
11. 你的石锅拌饭
题目文字有两种,正常的和倾斜的。
题目中提到“培根”,联想到培根密码。
题目说了,密文是大写,那我们猜测正常的字为A,倾斜的字为B,去掉所有标点,得到密文:
在线工具解密下,flag出来了。
12. shark
下载下来是一个没有后缀的文件,题目是“shark”,所以把它的后缀改成Wireshark的后缀.pcapng
打开。
这是一个数据分析题,看到了很多FTP协议的,出题者可能想让我们从中提取文件,文件中有flag。
追踪几个TCP流。
TCP流0:
看到FTP登陆的密码是2016CUMTCTF950123!@#
,先记录下来,一会儿可能有用。
TCP流1:
它告诉我们有个叫flag.zip
的文件,文件的数据应该在后面的流里。
TCP流2:
还是没有我们想要的文件数据。
TCP流3:
看到PK
开头的ZIP文件了!右键-【导出分组字节流】或者把它复制到二进制编辑器里,保存为.zip文件。
解压需要密码!猜测可能与FTP登陆密码相同,解压成功。
有个未知格式的文件,把它拖到010 Editor里。
看到IHDR,这是个PNG文件,看来文件被改头了。
我们对照着改:
把
89 00 00 00
改为
89 50 4e 47
保存为PNG,打开得到flag~
13. 学姐真美
右键-【属性】-【详细信息】中“something hidden by outguess”。
outgusess是啥?没见过。百度得知是一个图片隐写工具!这就是方向吧。
把文件拖到Kali Linux的桌面上。
安装outguess
Kail终端命令输入git clone https://github.com/crorvick/outguess
安装包随即下载到文件夹。双击打开文件夹,右键点击空白区域选终端打开。
随后输入以下命令./configure && make && make install
进行安装。
终端上打开桌面,输入命令outguess -r dream.jpg -t flag.txt
。
打开文本文档,宣告失败。哭唧唧。
换个思路吧
把图片拖到WinHex里,搜索一下ctf、flag均失败。
搜索JPG的文件尾“FF D9”,发现后面还有东西!
那它后面是啥?看到了“IHDR”,百度一下,Google一下发现它都和PNG有关,那一定是这样:JPG后藏了一张PNG。(在我没做CTF题目前我是不相信的)
搜索一下PNG的文件头“89 50 4E 47”,找不到,纳尼,难道是文件头被篡改了?
搜索引擎用起来,搜索一下PNG的头部。以下:
- (固定)八个字节89 50 4E 47 0D 0A 1A 0A为png的文件头
- (固定)四个字节00 00 00 0D(即为十进制的13)代表数据块的长度为13
- (固定)四个字节49 48 44 52(即为ASCII码的IHDR)是文件头数据块的标示(IDCH)
- (可变)13位数据块(IHDR)
- 前四个字节代表该图片的宽
- 后四个字节代表该图片的高
- 后五个字节依次为:
Bit depth、ColorType、Compression method、Filter method、Interlace method
- (可变)剩余四字节为该png的CRC检验码,由从IDCH到IHDR的十七位字节进行crc计算得到。
我们可以用010 editor打开一张PNG图,用作模板,对照着改改。
那就从IHDR后开始改吧,把学姐那张图IHDR后面开始覆盖打开的PNG模板。保存下~
终于找到了,可是,唉~留下了桑心的泪水。
哦,等等!头部高度!可能高度被坏坏的出题者给改了!
先右键看下详细信息里的宽高,根据已有知识,一张二维码应该是一个正方形,即长宽相等。
把高度“00 00 00 18”改为“00 00 01 18”。保存,得到完整的图片,扫一扫得到可爱的学姐啊呸flag。
14. md5
这题思路和WEB里的is hash safe??
其实是一样的,要用长度扩展攻击。
因为已经在Kali Linux安装了工具,所以可以直接用了,在终端中输入hashpump,然后输入如下(d是我随便加的):
Input Signature: 4dbe35eaea655b0a2b0d06391175b8a3
Input Data: cyr
Input Key Length: 16
Input Data to Add: d
03dc47deda3c38dffc4ea6a32c3ecbd0
cyr\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x00\x00d
这个hash值就是我们要填入hash的字符串,题目要求输入十六进制,那我们写个Python脚本跑下,脚本如下:
s = "cyr\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x00\x00d"
for x in s:
print(hex(ord(x))[2:]+" ",end="")
将运行结果复制进明文,提交后可以得到flag。
15. 大家来找茬
题目:
放到Kali Linux中binwalk一下,发现隐藏了两张PNG,foremost提取出来。
在第二张图片隐隐约约看到了二维码的影子。
打开StegSolve工具,【Analyze】-【Image Combiner】一下,按键盘【→】切换,直到模式为【SUB】,看到一张清晰的二维码。
但是这张图没法直接扫出来,原因是主体为白色,放到PS中【反相】一下,扫一扫,得到flag。
16. 据说是个签到题
下载下来是个.pcapng
文件,用Wireshark打开。
追踪下TCP流,这应该是shell交互过程,发现了Python代码,定义了完整的加密解密函数。
在下面看到:
cat flag
mbZoEMrhAO0WWeugNjqNw3U6Tt2C+rwpgpbdWRZgfQI3MAh0sZ9qjnziUKkV90XhAOkIs/OXoYVw5uQDjVvgNA==<mething/welcome/secret/not_important_secret/trash$
那将这个解密下应该就可以得到flag了,但其实直接这样是无法解密的,我们其实很容易看出这个字符串是base64编码,那就先base64解码再解密,得到flag。
Python脚本:
from Crypto import Random
from Crypto.Cipher import AES
import sys
import base64
def decrypt(encrypted, passphrase):
IV = encrypted[:16]
aes = AES.new(passphrase, AES.MODE_CBC, IV)
return aes.decrypt(encrypted[16:])
c = r"mbZoEMrhAO0WWeugNjqNw3U6Tt2C+rwpgpbdWRZgfQI3MAh0sZ9qjnziUKkV90XhAOkIs/OXoYVw5uQDjVvgNA=="
c = base64.b64decode(c)
m = decrypt(c, 'Qq4wdrhhyEWe4qBF')
print(m)
17. 萌萌哒
打开题目链接果然很萌啊~
一堆颜文字,推测颜文字加密?
Ctrl + A
全选,Ctrl + C
复制,打开百度,Ctrl + V
粘贴,一气呵成,结果啥也搜不到。
那就在Google上搜下,第一条进去就是!
https://cat-in-136.github.io/2010/12/aadecode-decode-encoded-as-aaencode.html
复制进去解密下!(Google果然比Baidu好呀)
(后来发现其实AAencode 可以在**chrome浏览器** 的控制台console直接运行,你萌自己试试)得到alert("3Nc0d3.txt")
,原来的网址是http://bxs.cumt.edu.cn/challenge/misc/fxxk/encodes.php
,我们把它改成http://bxs.cumt.edu.cn/challenge/misc/fxxk/3Nc0d3.txt
,得到由一堆字符组成的神奇页面。
+++++ +[->+ +++++ <]>++ +++++ +++.. ...<+ ++[-> ---<] >---- -.<++ +[->+
++<]> +++++ ..... <+++[ ->--- <]>-- ---.< +++[- >+++< ]>+++ ++... ..<++
+[->- --<]> ----- .<+++ [->++ +<]>+ ++++. ....< +++[- >---< ]>--- --.+.
<++++ +[->+ ++++< ]>+++ ++.<+ ++++[ ->--- --<]> ----- ..<++ +[->+ ++<]>
++++. <+++[ ->--- <]>-- ---.< +++++ [->++ +++<] >++++ ++.<+ +++[- >----
<]>-. ...<+ ++[-> ---<] >---- -.<++ +[->+ ++<]> +++++ ..... <+++[ ->---
<]>-- ---.< +++[- >+++< ]>+++ ++... ..<++ +[->- --<]> ----- .<+++ [->++
+<]>+ ++++. ....< +++[- >---< ]>--- --.<+ ++[-> +++<] >++++ +.<++ ++[->
++++< ]>+.< ++++[ ->--- -<]>- .<+++ +[->+ +++<] >+.<+ ++++[ ->--- --<]>
----- .-.<+ ++[-> +++<] >++++ +.<++ ++[-> ++++< ]>+.< ++++[ ->--- -<]>-
...<+ ++[-> ---<] >---- -.<++ +[->+ ++<]> +++++ .<+++ [->-- -<]>- ---.<
+++[- >+++< ]>+++ +...< +++++ [->-- ---<] >---- ----. ---.< +++++ +[->+
+++++ <]>.. ...<+ ++[-> ---<] >---- -.<++ +[->+ ++<]> +++++ ..... <+++[
->--- <]>-- ---.+ .<+++ [->++ +<]>+ +++.< ++++[ ->+++ +<]>+ .<+++ +[->-
---<] >-..< +++[- >---< ]>--- --.<+ ++[-> +++<] >++++ +.... .<+++ [->--
-<]>- ----. +.<++ +++[- >++++ +<]>+ ++++. <++++ +[->- ----< ]>--- --..<
……
这是什么鬼?承认自己的不足,不懂,继续Google下~
然后发现是一个叫Brainfuck的加密。。。wtf
然后找到一个在线解密网站
https://www.splitbrain.org/services/ook
解密后来给的是经过Ook!加密后的数据。
几经尝试发现要先【Brainfuck to Text】后【Ook! to Text】。这题还真不容易呀。。。
18. 魂斗罗
好啦终于可以玩游戏啦~通关即送flag哦!
为了拿到flag,我就勉为其难地玩下游戏吧😀
本来在各种界面都敲下红遍大江南北的上上下下左右左右BA
结果都没用。
后来,找到了个叫金手指的东西。
还好有金手指,然后在这种情况还花了超久才通关。
还是在曾经通关的舍友的悉心指导下Orz
最后flag又不知道是0还是O 是S还是5,后来试了好几次。
还好这题有150分。
19. 传感器2
和传感器1一样,曼彻斯特后每8位逆转,将不一样的找出来:
45psi对应:FFFF FED31F 63 5055 F8
30psi对应:FFFF FED31F 42 5055 D7
(FED37F为ID号)
有两节不一样,不一样的第一节差值为21H,即33,那么可以推测5psi差值为11,即0BH,所以25psi那一节对应的是42H-0BH =37H
。
猜测最后两个十六进制位为校验位,那么应该是某段相加后模上162=256后的结果。
以45psi的情况试试二进制每8位(即十六进制每2位)相加的和mod 100H(256)的结果,发现从ID开始到校验位前刚好符合情况:(懒得写脚本的我用起了系统自带的计算器hhh)
再用30psi的试试:
验证猜想!那我们就可以构造出flag啦~
前几位是FFFF FEB757 37 5055,然后再用计算器算算:
得到flag~
20. 猜猜看
信息隐藏+j开头,善用搜索引擎!发现有个叫JPHS。
附上官网下载链接:http://www.scanwith.com/JPHS_for_Windows_download.htm
用工具打开这张JPG,点击【Seek】,发现要输入两行东西,我们就都输入“flag”吧~
保存后打开来看看,一堆01二进制:
全选复制到Word里,字数统计,能被8整除,那我们就写个脚本,把8个二进制位转成一个字符,Python脚本如下:
string = "" #填入你要转的二进制
res = ""
num = len(string)
for i in range(0,num,8):
res += chr(int(string[i:i+8],2))
print(res)
运行结果:
在运行结果中看到了base64!那我们把后面的用base64解下导出文件就可以了!
Python脚本:
# base64编码转二进制文件
import base64
s = "" #填入你要转的base64编码
s = base64.b64decode(s)
f = open('d:/flag.png','wb')
f.write(s)
f.close()
print(s)
得到一张二维码:
扫一扫得flag。
这题有260分(有点高),喜提Rank前20!!!
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明来自 ComyDream 。
本文链接:http://comydream.github.io/2018/11/18/bxs-misc/