【CTF解题】BugKu - Misc篇
2022-10-24 / 0 评论 / 44 阅读 / 3 点赞

【CTF解题】BugKu - Misc篇

发光的神
2022-10-24 / 0 评论 / 44 阅读 / 正在检测是否收录...

简介

首先什么是隐写?其实就是把一些东西给你隐藏到一个地方,让你去通过技术的手段给还原,隐藏的东西可能是恶意代码,压缩包、图片、文字、等等。

图片隐写解题

la4sx6jh.png
1.这道题在图片里隐写了一窜flag值,好让我们先去了解下图片的内部结构。

la4zdgju.png

la4tcc2p.png

3.以上是图片的基本结构,可以看出里面也有宽和高,一般来说这里也是突破点。

la4ts5z8.png
3.这里我用Winhex,Windows用习惯了Kali可以用binwalk,然后打开看下里面的字节哪里有异常,发现这里的宽和高不相等,还原下与宽相等就能看到隐写的内容了。

easy_nbt解题

l9o98c4i.png

1.一看是Misc题给我想到隐写和二维码,给自己张记性养成良好的习惯。

l9o9bp15.png

2.下载下来是一个压缩包,解压下来里面有这些文件,这个咋看起啦有点眼熟好像是我的世界存档文件,先不管了试试搜索flag看看有没有。

l9o9eh3l.png

3.什么也没有,进文件夹里只有几个文件都看了下,都没有flag好了试着换种方法了。

l9o9lh5t.png

4.判断下文件是不是其它文件格式,通过010 Editor找到 level.dat 发现是一个压缩包。

l9o9p737.png

5.改下格式发现里面有一个文件,好了用010 Editor打开看下。

l9ocio5h.png

6.进行搜索找到了,flag就在这里面。

flag{Do_u_kN0w_nbt?}

1和0的故事解题

l9o7lzn0.png

1.这道题挺有意思的,0和1的二进制题目先下载下来看看。

l9o7o06y.png

2.题目是一个文本文档,里面有一堆0和1的二进制数,注意下一看到Misc的题目,就给我想到隐写和二维码这类,这里我分析了下0和1可以代表什么东西,这里不卖关子了,可以想0是白色1是黑色组合起来就可以出一个二维码。

0000000001110010000000000|
0000000000011110100000000|
0000000001110001000000000|
0000000010111100000000000|
0000000010101010000000000|
0000000001100010100000000|
0000000010101010100000000|
0000000001000001100000000|
1100011101110110100011000|
0001000010110010010010100|
0100111101000011101110011|
0011110100101011001001001|
1000001001100001001101000|
1111000111111011100101000|
1011011111001101111110111|
1000110110010010101101100|
1000111100111111111110111|
0000000010110001100010100|
0000000010010100101010001|
0000000010101010100011001|
0000000000100111111110010|
0000000000011001011110111|
0000000001001100100100001|
0000000011000011011011001|
0000000011010000101110101|

3.可以用文档或者什么自己拼接起来就行,这里我就直接写代码了,注意使用我的代码必须从这里复制,因为我加了个" | "符号,作为换行分割,当然自己加也是可以的。

# cmd显示
import os

strjoin = ""
os.system("cls & color f0")
with open("1和0的故事.txt","r") as f:
   for i in f.readlines():
        for s in i.strip():
            if s == "0":
                strjoin += "  "
            if s == "1":
                strjoin += "■"
            if s == "|":
                strjoin += "\n"
print(strjoin)

l9o7z9k1.png

# GUI显示
import pygame

pygame.init()
surface = pygame.display.set_mode((800, 700))
pygame.display.set_caption("actdream")
surface.fill((255, 255, 255))
pos = [100,100,20,20]

with open("1和0的故事.txt","r") as f:
   for i in f.readlines():
        for s in i.strip():
            if s == "0":
                pos[0] += pos[2]
                pygame.draw.rect(surface,(255,255,255),pos,0)
            if s == "1":
                pos[0] += pos[2]
                pygame.draw.rect(surface,(0,0,0),pos,0)
            if s == "|":
                pos[0] = 100
                pos[1] += pos[2]
                pos[0] += pos[2]

pygame.display.update()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()

l9o81rxs.png

4.自己补全下那三个空隙,用微信扫码扫下就出flag了。

flag{QR_c0de_1s_1nterest1n9}

眼见非实解题

l9mvktbb.png

1.一看到Misc题目就给我想到隐写,GIF图片隐写、PDF隐写、流量隐写、二维码复原,这类的东西。

l9mvppw4.png

2.题目下载下来是个word文档,先打开看一下。

l9mvt1vs.png

3.打开后有好几页全是乱码,在这里死磕就死解了,正确的办法是先判断他到底是不是个,word文档一般隐写的题目,就喜欢在文件的二进制里修改,或者是文件后缀。

l9mvyvbd.png

4.这里我用010 Editor工具查看下,一看这头部就有问题,可以看到有PK是个压缩包的头,这就是zip的压缩包。

l9mw1cea.png

5.我准备了两张图片和两个压缩包,都试下为了区分它们的不同,52 61 72 这个是Rar的ASCII码可以做特征,每个文件都有不同的可自己尝试。

l9mwdcbx.png

6.知道是压缩包了,直接改后缀看看里面,里面有文件我解压出来了。

l9mwfrwc.png

l9mwhogx.png

7.这里我直接搜索flag,找到 document.xml文件 flag就在这里面。

flag{F1@g}
// Golang code

package main

import (
    "fmt"
    "log"
    "os"
    "strings"
)

func getinfo() {
    for {
        fmt.Printf("%s", "请拖入文件:")
        var path string
        fmt.Scan(&path)
        trans := strings.Replace(path, `\`, `\\`, -1)
        file, err := os.Open(trans) // For read access.
        if err != nil {
            log.Fatal(err)
        }
        data := make([]byte, 16)

        count, err := file.Read(data)
        if err != nil {
            log.Fatal(err)
        }
        array := map[string]string{
            "JFIF": "jpeg图片", "PK": "zip压缩包",
            "Rar": "rar压缩包", "GIF89a": "gif动态图",
            "MZ": "exe程序", "Exif": "jpg图片",
        }
        for v, k := range array {
            if strings.Contains(string(data[:count][0:16]), v) {
                fmt.Printf("%s\n", k)
            }
        }
    }
}
func main() {
    getinfo()
}

8.知道原理了写了一个脚本,来判断是什么文件。

l9nkkiqe.png

9.这里我把后缀改成了png,其实是一个压缩包。

3

评论 (0)

取消
0:00