• CTF-杂项与密码学总结


    杂项

    01文件操作与隐写

    文件类型识别

    1.File命令

    当文件没有后缀名或者有后缀名而无法正常打开时,根据识别出的文件类型来修改后缀名即可正常打开文件。
    使用场景:不知道后缀名,无法打开文件。格式: file myheart
    image-20200814162422418

    2.winhex

    通过winhex.程序中可以查看文件头类型,根据文件头类型判断出文件类型
    使用场景: windows 下通过文件头信息判断文件类型

    image-20200814162539651

    3.文件头残缺/错误

    通常文件无法正常打开有两种情况,一种是文件头部残缺, 另一种是文件头部字段错误。针对文件头部残缺的情况,使用winhex或者010 Editor程序添加相应的文件头,针对头部字段错误,可以找一个相同类型的文件进行替换。
    使用场景:文件头部残缺或文件头部字段错误无法打开正常文件。
    格式: file 文件名

    image-20200814163338518

    文件分离操作

    1.Binwalk工具

    Binwalk是Linux下用来分析和分离文件的工具,可以快速分辨文件是否由多个文件合并而成,并将文件进行分离。如果分离成功会在目标文件的目录。
    同目录下生成一个形如_ 文件名_ extracted的文件目录,目录中有分离后的文件。
    用法:
    分析文件: binwalk filename
    分离文件: binwalk -e filename

    2.foremost

    如果binwalk无法正确分离出文件,可以使用foremost,将目标文件复制到kali中,成功执行后,会在目标文件的文件目录下生成我们设置的目录,目录中会按文件类型分离出文件。
    用法:
    foremost 文件名 -o 输出目录名

    image-20200814165244610

    3.dd

    当文件自动分离出错或者因为其他原因无法自动分离时,可以使用dd实现文件手动分离。

    格式:
    dd if=源文件 of=目标文件名名bs=1 skip=开始分离的字节数
    参数说明:
    if=file #输入文件名,缺省为标准输入。
    of=file #输出文件名,缺省为标准输出。
    bs=bytes #同时设置读写块的大小为bytes,可代替ibs和obs。
    skip=blocks #从输入文件开头跳过blocks个块后再开始复制。

    image-20200814170342974

    image-20200814170840959

    4.Winhex

    除了使用dd外,还可以使用winhex实现文件手动分离,将目标文件拖入winhex中,找到要分离的部分,点击复制即可。
    使用场景: windows 下利用winhex程序对文件进行手动分离
    例:新建一个文件,文件大小1byte, 在文件开头位置点击粘贴,弹出提示框选否、确定,将文件保存为想要的后缀即可。

    image-20200814170942114

    5.010Editor

    将某块区域文件保存的方式如下:

    image-20200814171213727

    记事本里存放的二进制文件转成二进制文件

    image-20200814171742467

    image-20200814171845330

    image-20200814171940447

    文件合并操作

    1.Linux下的文件合并

    使用场景: linux 下,通常对文件名相似的文件要进行批量合并
    格式: cat 合并的文件>输出的文件

    完整性检测: linux下计算文件md5:
    md5sum 文件名

    2.Windows下的文件合并

    使用场景:windows下,通常要对文件名相似的文件进行批量合并
    格式: copy/B合并的文件输出的文件命令

    完整性检测: windows 下计算文件md5:
    certutil -hashfile 文件名 md5

    文件内容隐写

    文件内容隐写,就是直接将KEY以十六进制的形式写在文件中,通常在文件的开头或结尾部分,分析时通常重点观察文件开头和结尾部分。如果在文件中间部分,通常搜索关键字KEY或者flag来查找隐藏内容。
    使用场景: windows下, 搜索隐写的文件内容

    1.Winhex/010Editor

    通常将要识别的文件拖入winhex中,查找具有关键字或明显与文件内容不和谐的部分,通常优先观察文件首部和尾部,搜索flag或key等关键字,最后拖动滚轮寻找。

    2.Notepad++

    使用notepad++打开文件,查看文件头尾是否有含有关键字的字符串,搜索flag或key等关键字,最后拖动滚轮寻找。
    另外通过安装插件HEX-Editor可以实现winhex的功能。

    02图片隐写术

    图片隐写的常见隐写方法
    1.细微的颜色差别
    2.GIF图多帧隐藏
    1.颜色通道隐藏
    2.不同帧图信息隐藏
    3.不同帧对比隐写
    3.Exif信息隐藏
    4.图片修复
    1.图片头修
    2.图片尾修复
    3.CRC校验修复
    4.长、宽、高度修复
    5.最低有效位LSB隐写
    6.图片加密
    1.Stegdetect
    2.outguess
    3.Jphide
    4.F5

    图片文件隐写

    1.Firework

    使用winhex打开文件时会看到文件头部中包含firework的标识,通过firework可以找到隐藏图片。
    使用场景:查看隐写的图片文件

    image-20200814200754023

    2.Exif

    Exijf按照PEG的规格在PEG中插入一些图像/数字相机的信息数据以及缩略图像可以通过与PEG兼容的互联网浏览器/图片浏览器/图像处理等一些软件来查看Exift格式的图像文件就跟浏览通常的PEG图像文件一样,图片右键属性,查看exif或 查看详细信息,在相关选项卡中查找flag信息。

    image-20200814201336619

    3.Stegsolve

    当两张jpg图片外观、大小、像素都基本相同时,可以考虑进行结合分析,即将两个文件的像素RGB值进行XOR、ADD、SUB等操作,看能否得到有用的信息,StegSolve可以方便的进行这些操作。
    使用场景:两张图片信息基本相同

    image-20200814201519752

    4.LSB(最低有效位Least Significant Bit)

    LSB替换隐写基本思想是用嵌入的秘密信息取代载体图像的最低比特位,原来的的7个高位平面与替代秘密信息的最低位平面组合成含隐藏信息的新图形。
    1.像素三原色(RGB)
    2.通过修改像素中最低位的1bit来达到隐藏的效果
    3.工具: stegsolve、 zsteg、 wbstego4、 python脚本

    image-20200814202139107

    image-20200814202251643

    zsteg工具
    detect stegano-hidden data in PNG & BMР
    Installation
    root@kali:/# gem install zsteg
    检测LSB隐写
    zsteg xxx.png

    image-20200814202621885

    wbstego4工具
    解密通过1sb加密的图片

    python脚本来处理
    将以下脚本放在kali中运行,将目标文件放在脚本同目录下,将脚本中的文件名修改为文件名,运行python即可

    image-20200814215001502

    5.TweakPNG

    TweakPNG是一款简单易用的PNG图像浏览工具,它允许查看和修改一些PNG图像文件的元信息存储。使用场景:文件头正常却无法打开文件,利用TweakPNG修改CRC
    例:
    1.当PNG文件头正常但无法打开文件,可能是CRC校验出错,可以尝试通过TweakPNG打开PNG,会弹出校验错误的提示,这里显示CRC是fe1a5ab6,正确的是b0a7a9f1。打开winhex搜索fe1a5ab6将其改为b0a7a9f1。

    1. 文件头正常却无法打开文件,利用TweakPNG 修改CRC....
    2. 有时CRC没有错误,但是图片的高度或者宽度发生了错误,需要通过CRC计算出正确的高度或者宽度。可以用下面的py脚本,需要改文件位置和TweakPNG得到的CRC实际值,用计算出高度,利用01Editor修改宽高

    image-20200814220651744

    6. Bftools

    bftools用于解密图片信息。
    使用场景:在windows的cmd下,对加密过的图片文件进行解密格式:
    Bftools .exe decode braincopter要解密的图片名称-output输出文件名
    Bftools.exe run.上一步输出的文件

    image-20200814221558142

    7.SilentEye

    silenteye是一款可以将 文字或者文件隐藏到图片的解密工具。
    使用场景: windows' 下打开silentEye工具,对加密的图片进行解密
    例:
    1.使用silentEye程序打开目标图片,点击image一>decode,点击decode,可以查看隐藏文件,点击保存即可

    2.如果需要密码,勾选encrypteddata,输入密码和确认密码,点击decode再解密

    image-20200814221948064

    8.JPG图像加密

    1)Stegdetect工具探测加密方式
    Stegdetect.程序主要用于分析PEG文件。因此用stegdetect 可以检测到通过Steg、JPHide. OutGuess、 Invisible Secrets、F5、appendX和Camouflage等这些隐写工具隐藏的信息。
    stegdetect xxx.jpg
    stegdetect -s 敏感度xx.jpgexi

    image-20200814222019292

    2)Jphide
    Jphide是基于最低有效位LSB的JPEG格式图像隐写算法.例:
    Stegdetect提示jphide加密时,可以用Jphs.工具进行解密,打开jphswin.exe, 使用open jpeg打开图片,点击seek,输入密码和确认密码,在弹出文件框中选择要保存的解密文件位置即可,结果保存成txt文件。

    image-20200814222221167

    1. Outguess
      outguess 一般用于解密文件信息。
      使用场景:Stegdetect识别出来或者题目提示是outguess加密的图片该工具需编译使用: ./configure && make && make install
      格式: outguess -r 要解密的文件名输出结果文件名

    image-20200814222247892

    1. F5
      F5一般用于解密文件信息。
      使用场景: Stegdetect识 别出来是F5加密的图片或题目提示是F5加密的图片
      进入F5-steganography_F5目录,将图片文件拷贝至该目录下,从CMD进入该目录

    格式: Java Exrtact 要解密的文件名 -p 密码

    image-20200814222330464

    9.二维码处理

    1.使用二维码扫描工具CQR.exe打开图片, 找到内容字段

    image-20200814222536728

    2.如果二维码某个定位角被覆盖了,该工具有时候也可以自动识别,如果识别失败,需要使用PS或画图工具将另外几个角的定位符移动到相应的位置,补全二维码 。

    image-20200814222556491

    3.如果某个二维码的定位点中间是白色,可能被反色了,使用画图工具把颜色反色回来再扫描即可。

    image-20200814222734412

    03压缩文件处理

    压缩文件分析

    1.伪加密

    如果压缩文件是加密的,或文件头正常但解压缩错误,首先尝试文件是否为伪加密。zip文件是否加密是通过标识符来显示的,在每个文件的文件目录字段有一位专门标识了文件是否加密,将其设置为00表示该文件未加密,如果成功解压则表示文件为伪加密,如果解压出错说明文件为真加密。
    使用场景:伪加密文件
    操作方法:使用winhex打开压缩文件, 找到文件头第九第十个字符,将其修改为0000。
    1.使用winhex打开文件搜索16进制504B0102,可以看到每个加密文件的文件头字段。

    2.从50开始计算,第九第十个字符为加密字段,将其设置为0000即可变成无加密状态。

    image-20200815100029614

    3.RAR文件由于有头部校验,使用伪加密时打开文件会出现报错,使用winhex修改标志位后如报错消失且正常解压缩,说明是伪加密。使用winhex打开RAR文件,找到第24个字节,该字节尾数为4表示加密,0表示无加密,将尾数改为0即可破解伪加密。

    image-20200815100102794

    2.暴力破解

    通常我们可以使用ARCHPR.exe工具来破解zip文件
    使用场景: windows下加密过的zip文件
    1、攻击类型选择暴力破解,在范围位置根据提示选择暴力破解范围选项设置暴力破解包含的类型、开始于和结束于选项具体范围,如果没有定义则全范围暴力破解。点击打开选择要破解的文件,点击开始进行破解。建议使用1~9位的数字密码,以及系统自带的英文字典作为密码字典。

    image-20200815100658302

    2、攻击类型选择掩码可以进行复杂的暴力破解,比如知道密码前3位是abc,后3位为数字,则在攻击类型选择掩码,在掩码处输入acb???,暴力范围选项选择所有数字,打开要破解的点击,点击破解。此时???的部分会被我们选择的暴力破解范围中的字符代替。

    image-20200815101216432

    3.明文攻击

    明文攻击指知道加密的ZIP中部分文件的明文内容,利用这些内容推测出密钥并解密ZIP文件的攻击方法,相比于暴力破解,这种方法在破解密码较为复杂的压缩包时效率更高。
    使用场景:已知加密的zip部分文件明文内容
    例:假设一个加密的压缩包中有两个文件readme.txt和flag.txt,其中flag txt的内容是我们希望知道的内容,而我们拥有readme.txt的明文文件,使用上述两个文件即可进行明文攻击。
    操作:
    1、将readme.txt的明文文件进行压缩,变成readme1.zip。
    2、打开archpr, 攻击类型选择明文,明文文件路径选择readme1.zip ( 即将明文文件不加密压缩后的文件),加密的文件
    选择要破解的文件,点击开始,破解成功后会获得密码。

    image-20200815101420010

    有时不一定能破解出文件口令,但是能够找到加密密钥等信息,可以直接将文件解密,点击确定保存解密后的文件即可。

    image-20200815101531195

    使用该方法需要注意两个关键点:
    1、有一个明文文件,压缩后CRC值与加密压缩包中的文件一致。
    2、明文文件的压缩算法需要与加密压缩文件的压缩算法一致。

    image-20200815101728691

    image-20200815101917724

    RAR文件格式
    有时候给出的RAR文件的头部各个字块会故意给错导致无法识别。

    image-20200815102407082

    04流量取证技术

    流量包文件分析

    CTF比赛中,流量包的取证分析是另一项重要的考察方向。
    通常比赛中会提供一个包含流量数据的PCAP文件,有时候也会需要选手们先进行修复或重构传输文件后,再进行分析。
    总体把握
    ·协议分级
    ·端点统计
    过滤筛选
    ·过滤语法
    ·Host,Protocol,contains,特征值
    发现异常
    ·特殊字符串
    ·协议某字段
    ·flag位于服务器中
    数据提取
    ·字符串取
    ·文件提取
    总的来说比赛中的流量分析可以概括为以下三个方向:
    ·流量包修复
    ·协议分析
    ·数据提取

    WireShark工具的基本使用

    wireshark的过滤器和过滤规则能够帮助我们迅速定位到要分析的报文。

    image-20200815111017139

    常用的过滤命令:
    1.过滤IP,如源IP或者目标x.x.x.x
    ip.src eq x.x.x.x or ip.dst eq x.x.x.x 或者ip.addr eq x.x.x.x

    2.过滤端口
    tcp.port eq 80 or udp.port eq 80
    tcp. dstport == 80 只显tcp协议的目标端口为80
    tcp. srcport == 80 只显tcp协议的源端口为80
    tcp.port >= 1 and tcp.port <= 80

    3.过滤协议
    tcp/udp/ arp/ icmp/http/ ftp/dns/ip

    4.过滤MAC
    eth.dst == A0:00:00:04:C5:84过滤目标mac

    5.包长度过滤
    udp. length = == 26这个长度是指udp本身固定长度8加上udp下面那块数据包之和。tcp.len>= 7指的是ip数据包(tcp下面那块数据),不包括tcp本身
    ip.len == 94 除了以太网头固定长度14,其它都算是ip.len,即从ip本身到最后
    frame.len == 119整个数据包长度,从eth开始到最后

    6.http模式过滤
    http.request.method == "GET"
    http.request.method == "POST"
    http.request.uri == "/img/logo-edu.gif"
    http contains "GET"
    http contains "HTTP/1."
    http.request.method == "GET" && http contains "User-Agent:"
    http contains "flag"
    http contains "key"
    tcp contains "flag"

    WireShark 协议分析

    了解数据包传输的内容

    image-20200815112209571
    根据数据包特征进行筛选
    比如查看数据包的时候,有的数据包有某种特征,比如有http(80)。就可以筛选出这种特征出来。
    右键→作为过滤器应用→选中

    image-20200815112908207

    WireShark流汇聚
    在关注的ttp数据包或tcp数据包中选择流汇聚,可以将HTTP流或TCP流汇 聚或还原成数据,在弹出的框中可以看到数据内容。

    image-20200815113039561

    常见的HTTP流关键内容:
    1、HTML中直接包含重要信息。
    2、上传或下载文件内容,通常包含文件名、hash值等关键信息,常用POST请求上传。
    3、一句话木马,POST请求,内容包含eval,内容使用base64加密

    image-20200815113342472

    WireShark数据提取
    1.使用wireshark可以自动提取通过htp传输的文件内容。

    image-20200815114452375

    1. wireshark可以手动提取文件内容。
      点击想要的数据包,如下图选定media type的位置
      右键→导出分组字节流或者点击菜单栏文件→导出分组字节流,快捷方式Ctrl+H在弹出的框中将文件保存成二二进制文件。

    image-20200815115132169

    无线流量包跑密码

    无线wif流量包

    image-20200815160513990

    aircrack-ng工具进行wifi密码破解

    1.用aircrack-ng检查cap包:aircrack-ng xxx.cap

    image-20200815161110145

    2.用aircrack-ng跑字典进行握手包破解: aircrack-ng xx.cap -w pass.txt

    image-20200815161440967

    USB流量包文件分析

    USB流量
    USB,流量也是流量分析题的考查点,一 般考察的流量涉及键盘击键,鼠标移动与点击,存储设备的明文传输通信,USB无线网卡网络传输内容等。
    USB协议的数据部分在Leftover Capture Data域之中。
    右键leftover capture data->应用为列。

    image-20200815162159555

    image-20200815162650531

    USB鼠标流量抓取分析
    鼠标流量与键盘流量不同,鼠标移动时表现为连续性,与键盘的离散性不一样。但是实际鼠标产生的数据是离散的。所以同样可以把数据抓取出来,构成二维坐标画出轨迹。

    鼠标数据包的数据长度为4个字节,第一个字节代表按键, 当取oxoo时,代表没有按键;为ox01时,代表按左键,为0x02时, 代表当前按键为右键。

    image-20200815162724645

    第二个字节代表左右偏移;
    当值为正时,代表右移多少像素。当值为负时,代表左移多少像素。同理,第三个字节代表上下偏移 。

    USB鼠标流量抓取分析
    鼠标流量与键盘流量不同,鼠标移动时表现为连续性,与键盘的离散性不一样。但是实际鼠标产生的数据是离散的。所以同样可以把数据抓取出来,构成二维坐标画出轨迹。

    image-20200815162845733

    image-20200815162934074

    image-20200815162949255

    HTTPS流量包文件分析

    image-20200815163047411

    密码学

    01密码学概述

    密码学的发展

    • 第一个阶段是从古代到19世纪末-古典密码 (classical cryptography)
    • 第二个阶段从20世纪初到1949年-近代密码
    • 第三个阶段从C.E.Shannon (香农)于1949年发表的划时代论文 "The Communication Theory ofSecret Systems "开始-现代密码
    • 第四个阶段从1976年W. Diffie和M. Hellman创造性地发表了论文"New Directions in
      Cryptography"开始-公钥密码

    密码编码学

    (1)密码编码学是密码学的一个分支,研究与信息安全(例如:机密性、完整性、可鉴别性)有关的数学技术。
    (2)密码编码学是包含数据变换的原理、工具和方法的一门学科,这种数据变换的目的是为了隐藏数据的信息内容,阻止对数据的篡改以及防止未经认可使用数据。
    (3)密码编码学是论述使明文变得不可懂的密文,以及把已加密的消息变换成可懂形式的艺术和技巧。

    对称加密不对称加密

    • 对称密码算法(Symmetric cipher) :加密密钥和解密密钥相同,或实质上等同,即从一个易于推出另一个。又称传统密码算法(Conventional cipher)、秘密密钥算法或单密钥算法。
      DES、 3DES、 IDEA、 AES

    • 非对称密码算法(Asymmetric cipher). : 加密密钥和解密密钥不同,从一个很难推出另一个。又叫公钥密码算法(Public一key cipher)。其中的加密密钥可以公开,称为公开密钥(public key),简称公钥;解密密钥必须保密,称为私人密钥(private key),简称私钥。
      RSA、 ECC、 EIGamal

    摘要算法

    数据摘要算法是密码学算法中非常重要的一个分支, 它通过对所有数据提取指纹信息以实现数据签名、数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密。数据摘要算法也被称为哈希(Hash) 算法、散列算法,常见的摘要算法有MD5和SHA
    在互联网上进行大文件传输时,都要得用MD5算法产生一个与文件匹配的、存储MD5值的文本文件(后缀名为md5或md5sum),这样接收者在接收到文件后,就可以利用与SFV类似的方法来检查文件完整性,绝大多数大型软件公司或开源组织都是以这种方式来校验数据完整性,而且部分操作系统也使用此算法来对用户密码进行加密,另外,它也是目前计算机犯罪中数据取证的最常用算法。
    SHA中SHA1的应用较为广泛,主要应用于CA和数字证书中,另外在互联网中流行的BT软件中,也是使用.SHA1来进行文件校验的,由于SHA系列算法的数据摘要长度较长,因此其运算速度与MD5相比,也相对较慢。

    image-20200815163751484

    ASCII编码

    ASCII码使用指定的7位或8位二进制数组合来表示128或256种可能的字符。标准ASCII码也叫基础ASCII码,使用7位一进制数(剩下的1位一进制为0)来表示所有的大写和小写字母,数字0到9、标点符号,以及在美式英语中使用的特殊控制字符。

    Base64编码

    Base64顾名思义就是用64个可显示字符表示所有的ASC字符,64也就是6Bits, 而ASC字符一共有256个,也就是8Bits。 Base64编码要求把3个8位字节(38=24)转化为4个6位的字节(46=24) ,之后在6位的前面补两个0,形成8位一个字节的形式。如果剩下的字符不足3个字节,则用0填充,输出字符使用’=' ,因此编码后输出的文本末尾可能会出现1或2个’='

    URL编码

    ur|编码就是一个字符ascii码的十 六进制。不过稍微有些变动,需要在前面加上“%”。比如"”,它的ascii码是92, 92的十六进制是5c,所以"" 的ur|编码就是%5c。
    特点:密文中有多个%号符

    Unicode编码

    Unicode码扩展自ASCII字元集。在严格的ASCII中,每个字元用7位元表示,或者电脑上普遍使用的每字元有8位元宽;而Unicode使用全1 6位元字元集。这使得Unicode能够表示世界上所有的书写语言中可能用於电脑通讯的字元、象形文字和其他符号。
    特点:密文中有多个uxxx

    JS混淆

    有些时候开发者为了保护劳动成果可以通过对javascript的变量名称和过程名称进行编码,从而起到混淆js代码的作用,通常使用eval函数进行混淆处理,该函数可以计算字符串,并执行其中的JS代码。
    如,对<script>alert( 'XSS' ); </script>进行16进制转换,然后使用eval函数进行读取

    <script>eval("x61x6cx65x72x74x28x27x58x .
    53x53x27x29x3b");
    </script>
    

    特点:通常在JS脚本里使用eval与function函数进行混淆。

  • 相关阅读:
    Python之利用 gensim的word2vec进行酒店评论+wiki百科语料联合词向量训练
    Python之酒店评论主题提取LDA主题模型
    Python之酒店评论分词、词性标注、TF-IDF、词频统计、词云
    Pycharm使用技巧----Pycharm工程使用anaconda环境
    Python之Pandas 简介与Pandas 读取csv文件及相关操作01
    csv文件用excel打开乱码的解决方案
    apply()和call()的方法
    如何将webstrom本地的代码上传到github上
    通过Ajax方式上传文件,使用FormData进行Ajax请求
    Express bodyParser中间件使用方式
  • 原文地址:https://www.cnblogs.com/cxynb/p/13509775.html
Copyright © 2020-2023  润新知