本文主要是介绍【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即可
刚刚说完读取,再来说说如何修改这些时间
最憨的方法是到了指定时间创建这个文件,是不是听起来就很憨
这样肯定是不行的,无法准确控制自己想要的时间
现在来谈谈如何修改,这里直接参考了网上的一篇文章以下代码[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)
说了这么多了,可以读取,又可以修改,那么信息要怎么隐藏呢?
现在我想把一段字符串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。用前面讲到的查看文件属性的方法看看这个文件时间戳。
import os
filename = "D:\\pythonconda\\timesptest\\stego\\0.txt"
file_attr = os.stat(filename)#读取文件属性
create_time = file_attr.st_ctime#获取创建时间
print(create_time)
我们需要的是后面的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='')
达成了!达成了!"0kb"隐藏信息!
参考资料:
[1]python如何修改文件时间属性_python_脚本之家 (jb51.net)
鸣谢:
CTF站点导航 | 猫捉鱼铃 (mzy0.com)
本文已授权I春秋使用
这篇关于【CTF-MISC出题思路分享】匿于时之下的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!