新手小白------攻防世界misc等级3 3-1 writeup

一.题目详情

链接:https://adworld.xctf.org.cn/challenges/list

二.解题思路

1.点击下载附件到桌面上,发现该文件没有后缀名

2.把文件拖进kali里面看看(或者用01editor查看文件头),可以发现该文件是一个压缩包

3.解压文件,发现里面藏了个流量包

第一思路通过看看用binwalk分析文件看看有什么隐藏东西

发现貌似藏了个rar文件,用binwalk -e 分离文件看看

出来了个rar文件,其中藏着我们所要的flag.txt

发现需要密码才能解压缩。

那就得返回去分析流量包,看看有没有藏密码之类的

4.分析流量包

打开wireshark,分析流量包

点击统计--协议分级,可以发现tcp流量包占大多数

通过搜索行输入tcp contains "flag"进行过滤流量包,发现有四条流量包符合

通过追踪流看看,是否有我们所需要的密码

前两条流量包明显是发送flag.rar这个压缩包的,我们直接追踪后面两条看看

发现其中有发送rar压缩包,和查看22文件夹内容,22文件夹有一段类似于base64编码加密的密文

先把这段base64编码保存下来

19aaFYsQQKr+hVX6hl2smAUQ5a767TsULEUebWSajEo=

继续查看,发现后面有一段AES加密

python代码:

# coding:utf-8

__author__ = 'YFP'

from Crypto import Random
from Crypto.Cipher import AES
import sys
import base64

IV = 'QWERTYUIOPASDFGH'
def decrypt(encrypted):
    aes = AES.new(IV, AES.MODE_CBC, IV)
    return aes.decrypt(encrypted)

def encrypt(message):
    length = 16
    count = len(message)
    padding = length - (count % length)
    message = message + '\0' * padding
    aes = AES.new(IV, AES.MODE_CBC, IV)
    return aes.encrypt(message)

str = 'this is a test'
example = encrypt(str)
print(decrypt(example))

分析代码:该代码传进一个字符串进行aes加密解密,而且还调用了base64这个库,在联合我们之前获得的base64编码,猜测应该需要把我们获得的base64编码密文进行base64解密后,在进行aes解密就可以获得解压文件的密码了

开始尝试修改代码:

python:

# coding:utf-8

__author__ = 'YFP'

from Crypto import Random
from Crypto.Cipher import AES
import sys
import base64

IV = 'QWERTYUIOPASDFGH'
def decrypt(encrypted):
    aes = AES.new(IV, AES.MODE_CBC, IV)
    return aes.decrypt(encrypted)

def encrypt(message):
    length = 16
    count = len(message)
    padding = length - (count % length)
    message = message + '\0' * padding
    aes = AES.new(IV, AES.MODE_CBC, IV)
    return aes.encrypt(message)
s='19aaFYsQQKr+hVX6hl2smAUQ5a767TsULEUebWSajEo='
flag=base64.b64decode(s)
print(decrypt(flag))

在pycharm运行,出现报错问题,进行分析发现该代码把字符型和字节型数据进行运算了,再进行修改,统一一下数据类型:

最终运行的python代码:

from Crypto.Cipher import AES
import base64
IV = b'QWERTYUIOPASDFGH'  # IV 应该是字节型数据
def decrypt(encrypted):
    aes = AES.new(IV, AES.MODE_CBC, IV)
    return aes.decrypt(encrypted).rstrip(b'\0')  # 移除填充的 '\0' 字节
def encrypt(message):
    length = 16
    count = len(message)
    padding = length - (count % length)
    message = message + b'\0' * padding  # 将填充的字符串转换为字节型数据
    aes = AES.new(IV, AES.MODE_CBC, IV)
    return aes.encrypt(message)
s = '19aaFYsQQKr+hVX6hl2smAUQ5a767TsULEUebWSajEo='
flag = base64.b64decode(s)
print(decrypt(flag))

运行结果:

获得了解压文件的密码为passwd{No_One_Can_Decrypt_Me}

5.解压文件获取flag值

最终flag值为WDCTF{Seclab_CTF_2017}

三.提交flag值获取分数

  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值