【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

相关文章

Python虚拟环境与Conda使用指南分享

《Python虚拟环境与Conda使用指南分享》:本文主要介绍Python虚拟环境与Conda使用指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python 虚拟环境概述1.1 什么是虚拟环境1.2 为什么需要虚拟环境二、Python 内置的虚拟环境工具

Python处理大量Excel文件的十个技巧分享

《Python处理大量Excel文件的十个技巧分享》每天被大量Excel文件折磨的你看过来!这是一份Python程序员整理的实用技巧,不说废话,直接上干货,文章通过代码示例讲解的非常详细,需要的朋友可... 目录一、批量读取多个Excel文件二、选择性读取工作表和列三、自动调整格式和样式四、智能数据清洗五、

JDK9到JDK21中值得掌握的29个实用特性分享

《JDK9到JDK21中值得掌握的29个实用特性分享》Java的演进节奏从JDK9开始显著加快,每半年一个新版本的发布节奏为Java带来了大量的新特性,本文整理了29个JDK9到JDK21中值得掌握的... 目录JDK 9 模块化与API增强1. 集合工厂方法:一行代码创建不可变集合2. 私有接口方法:接口

电脑系统Hosts文件原理和应用分享

《电脑系统Hosts文件原理和应用分享》Hosts是一个没有扩展名的系统文件,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应... Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应

Python MCPInspector调试思路详解

《PythonMCPInspector调试思路详解》:本文主要介绍PythonMCPInspector调试思路详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录python-MCPInspector调试1-核心知识点2-思路整理1-核心思路2-核心代码3-参考网址

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Python解析器安装指南分享(Mac/Windows/Linux)

《Python解析器安装指南分享(Mac/Windows/Linux)》:本文主要介绍Python解析器安装指南(Mac/Windows/Linux),具有很好的参考价值,希望对大家有所帮助,如有... 目NMNkN录1js. 安装包下载1.1 python 下载官网2.核心安装方式3. MACOS 系统安

Java嵌套for循环优化方案分享

《Java嵌套for循环优化方案分享》介绍了Java中嵌套for循环的优化方法,包括减少循环次数、合并循环、使用更高效的数据结构、并行处理、预处理和缓存、算法优化、尽量减少对象创建以及本地变量优化,通... 目录Java 嵌套 for 循环优化方案1. 减少循环次数2. 合并循环3. 使用更高效的数据结构4