首页 > 其他分享 >信息搜集技术和取证隐写前置技术

信息搜集技术和取证隐写前置技术

时间:2024-07-10 09:52:54浏览次数:12  
标签:取证 字节 文件 fmt 隐写 技术 flag x00 struct

信息搜集技术

网络信息搜集技巧

  • 公开渠道
  • 目标 Web 网页、地理位置、相关组织
  • 组织结构和人员、个人资料、电话、电子邮件
  • 网络配置、安全防护机制的策略和技术细节
  • 通过搜索引擎查找特定安全漏洞或私密信息的方法
  • Google Hacking Database

基本搜索技巧

  • Google 基本搜索与挖掘技巧
  • 保持简单明了的关键词
  • 使用最可能出现在要查找的网页上的字词
  • 尽量简明扼要地描述要查找的内容
  • 选择独特性的描述字词
  • 社会公共信息库查询
  • 个人信息:人口统计局
  • 企业等实体:YellowPage、企业信用信息网
  • 网站、域名、IP:whois 等

地图和街景搜索

  • 国外:Google Map、Google Earth、Google Street View
  • 国内:百度地图、卫星地图、街景
  • 从网络世界到物理世界:IP2Location
  • whois 数据库
  • GeoIP
  • IP2Location
  • 纯真数据库(QQ IP 查询)

取证隐写前置技术

大部分的 CTF 比赛中,取证及隐写两者密不可分,两者所需要的知识也相辅相成,所以这里也将对两者一起介绍。

任何要求检查一个静态数据文件从而获取隐藏信息的都可以被认为是隐写取证题(除非单纯地是密码学的知识),一些低分的隐写取证又常常与古典密码学结合在一起,而高分的题目则通常用与一些较为复杂的现代密码学知识结合在一起,很好地体现了 Misc 题的特点。

前置技能

  • 了解常见的编码

    能够对文件中出现的一些编码进行解码,并且对一些特殊的编码(Base64、十六进制、二进制等)有一定的敏感度,对其进行转换并得到最终的 flag。

  • 能够利用脚本语言(Python 等)去操作二进制数据

  • 熟知常见文件的文件格式,尤其是各类 文件头、协议、结构等

  • 灵活运用常见的工具

Python 操作二进制数据

struct 模块

有的时候需要用 Python 处理二进制数据,比如,存取文件,socket 操作时。这时候,可以使用 Python 的 struct 模块来完成。

struct 模块中最重要的三个函数是 pack()unpack()calcsize()

  • pack(fmt, v1, v2, ...) 按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流)
  • unpack(fmt, string) 按照给定的格式(fmt)解析字节流 string,返回解析出来的 tuple
  • calcsize(fmt) 计算给定的格式(fmt)占用多少字节的内存

这里打包格式 fmt 确定了将变量按照什么方式打包成字节流,其包含了一系列的格式字符串。这里就不再给出不同格式字符串的含义了,详细细节可以参照 Python Doc

>>> import struct
>>> struct.pack('>I',16)
'\x00\x00\x00\x10'

pack 的第一个参数是处理指令,'>I' 的意思是:> 表示字节顺序是 Big-Endian,也就是网络序,I 表示 4 字节无符号整数。

后面的参数个数要和处理指令一致。

读入一个 BMP 文件的前 30 字节,文件头的结构按顺序如下

  • 两个字节:BM 表示 Windows 位图,BA 表示 OS/2 位图
  • 一个 4 字节整数:表示位图大小
  • 一个 4 字节整数:保留位,始终为 0
  • 一个 4 字节整数:实际图像的偏移量
  • 一个 4 字节整数:Header 的字节数
  • 一个 4 字节整数:图像宽度
  • 一个 4 字节整数:图像高度
  • 一个 2 字节整数:始终为 1
  • 一个 2 字节整数:颜色数
>>> import struct
>>> bmp = '\x42\x4d\x38\x8c\x0a\x00\x00\x00\x00\x00\x36\x00\x00\x00\x28\x00\x00\x00\x80\x02\x00\x00\x68\x01\x00\x00\x01\x00\x18\x00'
>>> struct.unpack('<ccIIIIIIHH',bmp)
('B', 'M', 691256, 0, 54, 40, 640, 360, 1, 24)

bytearray 字节数组

将文件以二进制数组形式读取

data = bytearray(open('challenge.png', 'rb').read())

字节数组就是可变版本的字节

data[0] = '\x89'

常用工具

010 Editor

SweetScape 010 Editor 是一个全新的十六进位文件编辑器,它有别于传统的十六进位编辑器在于它可用「范本」来解析二进位文件,从而让你读懂和编辑它。它还可用来比较一切可视的二进位文件。

利用它的模板功能可以非常轻松的观察文件内部的具体结构并且依此快速更改内容。

file 命令

file 命令根据文件头(魔法字节)去识别一个文件的文件类型。

root in ~/Desktop/tmp λ file flag
flag: PNG image data, 450 x 450, 8-bit grayscale, non-interlaced

strings 命令

打印文件中可打印的字符,经常用来发现文件中的一些提示信息或是一些特殊的编码信息,常常用来发现题目的突破口。

  • 可以配合 grep 命令探测指定信息

    strings test|grep -i XXCTF
    
  • 也可以配合 -o 参数获取所有 ASCII 字符偏移

    root in ~/Desktop/tmp λ strings -o flag|head
        14 IHDR
        45 gAMA
        64  cHRM
        141 bKGD
        157 tIME
        202 IDATx
        223 NFdVK3
        361 |;*-
        410 Ge%<W
        431 5duX@%
    

binwalk 命令

binwalk 本是一个固件的分析工具,比赛中常用来发现多个文件粘合再在一起的情况。根据文件头去识别一个文件中夹杂的其他文件,有时也会存在误报率(尤其是对Pcap流量包等文件时)。

root in ~/Desktop/tmp λ binwalk flag

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             PNG image, 450 x 450, 8-bit grayscale, non-interlaced
134           0x86            Zlib compressed data, best compression
25683         0x6453          Zip archive data, at least v2.0 to extract, compressed size: 675, uncompressed size: 1159, name: readme.txt
26398         0x671E          Zip archive data, at least v2.0 to extract, compressed size: 430849, uncompressed size: 1027984, name: trid
457387        0x6FAAB         End of Zip archive

配合 -e 参数可以进行自动化提取。

也可以结合 dd 命令进行手动切割。

root in ~/Desktop/tmp λ dd if=flag of=1.zip bs=1 skip=25683
431726+0 records in
431726+0 records out
431726 bytes (432 kB, 422 KiB) copied, 0.900973 s, 479 kB/s

标签:取证,字节,文件,fmt,隐写,技术,flag,x00,struct
From: https://www.cnblogs.com/poemThesky/p/18293257

相关文章

  • 多条宽带负载均衡是一种常见的网络优化技术,通常用于增加网络带宽、提高网络性能和可靠
    多条宽带负载均衡是一种常见的网络优化技术,通常用于增加网络带宽、提高网络性能和可靠性。在实现多条宽带负载均衡时,可以考虑以下几种方法:路由器级别的负载均衡:智能路由器:某些商业路由器支持多个WAN口,并能够智能地根据网络流量来分配数据到不同的宽带线路上,实现负载均衡。......
  • 2024年AI数字人短视频带货技术教程
    2024年AI数字人短视频带货技术教程摘要:本文详细介绍了2024年AI数字人技术在短视频带货领域的应用教程。通过一系列课程内容,本文旨在指导用户掌握短视频带货的关键技巧和操作流程,提高物流量并优化带货效果。关键词:AI数字人,短视频带货,物流量优化,内容制作,流量提升1.引言随......
  • 三分钟,快速了解区块链技术!
    区块链,一种分布式账本技术,是一种分布式数据存储技术。链式存储结构:区块链是一种分布式账本技术,其核心是通过去中心化的方式来存储和管理数据。1交易发起与验证发起交易:用户在计算机上发起交易请求。这交易可以是转账、资产交换或其他类型的信息交换。节点传播:交易请求会通......
  • 基于Zigbee技术的隧道灯光控制系统设计
    基于Zigbee技术的隧道灯光控制系统设计摘要随着高速公路网络的不断扩展,隧道作为连接重要路段的特殊构造,其照明系统的重要性日益凸显。传统隧道照明系统存在控制方式落后、能源浪费严重、缺乏智能化调节等问题。本文旨在设计一种基于Zigbee技术的隧道灯光控制系统,通过无线传感......
  • 2017年,我成为了技术博主
    2017年9月,我已经大三了。>>上一篇(爪哇,我初窥门径)我大二学了很多java技术,看似我一会就把javaweb/ssh/ssm这些技术栈给学了。这些技术确实不难,即便是我,我都能学会,门槛并不高。但是,这也不是能随便百度学学,10分钟就懂了,学会了。从理解技术的用途,再到学习用法,再到实践,学一个也要3......
  • 比赛获奖的武林秘籍:05 电子计算机类比赛国奖队伍技术如何分工和学习内容
    比赛获奖的武林秘籍:05电子计算机类比赛国奖队伍技术如何分工和学习内容摘要本文主要介绍了在电子计算机类比赛中技术层面上的团队分工和需要学习的内容,分为了嵌入式硬件、嵌入式软件、视觉图像处理、机械、上位机软件开发和数据分析等六个方向,并结合自身经历给出相关建议。正......
  • 墨烯的C语言技术栈-C语言基础-010
    十.选择语句和循环语句如果你好好学习,校招时拿一个好offer,走上人生巅峰如果你不学习,毕业等于失业,回家卖红薯这就是选择结构intmain(){intinput=0;printf("加入C语言\n");printf("要好好学习吗(1/0)?");scanf("%d",&input);//if(input==1){printf("好offe......
  • 面壁智能发布端侧 AI 应用开发平台;快手推出肖像动画技术 LivePortrait丨 RTE 开发者日
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点,......
  • 基于剪枝技术和鲁棒蒸馏融合的轻量对抗攻击防御方法
    对抗训练是一类常用的对抗攻击防御方法,其通过将对抗样本纳入训练过程,从而有效抵御对抗攻击。然而,对抗训练模型的鲁棒性通常依赖于网络容量的提升,即对抗训练所获得的网络为防御对抗攻击而大幅提升网络的模型容量,对其可用性造成较大约束。为解决以上问题,提出一种基于剪枝技术......
  • 2024年北京市科学技术奖提名程序及注意事项
    2024年北京市科学技术奖的提名程序已然拉开帷幕,标志着又一轮科技荣耀的角逐正式开始。本年度提名不仅承载着对科研成就的高度认可,也体现了北京市推动科技进步、鼓励创新创造的坚定承诺。根据最新通知,提名工作已全面转入线上平台,确保提名流程的高效与透明。参与者需细致研读《关......