【CTF-MISC出题思路分享】匿于时之下

2024-01-13 02:10

本文主要是介绍【CTF-MISC出题思路分享】匿于时之下,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前段时间出隐写题的时候发现了一个很有趣的隐藏信息的地方,给大家分享一下

首先来新建一个txt文本,看看他的属性。在这里插入图片描述

下面那里可以藏信息呢?大小?位置?

NoNo咱今天就用利用时间来进行信息隐藏

首先来读取一下这个时间,在python中使用os库就可以直接读取创建时间、修改时间、访问时间。

import os
filename = "new.txt"
file_attr = os.stat(filename)#读取文件属性
print(file_attr)

打印之后得到以下内容:

os.stat_result(st_mode=33206, st_ino=1970324837900684, st_dev=40639268, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1652854599, st_mtime=1652854574, st_ctime=1652854574)

其中st_atime为访问时间,st_mtime为修改时间,st_ctime为创建时间

都是以unix时间戳(S)表示

单独提取出创建时间使用file_attr.st_ctime可以直接提取

如果需要转为标准格式%Y-%m-%d %H:%M:%S,需要导入time库

import os
import time
filename = "new.txt"
file_attr = os.stat(filename)#读取文件属性
create_time = file_attr.st_ctime#获取创建时间
create_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(create_time))#转为标准格式
print(create_time)

这样打印出来的结果为2022-05-18 14:16:14

其他修改时间、访问时间同理使用file_attr.st_mtime、file_attr.st_atime即可

(img-Ilcy9tvv-1654651827655)(assets/配图1-20220518151700-ppofcul.gif)]

刚刚说完读取,再来说说如何修改这些时间

最憨的方法是到了指定时间创建这个文件,是不是听起来就很憨

这样肯定是不行的,无法准确控制自己想要的时间

现在来谈谈如何修改,这里直接参考了网上的一篇文章以下代码[1]

import os
import time
from pywintypes import Time
from win32con import FILE_FLAG_BACKUP_SEMANTICS
from win32con import FILE_SHARE_WRITE
from win32file import CloseHandle
from win32file import CreateFile
from win32file import GENERIC_WRITE
from win32file import OPEN_EXISTING
from win32file import SetFileTime
def modify_file_create_time(filename, create_time_str, update_time_str, access_time_str):try:format_str = "%Y-%m-%d %H:%M:%S" # 时间格式f = CreateFile(filename, GENERIC_WRITE, FILE_SHARE_WRITE, None, OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS, 0)create_time = Time(time.mktime(time.strptime(create_time_str, format_str)))update_time = Time(time.mktime(time.strptime(update_time_str, format_str)))access_time = Time(time.mktime(time.strptime(access_time_str, format_str)))SetFileTime(f, create_time, update_time, access_time)CloseHandle(f)print('update file time success:{}/{}/{}'.format(create_time_str, update_time_str,access_time_str))except Exception as e:print('update file time fail:{}'.format(e))
create_time = Time(time.mktime(time.strptime(create_time_str, format_str)))#新的创建时间
update_time = Time(time.mktime(time.strptime(update_time_str, format_str)))#新的修改时间
access_time = Time(time.mktime(time.strptime(access_time_str, format_str)))#新的访问时间
SetFileTime(f, create_time, update_time, access_time)#设置
if __name__ == '__main__':cTime = "2022-05-18 14:16:14" # 创建时间mTime = "2022-05-18 14:16:14" # 修改时间aTime = "2022-05-18 14:16:14" # 访问时间fName = r"new.txt" # 可以是文件也可以是文件夹print(os.path.isdir(fName))modify_file_create_time(fName, cTime, mTime, aTime)

说了这么多了,可以读取,又可以修改,那么信息要怎么隐藏呢?

(img-H6E3PJmt-1654651827655)(assets/image-20220518165609-nggoebl.png)]

现在我想把一段字符串flag{where_is_flag}隐藏到时间当中

经过一段头脑风暴产生了一个思路

每一个字符转为10进制,然后使用一个时间戳作为一个基础数,利用基础数+字符转为的10进制数,分别写入到19个文件中,并修改文件的创建时间、修改时间、访问时间

#创建一个空白文件
def createfile(filename):try:with open(filename, 'w') as f:passexcept Exception as e:print(e)sys.exit()

选一个2038年1月19日 11:03:00时间戳2147483000,这里后面取3个0是为了降低难度更好发现

flag{where_is_flag}转为10进制102 108 97 103 123 119 104 101 114 101 95 105 115 95 102 108 97 103 125

if __name__ == '__main__':testtime = 2147483000cmdstr =  "102 108 97 103 123 119 104 101 114 101 95 105 115 95 102 108 97 103 125"newpath = "./stego/"cmdstr = cmdstr.split(' ')#print(cmdstr)for i in tqdm(range(len(cmdstr))):filename = str(i)+'.txt'createfile(newpath+filename)#print(cmdstr[i])change_time = time.localtime(testtime+int(cmdstr[i]))format_str = "%Y-%m-%d %H:%M:%S"up_time = time.strftime("%Y-%m-%d %H:%M:%S",change_time)modify_file_create_time(newpath+filename, up_time, up_time, up_time)

运行之后就会在/stego下面产生19个文件,从外面看不明显,右键查看属性,第一个字符f对应的就是102。用前面讲到的查看文件属性的方法看看这个文件时间戳。

1

import os
filename = "D:\\pythonconda\\timesptest\\stego\\0.txt"
file_attr = os.stat(filename)#读取文件属性
create_time = file_attr.st_ctime#获取创建时间
print(create_time)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pTCAo4RP-1654651827657)(assets/image-20220520103654-wpi3jbm.png)]

我们需要的是后面的102部分,也就是[7:10]部分,转为字符串之后截取这部分即可。也可以用得到的时间去减2147483000得到结果

然后加一个循环就有以下代码

import os
for i in range(19):filename = "D:\\pythonconda\\timesptest\\stego\\{0}.txt".format(i)file_attr = os.stat(filename)#读取文件属性create_time = str(file_attr.st_ctime)#获取创建时间print(chr(int(create_time[7:10])),end='')

1

达成了!达成了!"0kb"隐藏信息!在这里插入图片描述
在这里插入图片描述

参考资料:

[1]python如何修改文件时间属性_python_脚本之家 (jb51.net)

鸣谢:

CTF站点导航 | 猫捉鱼铃 (mzy0.com)
本文已授权I春秋使用

这篇关于【CTF-MISC出题思路分享】匿于时之下的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/599908

相关文章

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

MySQL8.2.0安装教程分享

《MySQL8.2.0安装教程分享》这篇文章详细介绍了如何在Windows系统上安装MySQL数据库软件,包括下载、安装、配置和设置环境变量的步骤... 目录mysql的安装图文1.python访问网址2javascript.点击3.进入Downloads向下滑动4.选择Community Server5.

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

10个Python自动化办公的脚本分享

《10个Python自动化办公的脚本分享》在日常办公中,我们常常会被繁琐、重复的任务占据大量时间,本文为大家分享了10个实用的Python自动化办公案例及源码,希望对大家有所帮助... 目录1. 批量处理 Excel 文件2. 自动发送邮件3. 批量重命名文件4. 数据清洗5. 生成 PPT6. 自动化测试

10个Python Excel自动化脚本分享

《10个PythonExcel自动化脚本分享》在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式,本文将分享10个实用的Excel自动化脚本,希望可以帮助大家更轻松地掌握这些技能... 目录1. Excel单元格批量填充2. 设置行高与列宽3. 根据条件删除行4. 创建新的Excel工作表5

Redis多种内存淘汰策略及配置技巧分享

《Redis多种内存淘汰策略及配置技巧分享》本文介绍了Redis内存满时的淘汰机制,包括内存淘汰机制的概念,Redis提供的8种淘汰策略(如noeviction、volatile-lru等)及其适用场... 目录前言一、什么是 Redis 的内存淘汰机制?二、Redis 内存淘汰策略1. pythonnoe

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作