BUUCTF MISC

BUUCTF MISC

[GXYCTF2019]gakki

  1. 下载附件拿到一张图片,使用binwalk进行分离,得到一个压缩包。
    在这里插入图片描述
  2. 使用ARCPHR压缩包爆破工具进行爆破,成功拿到密码。
    在这里插入图片描述
  3. 在压缩包中拿到flag.txt文件,发现大量乱序字符,使用Python脚本工具进行统计。
    在这里插入图片描述
# -*- coding:utf-8 -*-
#Author: mochu7
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()_+- =\\{\\}[]"
strings = open('./flag.txt').read()

result = {}
for i in alphabet:
	counts = strings.count(i)
	i = '{0}'.format(i)
	result[i] = counts

res = sorted(result.items(),key=lambda item:item[1],reverse=True)
for data in res:
	print(data)

for i in res:
	flag = str(i[0])
	print(flag[0],end="")

[ACTF新生赛2020]base64隐写

1.下载附件,得到一个文本文件,里面全是base64加密的数据。
在这里插入图片描述
2. 编写Python脚本进行解密。

def get_base64_diff_value(s1, s2):
    base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
    res = 0
    for i in xrange(len(s2)):
        if s1[i] != s2[i]:
            return abs(base64chars.index(s1[i]) - base64chars.index(s2[i]))
    return res


def solve_stego():
    with open('ComeOn!.txt', 'rb') as f:
        file_lines = f.readlines()
        bin_str = ''
        for line in file_lines:
            steg_line = line.replace('\n', '')
            norm_line = line.replace('\n', '').decode('base64').encode('base64').replace('\n', '')
            diff = get_base64_diff_value(steg_line, norm_line)
            print diff
            pads_num = steg_line.count('=')
            if diff:
                bin_str += bin(diff)[2:].zfill(pads_num * 2)
            else:
                bin_str += '0' * pads_num * 2
            print goflag(bin_str)


def goflag(bin_str):
    res_str = ''
    for i in xrange(0, len(bin_str), 8):
        res_str += chr(int(bin_str[i:i + 8], 2))
    return res_str


if __name__ == '__main__':
    solve_stego()

[WUSTCTF2020]find_me

下载发现是一张图片,查看图片的属性,发现一串看不懂的符号,根据以前的经验,判断是盲文,在线网址解密成功拿到flag。
在这里插入图片描述
https://www.qqxiuzi.cn/bianma/wenbenjiami.php?s=mangwen

[ACTF新生赛2020]明文攻击

  1. 下载附件,得到一个压缩包,压缩包嵌套这另一个压缩包,解压后,得到一张图片和一个res.zip压缩包,但是要解压密码。
  2. 使用解压软件阅览了一下里面的文件,发现有个两个文件,分别为flag.txt与secret.txt。题目说了是明文攻击,我们先从图面入手呗。
    在这里插入图片描述
  3. 使用winhex打开图片,在文件尾部发现flag.txt文件字样,于是开心的使用binwalk命令进行提取,但是发现咋么也提取不了,傻了!为啥?
    在这里插入图片描述
  4. 通过仔细查看文件的hex值,发现那个文件头并不完整。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
  5. 然后将图片文件的后缀名改为zip,解压,成功拿到flag.txt文件,但是那个并不是真正的flag。再结合题目说的明文攻击,我们将拿到flag.txt文件压缩为zip格式,使用ARCHPR爆破攻击进行攻击。

简单加密

  1. 下载附件得到一段密文和加密脚本。
==jEgWTn8kJrRyRFBuKJLuzH1LmDTAzs
function encode( $str = '' ){
    $strrev = strrev( $str );
    $string = '';
    for( $i=0; $i < strlen($strrev);$i++ ){
        $char = substr( $strrev, $i, 1 );
        $ordChar = ord( $char ) + 1;
        $char = chr( $ordChar );
        $string = $string.$char;
    }
 
    $string = base64_encode( $string );
    $string = strrev( $string );
    $string = str_rot13( $string );
    return $string;
}
  1. 其实这个加密脚本挺简单的,但是由于本人基础薄弱,还是花了好几个小时才写出来,但是想起来还是值得。
function decode( $str = ''){
        $strrev = strrev($str);
        $strrev = str_rot13($strrev);
        $strrev = base64_decode($strrev);
        $string = '';
        for ( $i=0; $i < strlen($strrev);$i++ ){
            $char = substr( $strrev, $i, 1 );
            $ordChar = ord( $char ) - 1;
            $char = chr( $ordChar );
            $string = $string.$char;
        }
        return $string;
    }

在这里插入图片描述使用python的中切面倒置字符串即可:

>>>string = '}bEB54QgWXwMGHCxk{galF'
>>> print(string[::-1]);
Flag{kxCHGMwXWgQ45BEb}

黑客帝国

  1. 下载附件,得到一个文件,使用winhex查看发现是zip文件,解压得到一个文本文件,文件的内容全是十六进制的,且文件的开头为52617221,初步判断这是一个rar文件,使用python将十六进制以二进制形式写入另一个文件。
import binascii

content = ''
with open('resource.txt') as file_obj:
    content = file_obj.read()

out=open('res.txt','wb')
out.write(binascii.unhexlify(content))
out.close()
  1. 将拿到的文件再次解压,但是需要密码,使用爆破工具进行掩码爆破,成功拿到密码 3690。
  2. 打开文件的时候,发现是一张无法正常显示的png图片,开始使用winhex查看的时候也没有啥发现,看了大佬的wp才知道原来这个是一个jpg文件,jpg图片的文件头被换成了png的文件头导致无法正常显示。
    在这里插入图片描述在这里插入图片描述改好之后,图片就能正常显示了,成功拿到了flag。
    在这里插入图片描述

[MRCTF2020]你能看懂音符

  1. 下载附件,得到一个rar压缩包,但是不能正常打开,使用winhex查看才知道原来文件头的前两个字节被调换了,缓过来即可。
    在这里插入图片描述
  2. 成功拿到一个word文件,打开发现什么都没有,使用binwalk扫描一波,发现里面影写了zip文件,直接将word文件后缀名改成zip进行提取。
    在这里插入图片描述
  3. 使用记事本打开document.xml文件,在里面找到了音符使用在线网站解密成功拿到flag!
    在这里插入图片描述在这里插入图片描述

[GUET-CTF2019]KO

Ook!在线解密

[MRCTF2020]ezmisc

  1. 下载附件得到一张图片,刚开始打开图片的时候就发现图片的像素有点不对500x319。想着图片的高度是不是被篡改过。
    在这里插入图片描述
  2. 使用winhex打开,修改图片的高,注意点,既然图片的宽度是500,那我们就把高度也改为500,500对应的十六进制编码为1f4
    在这里插入图片描述在这里插入图片描述保存,在图片的底部成功显示出flag。
    在这里插入图片描述

[HBNIS2018]caesar

  1. 下载附件得到一个文本文件。
    在这里插入图片描述

  2. 当时一点头绪都没有,看了大佬的博客才知道,直接使用脚本进行解密。

def change(c, i):
    num = ord(c)
    if (num >= 33 and num <= 126):
        num = 33 + (num + i - 33) % (94)  # 126-33=93
    return chr(num)


def kaisa_jiAmi(string, i):
    string_new = ''
    for s in string:
        string_new += change(s, i)
    print(string_new)
    return string_new


# 本题有种暴力解密感觉
def kaisa_jiEmi(string):
    for i in range(0, 94):
        print('第' + str(i + 1) + '种可能:', end='  ')
        # 区别在于 string 是该对象原本就是字符串类型, 而 str()则是将该对象转换成字符串类型。
        kaisa_jiAmi(string, i)


# 你要知道input输入的数据类型都是string
def main():
    print('请输入操作,注意不是平常26种:')
    choice = input('1:恺撒加密,2:凯撒穷举解密.请输入1或2:')
    if choice == '1':
        string = input('请输入需要加密字符串: ')
        num = int(input('请输入需要加密的KEY: '))
        kaisa_jiAmi(string, num)
    elif choice == '2':
        string = input('请输入需要解密字符串: ')
        kaisa_jiEmi(string)
    else:
        print('输入错误,请重试')
        main()


if __name__ == '__main__':
    main()

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值