安全矩阵

 找回密码
 立即注册
搜索
查看: 1808|回复: 0

陈强的学习日记

[复制链接]

252

主题

252

帖子

1307

积分

金牌会员

Rank: 6Rank: 6

积分
1307
发表于 2021-12-4 23:50:34 | 显示全部楼层 |阅读模式
本帖最后由 chenqiang 于 2021-12-4 23:50 编辑

关于CTF的取证分析(流量分析篇)
  计算机取证,顾名思义,可以理解为利用计算机对非法计算机入侵者或非法计算机操作进行罪证提取。在实际生活中,我们常用取证分析这项技术进行一些案件的勘破,而在CTF比赛中,出题人会将flag放置在取证相关的题目里,比如流量包、日志文件、镜像等。由于取证相关的题目的信息量较大,我们不能对它逐个分析,这时,需要掌握一定的技巧。
  一、流量分析
    在进行流量分析时,工具我们一般都会使用Wireshark和科莱对下载好的pcap流量文件进行分析,自我感觉科莱的界面更加直观一点,方便查找。这里,就一个文件,进行分析。
    在Wireshark的“统计”功能中,可以大致分析流量,利用协议分级和会话统计进行协议和IP地址的分析,从而找到我们需要分析的点。
               
   
    可以追踪TCP流或者Http流进行下一步的分析,另外,Wireshark的文件功能支持数据的导出。
            
           
       在上面可以看到请求方式,内容,访问的ip等其他重要信息。今天在vivo千镜杯中划水的时候碰见一题,就是利用流量分析,找到hacker入侵的ip、端口以及上传马子的php文件名,然后利用找到的信息和留下来的脚本跑出flag,有机会复现一下。
       有时候,我们会遇见好多SSL协议的流量包,之前看到有文章利用Wireshark解析SSL密钥日志,然后利用“协议”功能在“(pre)-Master-Secret Log Filename”中填入密钥文件的路径,可以解密部分SSL流量。
       如果在分析流量包时,发现都是正常的数据不能下手时,我们可以尝试检查各字段,看是不是有隐藏数据。隐藏数据这一块暂时没有遇到,所以没有合适的方法,后面遇到会更新。
       还有就是一种USB/鼠标流量分析,上次遇到过一次,但苦于没有了解过,没能解出,关于USB数据的具体,这里不再说了,度娘哪里都有。USB键盘数据报每次有8字节。一般情况下,都是逐个键按下,所以关注第0字节的组合键状态和第2字节的按键码。获取到数据后,可以利用脚本还原信息,再分析。后面看到有大佬用tshark分析,这样更方便快捷了。
        tshark.exe -r usb1.pcap -T fields -e usb.capdata > usbdata.txt

  1. mappings = { 0x04:"A",  0x05:"B",  0x06:"C", 0x07:"D", 0x08:"E", 0x09:"F", 0x0A:"G",  0x0B:"H", 0x0C:"I",  0x0D:"J", 0x0E:"K", 0x0F:"L", 0x10:"M", 0x11:"N",0x12:"O",  0x13:"P", 0x14:"Q", 0x15:"R", 0x16:"S", 0x17:"T", 0x18:"U",0x19:"V", 0x1A:"W", 0x1B:"X", 0x1C:"Y", 0x1D:"Z", 0x1E:"1", 0x1F:"2", 0x20:"3", 0x21:"4", 0x22:"5",  0x23:"6", 0x24:"7", 0x25:"8", 0x26:"9", 0x27:"0", 0x28:"n", 0x2a:"[DEL]",  0X2B:"    ", 0x2C:" ",  0x2D:"-", 0x2E:"=", 0x2F:"[",  0x30:"]",  0x31:"", 0x32:"~", 0x33:";",  0x34:"'", 0x36:",",  0x37:"." }
  2. nums = []
  3. keys = open('usbdata.txt')
  4. for line in keys:
  5.     if line[0]!='0' or line[1]!='0' or line[3]!='0' or line[4]!='0' or line[9]!='0' or line[10]!='0' or line[12]!='0' or line[13]!='0' or line[15]!='0' or line[16]!='0' or line[18]!='0' or line[19]!='0' or line[21]!='0' or line[22]!='0':
  6.          continue
  7.     nums.append(int(line[6:8],16))
  8. keys.close()
  9. output = ""
  10. for n in nums:
  11.     if n == 0 :
  12.         continue
  13.     if n in mappings:
  14.         output += mappings[n]
  15.     else:
  16.         output += '[unknown]'
  17. print 'output :n' + output

复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-4-19 07:38 , Processed in 0.014200 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表