Bugku CTF 杂项(21-29) Writeup

Bugku CTF 杂项(21-29) Writeup


0x21图穷匕见

下载得到一个图片,用winhex打开发现jpg文件尾FF D8后面有大量16进制数据,复制后面的数据,用notepad++中插件convert,hex->ascii转换后是一个个坐标点。
将括号和逗号去掉保存为txt文件。
Bugku CTF 杂项(21-29) Writeup_第1张图片
再利用gnuplot画图(windows),输入:“plot “文件名””,回车得到一张二维码(注意,文件路径的反斜杠要转义)。
不知为啥,自己画出来的扫描不出来。


0x22convert

convert转换的意思,打开是一串二进制,将它转换成十六进制,再把十六进制字符写到HxD中,发现文件头是52 61 72,rar文件头。就把它保存成rar文件,解压得到一张图片,查看属性,里面有一串base64编码,解码得到flag。
这里写图片描述
附上一个脚本:

import binascii

__author__ = 'feifei'
# !/usr/bin/env python
# -*- coding: utf-8 -*-


base = [str(x) for x in range(10)] + [chr(x) for x in range(ord('A'), ord('A') + 6)]


# bin2dec
def bin2dec(string_num):
    return str(int(string_num, 2))


# hex2dec
def hex2dec(string_num):
    return str(int(string_num.upper(), 16))


# dec2bin
def dec2bin(string_num):
    num = int(string_num)
    mid = []
    while True:
        if num == 0: break
        num, rem = divmod(num, 2)
        mid.append(base[rem])

    return ''.join([str(x) for x in mid[::-1]])


# dec2hex
def dec2hex(string_num):
    num = int(string_num)
    mid = []
    while True:
        if num == 0:
            break
        num, rem = divmod(num, 16)
        mid.append(base[rem])

    return ''.join([str(x) for x in mid[::-1]])


# hex2tobin
def hex2bin(string_num):
    return dec2bin(hex2dec(string_num.upper()))


# bin2hex
def bin2hex(string_num):
    return dec2hex(bin2dec(string_num))


if __name__ == '__main__':
    file1 = open('convert.txt')
    s = file1.read()
    hexx = bin2hex(s)
    print hexx
    file2 = open('4.rar', 'wb')
    file2.write(binascii.a2b_hex(hexx))

来自https://blog.csdn.net/yaofeiNO1/article/details/78459569#t3


0x23听首音乐

下载得到一个音频,用Audacity音频分析软件打开,
Bugku CTF 杂项(21-29) Writeup_第2张图片
猜测是摩尔斯电码,长的用“-”表示,短的用“.”表示,中间用空格隔开。
这里写图片描述解密得到答案。


0x24好多数值

打开发现像是坐标一样的东西,并且看到数值255,猜测与RGB有关。
Bugku CTF 杂项(21-29) Writeup_第3张图片
需要用到python的PIL库,知识储备不足。。。
RGB值转化图片(python PIL)https://www.cnblogs.com/webFuckeeeer/p/4536776.html


0x25很普通的数独

下载下来有25张数独图片,网上说按5*5排列是个二维码,但是第1张是二维码右上角,第5张是二维码左下角,第21张是二维码左上角。
位置调好后,将带数字的用0表示,空白处用1表示,再用脚本生成二维码。


0x26好多压缩包

解压后发现有68个压缩包,而且每个压缩包里的txt文件都有密码,这里用到一个知识“CRC32碰撞”https://www.anquanke.com/post/id/86211。
写一个脚本进行暴破(python3)

import zipfile
import string
import binascii

def CrackCrc(crc):
    for i in dic: #迭代的不是值而是键(key)
        for j in dic:
            for k in dic:
                for h in dic:
                    s = i + j + k + h
                    if crc == (binascii.crc32(s.encode())):
                        f.write(s)
                        return

def CrackZip():
        for i in range(0,68):
            file = 'out'+str(i)+'.zip'
            crc = zipfile.ZipFile(file,'r').getinfo('data.txt').CRC
            CrackCrc(crc)

dic = string.ascii_letters + string.digits + '+/='

f = open('out.txt','w')
CrackZip()
print("CRC32碰撞完成")
f.close

运行后得到一个out.txt文件,里面是一串base64,解码得到16进制,
Bugku CTF 杂项(21-29) Writeup_第4张图片
Bugku CTF 杂项(21-29) Writeup_第5张图片
复制到HxD中,发现底部有rar的文件尾C4 3D 7B 00 40 07 00,还存在一个名为CMT即comment的文件,
Bugku CTF 杂项(21-29) Writeup_第6张图片
并且提示“fix the file and get the flag”,说明要修复文件,把rar文件头52 61 72 21 1A 07 00补上,保存成rar文件,用解压软件打开,在注释里找到flag。
Bugku CTF 杂项(21-29) Writeup_第7张图片

0x27一个普通的压缩包(xp0intCTF)

下载解压得到一个flag.txt打开写着flag不在里面。
用HxD打开压缩包,发现文件头PK,修改后缀为zip解压,
Bugku CTF 杂项(21-29) Writeup_第8张图片
里面有一个flag.rar,我并没有遇到他们说的解压打不开的情况。
用HxD修改一下flag.rar
Bugku CTF 杂项(21-29) Writeup_第9张图片
解压有一个png文件,用HxD查看发现是gif图片,更改后缀,用stegsolve工具打开,只能找到二维码的下半部分。
Bugku CTF 杂项(21-29) Writeup_第10张图片
用gifsplitter工具发现这个gif是两帧,并将gif分离,使用stegsolve工具打开这两张图片,然后用PS合并补全,扫一扫。
ps:之前以为把上下两半拼起来再把左下角复制一块补到左上角,这样做一直没扫出来,后来才发现右上角也得补一块/xk。

0x28妹子的陌陌

保存图片,在kali里用binwalk分析,看到有rar文件,foremost分离,解压发现有密码,没想到的是,密码居然在图片上写着。
解压后得到一个momo.txt文件,
Bugku CTF 杂项(21-29) Writeup_第11张图片
解密莫尔斯电码,得到一个在线解密的网址,再解下面的AES,最后打开页面得到一个二维码,使用stegsolve进行反色处理,扫一扫。

0x29就五层你能解开吗

Bugku CTF 杂项(21-29) Writeup_第12张图片
下载压缩包,用解压软件打开;
这里写图片描述
第一层,CRC32碰撞,参考大神的做法,用脚本碰撞,
https://github.com/theonlypwner/crc32
碰撞结果:
Bugku CTF 杂项(21-29) Writeup_第13张图片
Bugku CTF 杂项(21-29) Writeup_第14张图片
Bugku CTF 杂项(21-29) Writeup_第15张图片
找到每一次碰撞产生的看起来有意义的字符:“_CRC32”,“_i5_n0”,“t_s4f3”拼接起来就是压缩包的密码;
第二层:维吉尼亚密码,
Bugku CTF 杂项(21-29) Writeup_第16张图片
这个没弄明白。。。
第三层:sha1碰撞
Bugku CTF 杂项(21-29) Writeup_第17张图片
上脚本:

# -*- coding:utf-8 -*-

import hashlib
import string
import re

payload = string.printable

password = "%s7%s5-%s4%s3?"

sha1 = "619c20c.a4de755.9be9a8b.b7cbfa5.e8b4365."

for a in payload:
    for b in payload:
        for c in payload:
            for d in payload:
                pwd = password %(a,b,c,d)
                pwd = pwd.encode()
                if re.findall(sha1,hashlib.sha1(pwd).hexdigest()):
                    print (pwd)
                    break

第四层:MD5校验
安全客上有篇相关的文章http://bobao.360.cn/news/detail/768.html
程序下载下来,运行得到“Goodbye World :-(”
第五层:RSA
使用openssl导入公钥,查看模数n和指数e,
Bugku CTF 杂项(21-29) Writeup_第18张图片
可以看到指数(Exponent)很大,在RSA中如果n确定,e非常大,会导致d很小,从而出现维纳攻击,使用连分式(Continued fraction)去求得d。
维纳攻击的工具:
https://github.com/pablocelayes/rsa-wiener-attack
修改一下RSAwienerHacker.py
Bugku CTF 杂项(21-29) Writeup_第19张图片
求得d,
再使用rsatool生成私钥文件,得到rsa_private_key.pem,
再用openssl对flag.enx解密
这里有一个比较详细的wp:
https://mp.weixin.qq.com/s/5_gxomJYbTjXlSLhGoMoxg

你可能感兴趣的:(writeup)