MISC刷题日记

[GUET-CTF2019]zips 1

第一个压缩包使用使用:ARCHPR爆破

获得密码为:723456,得到111.zip,然后使用010Editor发现伪加密,进行修改

解压111.zip得到flag.zip和setup.sh,这里使用记事本打开setup.sh

#!/bin/bash
#
zip -e --password=`python -c "print(__import__('time').time())"` flag.zip flag

1.#!/bin/bash: 这是一个Shebang行,指定了该脚本应使用/bin/bash解释器执行。它是Unix/Linux系统中可执行脚本的标准起始行。
2.zip -e --password=: 这部分命令调用了zip程序来创建或更新一个ZIP归档文件,并使用-e选项指明需要对存档中的文件进行加密。
3.python -c "print(__import__('time').time())": 这里嵌入了一个Python命令,用于执行一段Python代码。具体来说,它导入了time模块,并调用其time()函数来获取当前的Unix时间戳。这个时间值将作为接下来操作的密码。
4.flag.zip flag: 表示要创建或更新的ZIP文件名为flag.zip,并且要将当前目录下的一个名为flag的文件添加到此ZIP文件中。由于前面设置了-e和--password,所以在添加过程中会对flag文件进行加密,并使用由Python计算出的时间戳作为加密密码。

这里的时间戳使用不同版本的python结果不一样,看了大佬的WP使用python2,根据时间戳,进行爆破

这里的密码为:1558080832.15

这里成功获取了flag

总结:此题目主要考察

  1. 密码爆破
  2. 伪加密
  3. python代码调试

zip 1

总结:

  1. crc批量爆破脚本使用
  2. Base64编码转文件使用
  3. RAR文件头尾敏感

下载题目解压发现一堆有序压缩包,这里首先想到用弱口令爆破看看怎么,发现爆破不了

这里看了大佬的wp发现是crc爆破,这里使用脚本

#python3
import zipfile
import string
import binascii

def CrackCrc(crc):
	for i in dic:
		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)
		print('\r'+"loading:{:%}".format(float((i+1)/68)),end='')

dic = string.ascii_letters + string.digits + '+/='
f = open('out.txt','w')
print("\nCRC32begin")
CrackZip()
print("CRC32finished")
f.close()

z5BzAAANAAAAAAAAAKo+egCAIwBJAAAAVAAAAAKGNKv+a2MdSR0zAwABAAAAQ01UCRUUy91BT5UkSNPoj5hFEVFBRvefHSBCfG0ruGnKnygsMyj8SBaZHxsYHY84LEZ24cXtZ01y3k1K1YJ0vpK9HwqUzb6u9z8igEr3dCCQLQAdAAAAHQAAAAJi0efVT2MdSR0wCAAgAAAAZmxhZy50eHQAsDRpZmZpeCB0aGUgZmlsZSBhbmQgZ2V0IHRoZSBmbGFnxD17AEAHAA==

获得Base编码,这里进行解码发现flag但是看不全,可能是Base转文件,这里是直接转rar压缩包

发现是rar,rar文件尾是00 40 07 00

那就把文件头给加上去,文件头是52 61 72 21 1A 07 00

最后解码获取flag

[UTCTF2020]file header 1

总结:

  1. png文件文件头尾敏感

文件是图片下载不了,这里只能链接另存下载下来,下载后发现是png后缀但是打不开,这里直接上010Editor,发现缺少png文件头,这应该是比较简单的题目,但是解出来的人怎么这么少,不理解

PNG (png) 文件头:89 50 4E 47 文件尾:AE 42 60 82

修改文件头后,直接查看图片即可获取flag

[XMAN2018排位赛]通行证 1

总结:

  1. Base解码
  2. 栅栏编码熟悉
  3. 凯撒偏移

这题目要是不看wp真的有难度,不是一般人能想出来的

首先下载文件时给了一个文档Base64→栅栏7位加密→Rot13解密(凯撒偏移13位)

a2FuYmJyZ2doamx7emJfX19ffXZ0bGFsbg==

这里先使用Base64解码看看怎么个事情

再进行栅栏7加密,这里是加密不是解密真的好无语啊,这头发不够用了

最后Rot13解密

获得flag并修改头部:flag{oyay_now_you_get_it}

当然这里应该可以使用凯撒脚本爆破,这里我没有尝试,明天我再试试吧

# 编   者:玥轩
# 开发时间:2023/5/17 23:06

def decrypt(ciphertext, shift):
    """移位解密函数"""
    plaintext = ''
    for char in ciphertext:
        if char.isalpha(): # 如果是字母,进行移位解密
            if char.isupper():
                plaintext += chr((ord(char) - shift - 65) % 26 + 65) # 大写字母移位解密
            else:
                plaintext += chr((ord(char) - shift - 97) % 26 + 97) # 小写字母移位解密
        else: # 如果不是字母,直接输出
            plaintext += char
    return plaintext

# 加密密文和移位数
ciphertext = 'kzna{blnl_abj_lbh_trg_vg}'
shift = 3
ciphertext = ciphertext.lower()
# 小写易于观察
# 枚举所有可能的移位数,输出所有解密结果
for i in range(26):
    plaintext = decrypt(ciphertext, i)
    print("%d %s"% (i, plaintext))

[WUSTCTF2020]girlfriend 1

总结:

  1. Audacity工具下载及使用
  2. DTMF拨音号识别,使用工具:dtmf2num.exe
  3. 9键识别字母

题目一顿解压最后得到.wav后缀的文件

这里我使用Audacity打开

这里我迷茫了,像摩斯密码但不是摩斯密码,看了佬的WP后发现是DTMF拨音号识别

这里附上DTMF拨音号识别下载网址,下载后进入命令行

输入命令dtmf2num.exe  girlfriend.exe

即可发现9键按数字顺序

 999*666*88*2*777*33*6*999*4*4444*777*555*333*777*444*33*66*3*7777

手机键盘密码,就跟小时候qq空间流行的用九键按数字顺序按多少下得到一句话类似

999     --->   y
666     --->   o
88      --->   u
2       --->   a
777     --->   r
33      --->   e
6       --->   m
999     --->   y
4       --->   g
4444    --->   i
777     --->   r
555     --->   l
333     --->   f
777     --->   r
444     --->   i
33      --->   e
66      --->   n
3       --->   d
7777    --->   s
 
youaremygirlfriends

获取flag{youaremygirlfriends}

[DDCTF2018](╯°□°)╯︵ ┻━┻ 1

总结:

  1. 16进制与10进制与ASCII码之间的转换

这题目挺有意思的,上来就是一段编码,仔细一看会发现最大字符是f,严重怀疑是16进制

这里直接使用大佬的脚本

string = "d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9b2b2e1e2b9b9b7b4e1b4b7e3e4b3b2b2e3e6b4b3e2b5b0b6b1b0e6e1e5e1b5fd"
sliced_list = [string[i:i+2] for i in range(0, len(string), 2)]
print(sliced_list)   ##每两位切片
 
decimal_list = [int(hex_num, 16) for hex_num in sliced_list]
print(decimal_list)   ##将十六进制转换为十进制
 
result_list = [num - 128 for num in decimal_list]
print(result_list)    ##转换后的十进制数都大于128,将列表内的每个数都减128
 
ascii_list = [chr(decimal) for decimal in result_list]
print(ascii_list)     ##将十进制数转换为ASCII码
 
merged_string = ''.join([elem for sublist in ascii_list for elem in sublist])
print(merged_string)    ##最终合并为一个字符串

这里是16进制转10进制后再转ASCII码

最后flag

flag{922ab9974a47cd322cf43b50610faea5}

[MRCTF2020]千层套路 1

获得压缩包后尝试解压发现需要密码,这里以为是伪加密上010Editor看看,发现是真加密,使用ARCHPR进行弱密码爆破,

发现密码就是文件名,到了写脚本环节我是一点不会,搬大佬的脚本吧

import os
import zipfile
 
zip_name = "0976.zip"  # 要解压缩的zip文件名
password = "0976"  # zip文件的密码
zips_path = "./zips"  # 解压缩后的zip文件存放路径
flag_path = "./flag"  # 解压缩出的非zip文件存放路径
 
while True:
    zip = zipfile.ZipFile(zip_name, "r")  # 使用zipfile.ZipFile打开zip文件
    file_name = zip.namelist()[0]  # 获取zip文件中的文件名列表的第一个文件名
    suffix_name = zip.namelist()[0].split(".")[1]  # 获取文件名的后缀名
    
    if suffix_name == "zip":  # 如果后缀名是"zip"
        zip.extractall(zips_path, pwd=password.encode())  # 解压缩zip文件到指定路径,并指定密码
    else:
        zip.extractall(flag_path)  # 解压缩非zip文件到指定路径
        exit()  # 终止程序
    
    zip_name = os.path.join(zips_path, file_name)  # 更新zip_name为解压缩后的zip文件路径
    password = zip.namelist()[0].split(".")[0]  # 更新password为解压缩后的zip文件名去除后缀名后的部分

脚本运行完毕后可以看见两个文件夹,在qr.txt文档中可以一堆坐标

接下来就是坐标转图片啦,代码如下:

from PIL import Image

x = y = 200
img = Image.new("RGB",(x,y))
file = open('qr.txt','r')

for width in range(0,x):
    for height in range(0,y):
        line = file.readline()
        rgb = line.replace('(','').replace(')','').split(',')
        img.putpixel((width,height),(int(rgb[0]),int(rgb[1]),int(rgb[2])))
img.save('flag.jpg')


跑完后得到二维码照片,然后使用QR_Research识别

获取flag

flag{ta01uyout1nreet1n0usandtimes}

百里挑一 1

解压后使用wireshark打开,根据题目提示图片导出所有的图片

把导出的文件包托到kali使用exiftool读取信息

这里使用命令

exiftool *|grep flag -A 10 -B 10

exiftool *:

    这里的*表示当前目录下的所有文件。这个命令会对当前目录下的所有文件进行元数据提取。

|grep flag -A 10 -B 10:

    |是管道符号,将exiftool的输出传递给grep命令。
    grep flag表示在输入中搜索包含 “flag” 的行。
    -A 10表示在匹配到的行之后显示接下来的 10 行。
    -B 10表示在匹配到的行之前显示前面的 10 行。

这里知道flag的前半段:flag{ae58d0408e26e8f

现在去wireshrak

输入

tcp.stream eq 114

选中第一个右键追踪TCP

这里可以找到另一半flag(这里也可以搜索exif,但是我不会,搜索没有反应)

我搞明白了,这里的查找分为三组查找,每次需要区分好,

有分组列表,分组详情,分组字节流,从这之中进行查找

成功获取flag

flag{ae58d0408e26e8f26a3c0589d23edeec}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值