Bugku CTF 杂项(21-29) Writeup

Bugku CTF 杂项(21-29) Writeup


0x21图穷匕见

下载得到一个图片,用winhex打开发现jpg文件尾FF D8后面有大量16进制数据,复制后面的数据,用notepad++中插件convert,hex->ascii转换后是一个个坐标点。
将括号和逗号去掉保存为txt文件。
这里写图片描述
再利用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音频分析软件打开,
这里写图片描述
猜测是摩尔斯电码,长的用“-”表示,短的用“.”表示,中间用空格隔开。
这里写图片描述解密得到答案。


0x24好多数值

打开发现像是坐标一样的东西,并且看到数值255,猜测与RGB有关。
这里写图片描述
需要用到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进制,
这里写图片描述
这里写图片描述
复制到HxD中,发现底部有rar的文件尾C4 3D 7B 00 40 07 00,还存在一个名为CMT即comment的文件,
这里写图片描述
并且提示“fix the file and get the flag”,说明要修复文件,把rar文件头52 61 72 21 1A 07 00补上,保存成rar文件,用解压软件打开,在注释里找到flag。
这里写图片描述

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

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

0x28妹子的陌陌

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

0x29就五层你能解开吗

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

# -*- 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,
这里写图片描述
可以看到指数(Exponent)很大,在RSA中如果n确定,e非常大,会导致d很小,从而出现维纳攻击,使用连分式(Continued fraction)去求得d。
维纳攻击的工具:
https://github.com/pablocelayes/rsa-wiener-attack
修改一下RSAwienerHacker.py
这里写图片描述
求得d,
再使用rsatool生成私钥文件,得到rsa_private_key.pem,
再用openssl对flag.enx解密
这里有一个比较详细的wp:
https://mp.weixin.qq.com/s/5_gxomJYbTjXlSLhGoMoxg

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值