【CUMT-BXS】MISC部分题解

Author Avatar
source. 11月 18, 2018
  • 在其它设备中阅读本文章

Safe or Security?

1. LSB

题目就是一张图片。

  1. 首先将这张图片另存为,右键-属性,在详细信息中并没有发现什么东西。
  2. 使用工具WinHex打开,也并不能发现什么端倪。
  3. 其实题目已经提示了:LSB!

在StegSolve中打开图片,【Analyse】-【Data Extract】,Red、Green、Blue都勾选0,点击【Preview】。如图所示:

img

看到第一行“.PNG”,我们点击【Save Bin(存为二进制文件)】,把它存在桌面,就叫它2333.png吧!


惊奇发现是一张QR Code,扫一扫即可得到flag。

2. 爱因斯坦

题目就是这一张图片:

img

  1. 首先将这张图片另存为,右键-属性,在详细信息中发现备注内容是this_is_not_password,不知道有没有用,先记下来。
  2. 用StegSolve和WinHex打开,什么都发现不了。
  3. 将此图片复制到Kali Linux虚拟机桌面上。
  4. 用终端打开桌面,输入命令binwalk misc2.jpg发现这张照片还藏着一个zip压缩包,zip下还有个叫flag.txt的文件(惊不惊喜,意不意外),找到线索了!那就朝着此方向前行!

img

  1. 输入命令foremost misc2.jpg得到一个output文件夹,在这个文件夹下有个zip文件夹,打开压缩包,我们双击flag.txt试图打开它,正当我们将为得到flag而欢呼时,弹出这个窗口,情况不妙。

img

  1. 我们左思右想、上思下想,终于,嘴角微微上扬,将第1步发现的this_is_not_password输入,敲下Enter键,得到了flag!深藏功与名。

3. 视而不见

题目:

img

隐隐约约其实看出了什么,用StegSolve打开它,【Analyse】-【Stereogram Solver】,然后疯狂按住【←】(键盘上方向键【→】也可以),直到神龙(flag)出现:

img

4. 鲨鱼的套路

下载下来是个Wireshark的包,打开查看。

在上面找个TCP的包,追踪下TCP流,得到以下:

img

UEsDBBQAAAgIANeFfErNFL6kGwAAABsAAAAcAAAAaGludF9zb21lIF90aGluZ19pc19mYWtlLnR4dEvLSUyvTs5IzUuPL87IjC9JzI/PKQUyU/NqAVBLAQI/ABQACQAIANeFfErNFL6kGwAAABsAAAAcACQAAAAAAAAAIAAAAAAAAABoaW50X3NvbWUgX3RoaW5nX2lzX2Zha2UudHh0CgAgAAAAAAABABgAu7Ux1J+n0gGhDeAnl6fSAaEN4CeXp9IBUEsFBgAAAAABAAEAbgAAAFUAAAAAAA==看起来像base64编码。

在线解下看看。

img

PK开头,应该是个zip文件。况且很多字符无法显示,那我们用Python写个脚本吧~

# base64编码转二进制文件
import base64

s = "" #这里填写刚刚那一串

s = base64.b64decode(s)
f = open('d:/flag.zip','wb')
f.write(s)
f.close()
print(s)

代码的意思是把sbase64解码后以二进制文件写入d:/flag.zip,运行一下。

img

居然有密码,可能是伪加密。

对于伪加密有以下几种方法:

  1. 在Mac OS及部分Linux(如Kali)系统中,可以直接打开伪加密的zip压缩包
  2. 测伪加密的ZipCenOp.jar,解密后如果能成功打开zip包,则是伪加密,否则说明思路错误
  3. 16进制编辑器改回加密标记位

所以,我们可以直接拖进Kali Linux解压,就可以得到flag。

或者拖到010 editor中,把09改为00保存就可以了。

img

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)

img

  1. 首先将这张图片另存为,发现它竟然是一张gif,右键-属性,在详细信息中并没有发现什么。
  2. 用Photoshop打开图片,发现了二维码图层:

img

  1. 三个识别点(左上、右上、左下)被遮住了,怎么办呢?当然是先从被遮面积最小的下手:右上,使用快速选择工具把右上角的本该为黑色的被doge遮住一部分的小方块选出来,右键-【填充】,【内容】选择【黑色】。

img

  1. 右上角OK了,根据积累的知识,这三个识别点(左上、右上、左下)是一模一样的,则把右上角的(连同外面的方框)选择出来,然后Ctrl+J两次复制两次图层,分别移到左上和左下,大功告成。

img

  1. 扫一扫即可得到flag:

flag{hi_doge_i_am_er_ha}

PS:

  1. 在移动过程中,可按住Shift键实现水平(or竖直or45°)移动;
  2. 觉得自己对不准,可以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. 我就想试试这个名字到底能够起多长

题目:

img

蛮试试LSB的思路,用StegSolve中打开图片,【Analyse】-【Data Extract】,Red、Green、Blue都勾选0,点击【Preview】。看到开头是这样的:

img

PK是啥?baidu or google一下PK开头的文件,zip!原因:Phil Katz这个人发明了zip。

点击【Save Bin(存为二进制文件)】,把它存在桌面,就叫它2333.zip吧!

解压得到一个无后缀文件“1”,直接用WinHex打开,搜索“ctf”或“flag”得出结果。

11. 你的石锅拌饭

题目文字有两种,正常的和倾斜的。

题目中提到“培根”,联想到培根密码。

题目说了,密文是大写,那我们猜测正常的字为A,倾斜的字为B,去掉所有标点,得到密文:

img

在线工具解密下,flag出来了。

12. shark

下载下来是一个没有后缀的文件,题目是“shark”,所以把它的后缀改成Wireshark的后缀.pcapng打开。

这是一个数据分析题,看到了很多FTP协议的,出题者可能想让我们从中提取文件,文件中有flag。

追踪几个TCP流。

TCP流0:

img

看到FTP登陆的密码是2016CUMTCTF950123!@#,先记录下来,一会儿可能有用。

TCP流1:

img

它告诉我们有个叫flag.zip的文件,文件的数据应该在后面的流里。

TCP流2:

img

还是没有我们想要的文件数据。

TCP流3:

img

看到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模板。保存下~

终于找到了,可是,唉~留下了桑心的泪水。

img

哦,等等!头部高度!可能高度被坏坏的出题者给改了!

先右键看下详细信息里的宽高,根据已有知识,一张二维码应该是一个正方形,即长宽相等。

把高度“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. 大家来找茬

题目:

img

放到Kali Linux中binwalk一下,发现隐藏了两张PNG,foremost提取出来。

img

img

在第二张图片隐隐约约看到了二维码的影子。

打开StegSolve工具,【Analyze】-【Image Combiner】一下,按键盘【→】切换,直到模式为【SUB】,看到一张清晰的二维码。

img

但是这张图没法直接扫出来,原因是主体为白色,放到PS中【反相】一下,扫一扫,得到flag。

img

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)

img

再用30psi的试试:

img

验证猜想!那我们就可以构造出flag啦~

前几位是FFFF FEB757 37 5055,然后再用计算器算算:

img

得到flag~

20. 猜猜看

信息隐藏+j开头,善用搜索引擎!发现有个叫JPHS。

附上官网下载链接:http://www.scanwith.com/JPHS_for_Windows_download.htm

用工具打开这张JPG,点击【Seek】,发现要输入两行东西,我们就都输入“flag”吧~

img

保存后打开来看看,一堆01二进制:

img

全选复制到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)

运行结果:

img

在运行结果中看到了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)

得到一张二维码:

img

扫一扫得flag。

这题有260分(有点高),喜提Rank前20!!!

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明来自 ComyDream
本文链接:http://comydream.github.io/2018/11/18/bxs-misc/