当前位置: 首页 > news >正文

XCTF:3-1[WriteUP]

从题目中获取文件

使用file命令查看文件类型

修改后缀为.rar后进行解压缩


再次使用file命令查询该文件的类型

再次修改后缀为.pcap或者.pcapng

使用wireshark打开,直接搜索flag字样

 在多个数据包里发现了flag.rar、flag.txt等文件

尝试使用http导出文件


有一个flag.rar文件

 

但这是一个加密了的rar文件

里面虽然有flag.txt,但是我们没有密码


找到之前搜索flag,找到flag.txt字样的数据包

进行TCP Stream的追踪

仔细分析该TCP流,发现了一串不知名的base64代码

19aaFYsQQKr+hVX6hl2smAUQ5a767TsULEUebWSajEo=

继续往下翻

 

发现了这段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))

最后还有一段:祝你成功(谢谢你啊,笑)


结合所得信息解题

先对开头从TCP流中获取到的base64代码尝试进行解码

很显然,直接进行解码并不能得到任何有效信息

那问题就应该出在python代码上了

对获取得到的python代码,进行修改,使其能正常运行:

# coding:utf-8from Crypto import Random
from Crypto.Cipher import AES
import sys
import base64IV = b'QWERTYUIOPASDFGH'def decrypt(encrypted):aes = AES.new(IV, AES.MODE_CBC, IV)return aes.decrypt(encrypted)def encrypt(message):length = 16count = len(message)padding = length - (count % length)message = message + b'\0' * paddingaes = AES.new(IV, AES.MODE_CBC, IV)return aes.encrypt(message)str = b'this is a test'
example = encrypt(str)
print(decrypt(example))

代码审计

以上python程序,是一个简单的加解密程序

原理我们不需要清楚,我们只要使用就可以了

接下来尝试把我们上面拿到的base64代码放进程序里进行解密

所以程序里只留下必要的解密代码即可

# coding:utf-8from Crypto import Random
from Crypto.Cipher import AES
import sys
import base64IV = b'QWERTYUIOPASDFGH'def decrypt(encrypted):aes = AES.new(IV, AES.MODE_CBC, IV)return aes.decrypt(encrypted)str = b'19aaFYsQQKr+hVX6hl2smAUQ5a767TsULEUebWSajEo='flag = base64.b64decode(str)print(decrypt(flag))

运行结果:


 回到开头拿到的flag.rar文件,使用密码对其进行解压

获得flag:

 


WDCTF{Seclab_CTF_2017}

http://www.lryc.cn/news/295209.html

相关文章:

  • 常用ES技巧二
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Rating组件
  • Python进阶--爬取下载人生格言(基于格言网的Python3爬虫)
  • FastAdmin
  • Java设计模式大全:23种常见的设计模式详解(一)
  • SaperaCamExpert(相机专家)中文使用指南
  • ES鉴权设计以及相关探讨
  • 为什么SpringBoot胖Jar不好
  • Java学习笔记2024/2/6
  • 2024 高级前端面试题之 前端安全模块 「精选篇」
  • SpringBoot Security安全认证框架初始化流程认证流程之源码分析
  • 2024美赛预测算法 | 回归预测 | Matlab基于RIME-LSSVM霜冰算法优化最小二乘支持向量机的数据多输入单输出回归预测
  • test1
  • 远程主机可能不符合 glibc 和 libstdc++ Vs Code 服务器的先决条件
  • 备战蓝桥杯---数据结构与STL应用(进阶2)
  • SpringBoot:多环境配置
  • input框中添加一个 X(关闭/清空按钮)
  • Unity3d Shader篇(三)— 片元半兰伯特着色器解析
  • 【vue3学习P5-P10】vue3语法;vue响应式实现
  • 相机图像质量研究(3)图像质量测试介绍
  • PaddleDetection学习5——使用Paddle-Lite在 Android 上实现实时的人脸检测(C++)
  • 全套电气自动化样例图纸分享,使用SuperWorks自动化版免费设计软件!
  • 带你实现用自己域名打开Tomcat
  • python coding with ChatGPT 打卡第18天| 二叉树:从中序与后序遍历序列构造二叉树、最大二叉树
  • java基础训练题(1)
  • 【自定义序列化器】⭐️通过继承JsonSerializer和实现WebMvcConfigurer类完成自定义序列化
  • 闲聊电脑(5)装个 Windows(一)
  • 力扣(leetcode)第414题第三大的数(Python)
  • 使用wda框架实现IOS自动化测试详解
  • LeetCode--代码详解 2.两数相加