2021涅普冬令营笔记——misc

Aimerl0
• 阅读 1533

写在前面 有幸当上了这个冬令营桂电的负责人,然后也通过活动弄到了想要蛮久的零组文库邀请码,这个活动主要是面向零基础的小白入门 CTF 的,虽然我已经不算新手了,但是每次直播时间也不长,给自己查缺补漏吧,所以这就是2021涅普冬令营的直播随堂笔记啦

课程大纲

2021涅普冬令营笔记——misc

2021.2.1——教你如何在一张图片中隐藏不可告人的秘密

这次讲课的是Nepnep战队的贝塔姐姐,声音真的好好听

Misc介绍

  • miscellaneous 前四个字母,意为杂项,一锅端,大杂烩

  • 主要类型

    1. 数据编码/图形密码
    2. 图片隐写
    3. 音频&视频隐写
    4. 流量分析
    5. 内存取证
    6. 游戏隐写
  • 常用工具

    1. 010editor(winhex)
    2. 图片十六进制文件头+文件模板

    常见文件头

    JPEG (jpg),文件头:FFD8FF
    PNG (png),文件头:89504E47
    GIF (gif),文件头:47494638
    TIFF (tif),文件头:49492A00
    MS Word/Excel (xls.or.doc),文件头:D0CF11E0
    Adobe Acrobat (pdf),文件头:255044462D312E
    ZIP Archive (zip),文件头:504B0304
    RAR Archive (rar),文件头:52617221
    Wave (wav),文件头:57415645
    AVI (avi),文件头:41564920
    Quicktime (mov),文件头:6D6F6F76
    1. 文件属性(exiftools)

    2. kali

Misc必备知识

  • 常见的文件头要记得
  • 010editor / winhex 等工具使用熟练
  • 学的东西广而杂,保持良好的心态

图片隐写分类

右击属性

  • 就右键看看属性

文件末尾藏有字符串

  • 可用 kali 里的strings程序,也可在 010editor 中的模板直接看到
  • Linux 中的grep命令,常用: grep -a "要查找的字符串" 图片.jpg
  • Linux 中的file命令,用来查看文件类型,直接file 文件

文件包含

  • kali 中的binwalk工具,直接binwalk 文件用来查看是否有文件包含,分离常用有ddforemostdd能分离出所有东西,foremost可能不能分离出想要的所有东西,常用命令:binwalk -e 文件foremost 文件dd if=文件 of=分离出来的文件名 bs=1(每次读取一个块) skip=24437(从什么地方开始分离)foremost -t 需要恢复文件类型后缀 -i 扫描的分区 -o 指定存放文件目录(该目录必须为空)

修改文件头

  • 只要破坏了文件头,就破坏了文件原有的二进制格式,就打不开了,比赛常见的是恢复原有文件格式,常见的有图片的(jpg、png、gif等),zip 的(伪加密)

GIF

  • Ps 逐个图层分析
  • 注意特殊的帧和帧的时间间隔
  • Stegsolve神器,懂的都懂

png(bmp)

  • 修改文件的宽和高,可以直接 Windows 画图工具改,也可以用 010editor/winhex 改控制宽和高的位置,010editor 中IHDR可以看到位置(一般修改高,修改宽容易出问题,而且改的大小要注意,图片容易花)

  • 可通过校验和来检验文件是否被修改宽和高,选中IHDR到宽的数据,用 010editor 中的校验和工具校验

  • IDAT(图像数据块),所有的 png 图片的IDAT都是不变的,因为要填充满每一个数据块,值一般为65524,常用于 png 图片隐写的工具是pngcheck,用来查看异常的IDAT,常用命令pngcheck.exe -v 文件

    IDAT 文件

    00 00 00 27 数据长为39字节 49 44 41 54 IDAT标识 78 9C…… 压缩的数据,LZ77派生压缩方法 DA 12 06 A5 CRC校验

  • lsb隐写(只有 png 图片有),png 图片中的图像像数一般是由 RGB 三原色(红绿蓝)组成,每一种颜色占用 8 位,取值范围为 0x00~0xFF,即有 256 种颜色,一共包含了 256 的 3 次方的颜色,即 16777216 种颜色。而人类的眼睛可以区分约 1000 万种不同的颜色,这就意味着人类的眼睛无法区分余下的颜色大约有 6777216 种,修改 Color 的二进制末尾两位(最低有效位(LSB)),颜色没有肉眼上的变化,但是每个像数可以携带 3 比特的信息,常用的工具是神器Stegsolve,一把梭的zstegwbStego4.3open

JPG

双图隐写

  • 泛指以两张图片为解题线索的题型,可能是一张图隐藏了另一张图,更多的是给了两张图,需要结合分析提取隐藏数据
  • 常见解题思路有图像格式拼接图层叠加(图像由图层叠加而成,而图层由像素组合而成)图像运算(图像的运算实质上是像素的运算。常见的图像运算方式有10种:加、减、乘、除、逻辑与、逻辑或、逻辑非、逻辑异或、按比混合和位移)
  • 有具体的脚本,Xor

stegpy

  • 用 python 写的一个隐写工具,常用命令:stegpy 隐写内容 XXX.jpg -p 设置的密码

silenteye

  • 也是一个隐写工具,没啥好说的,百度都有教程

2021.2.2——明人不说暗话数据编码的㊙

常见进制及进制转换

hex

  • 十六进制

ord

  • 八进制

bin

  • 二进制
  • 01010100101,逢二进一

二进制转万物

  • 二进制转 ascii 码:二进制转十进制,对应的 ascii 码
  • 二进制转 morse 码:二进制转十进制,对应的 ascii 码是.-
  • 二进制转二维码(绘图):给出二进制字符串的位数可以开方,说明可能是一个正方形,再配合脚本转成二维码图片
from PIL import Image
MAX = 25
pic = Image.new("RGB",(MAX,MAX))
str = "二进制字符串"
i = 0
for y in range (0,MAX):
    for x in range (0,MAX):
        if(str[i] == '1'):
            pic.putpixel([x,y],(0,0,0))
        else:
            pic.putpixel([x,y],(255.255.255))
        i = i+1
pic.show()
pic.save("flag.png")
  • 二进制转图片(hex):二进制转十六进制以后放 010/winhex 中打开保存为一个图片就行
  • ......

常见编码

  • Ascii

  • Base 家族,最常见的就是 base64,其原理就是:

    把3个8位字节转化为4个6位的字节,之后在6位的前面补两个0,形成8位一个字节的形式,6位2进制能表示的最大数是2的6次方是64,这也是为什么是64个字符(A-Z,a-z,0-9,+,/这64个编码字符,=号不属于编码字符,而是填充字符)的原因,这样就需要一张映射表

    2021涅普冬令营笔记——misc

    • base32 :使用32个可打印字符(字母A-Z和数字2-7)对任意字节数据进行编码的方案,编码后的字符串不用区分大小写并排除了容易混淆的字符,可以方便地由人类使用并由计算机处理,tips:末尾最多有6个=
    • Base16 :使用数字0-9和字母A-F共计16个ASCII可打印字符对任意字节数据进行编码,tips:不会出现=
    • Base36:包含0~9的数字,加上所有26个字母,不区分大小写,不包含任何标点,所有的字母要不全大写,要不全小写。所以加起来就是 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ ,或者 0123456789abcdefghijklmnopqrstuvwxyz
    • Base58:采用的字符集为123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ,从这不难看出,Base58 是纯数字与字母组成而且去掉了容易引起视觉混淆的字符(0:数字零,O:大写O,I:大写i,l:小写L),9个数字+49个字母=58个,故称 base58。
    • base62:就是26个字母的大小写再加上0-9,一共62个字符。相比于 base64 只是去掉了两个符号(+和/)
    • base85:是一种类似于 Base64 的二进制文本编码形式,通过使用五个 ASCII 字符来表示四个字节的二进制数据
    • base91:由91个字符(0-9,a-z,A-Z,!#$%&()*+,./:;<=>?@[]^_`{|}”)组成
    • base92:比 base91 多一个字符
  • Morse:如图所示,还有变种,比如排列很像的例如 AAAAB BBBA,还有音频隐写中也有类似的,这些都可理解为摩斯变种

2021涅普冬令营笔记——misc

  • Shellcode:是一段用于利用软件漏洞而执行的代码,shellcode 为二进制的机器码,因为经常让攻击者获得 shell 而得名,经常使用如下所示的16进制格式来表示,我们也可以用16进制格式来表示其他隐写信息,常用就是先十六进制转十进制,十进制对应 ascii 得到明文

  • Urlencode:又叫百分号编码,是统一资源定位(URL)编码方式。

    URL地址(常说网址)规定了常用的数字,字母可以直接使用,另外一批作为特殊用户字符也可以直接用(/,:@等),剩下的其它所有字符必须通过 %xx 编码处理。

    编码方法很简单,在该字节 ascii 码的16进制字符前面加 % 如空格字符,ascii 码是 32,对应 16 进制是 '20' ,那么 urlencode 编码结果是:%20

  • Unicode:万国码,比如\u574f\u5973\u4eba\u4e07\u5c81\uff01&#x574f;&#x5973;&#x4eba;&#x4e07;&#x5c81;&#xff01

  • aaencode(可以将 JS 代码转换成常用的网络表情,也就是我们说的颜文字 js 加密) 、jjencode(跟前一个差不多) 、uuencode(二进制信息和文字信息之间的转换编码)

  • Jsfuck(可以让你只用 6 个字符[ ] ( ) ! +来编写 JavaScript 程序) 、brainfuck(+ < ]三个符号组成) 、ook!(都是由ook组成)、short ook(! ? .三个符号组成)

    直接找解密网站

  • 敲击码:是一种以非常简单的方式对文本信息进行编码的方法。因该编码对信息通过使用一系列的点击声音来编码而命名,敲击码是基于 5 ×5 方格波利比奥斯方阵来实现的,不同点是是用 K 字母被整合到 C 中

2021涅普冬令营笔记——misc

  • 二维码:用某种特定几何图形按一定规律在平面分步的黑白相间的图形记录数据符号信息

2021涅普冬令营笔记——misc

2021涅普冬令营笔记——misc

稀奇古怪的编码

  • 社会主义核心价值观
  • 与佛论禅
  • 与熊论道

2021.2.3——关于我转生成为流量包的那些事

网络中的不同流量

  • 互联网五层模型:自下而上,即物理层->数据链路层->网络层->传输层->应用层

  • 这五层模型,不是相互独立的,属于包含关系,在数据传输过程中,数据包在每一层通过加包/解包的操作进行数据的识别、解析、工作还有传输

  • burpsuite 抓的是应用层的包,wireshark 抓的是数据链路层的包

  • 传输层 TCP 三次握手四次挥手的大致流程:

    1. 客户端向服务端发送一个请求连接包,标识符为 SYN 序号为 J

    2. 服务端收到请求连接包,并对 SYN J 进行确认,然后发送一个回复包,标识符为 SYN K,ACK J+1

    3. 客户端向服务端发一个确认收到回复包,标识符为 ACK K+1

    2021涅普冬令营笔记——misc

关于流量分析其实还是多做题,多分析,多用 wireshark

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Stella981 Stella981
2年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
2个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这