• 数据包取证分析笔记


    地址扫描

    地址扫描探测是指利用ARP、ICMP请求目标网段,如果目标网段没有过滤规则,则可以通过回应消息获取目标网段中存活机器的IP地址和MAC地址,进而掌握拓扑结构。

    在这里插入图片描述

    端口扫描

    全连接扫描

    TCP扫描
    全连接扫描调用操作系统提供的connect()函数,通过完整的三次TCP连接来尝试目标端口是否开启。全连接扫描是一次完整的TCP连接。

    在这里插入图片描述
    端口开放状态

    1. 攻击机向扫描端口发送 SYN 请求连接此端口
    2. 靶机回复 SYN ACK 可以连接此端口 请确认
    3. 攻击机回复 ACK 确认连接
    4. 攻击机发送 RST ACK 断开连接 攻击机得到此端口状态为开启
      在这里插入图片描述

    端口关闭状态

    1. 攻击机向扫描端口发送 SYN 请求连接此端口
    2. 靶机回复 RST 表示你要连接的端口没有开放
      在这里插入图片描述

    问题:找到攻击者扫描过的端口有哪些?

    利用过滤器过滤ip和包类型从而判断攻击机扫描了那些端口,且端口开放。
    tcp扫描主要过滤 RST 包,即攻击机在成功连接后请求关闭的端口。

    ip.src_host==攻击机IP and ip.dst_host==靶机IP and tcp.flags.reset==1
    
    • 1

    tcp.flags.reset 表示 tcp标志为rst的包

    在这里插入图片描述

    半连接扫描

    SYN 扫描
    半连接使用不完整的TCP连接,而是使用半连接状态判断端口是否开放,半连接扫描会减少端口连接开销,提高端口扫描速度。

    在这里插入图片描述

    端口开放状态

    1. 攻击机发送 SYN 请求连接此端口
    2. 靶机回复 SYN ACK 表示可以连接 请确认是否连接
    3. 攻击机发送 RST ACK 断开连接
      在这里插入图片描述

    端口不开放状态

    1. 攻击机发送 SYN
    2. 靶机回复 RST ACK
      在这里插入图片描述

    攻击机扫描了22端口,靶机回复syn ack,按理论攻击机收到靶机回复的 syn ack 就代表靶机此端口大概率开放,应发送RST断开连接,但是我的nmap并没有,可能需要多等一会儿。
    攻击机扫描了3306端口,靶机直接回复了RST,说明靶机明确不开放此端口

    在这里插入图片描述
    过滤 syn包说明攻击机扫描了 22,3306端口
    半开放扫描主要过滤 syn 包

    ip.dst_host == 192.168.1.80 and ip.src_host ==192.168.1.199 and tcp.flags.syn==1
    
    • 1

    在这里插入图片描述

    秘密扫描 TCP FIN

    FIN扫描
    fin包表示会话结束,发送fin包,如果回复rst包则表示端口可能关闭,如果没有相应表示端口可能开放,fin跟null包一样,具有不确定性,但是fin扫描在内网中因为没有完整的tcp连接可用避开ids,ips的检测。但我在实验中,不管是linux还是windows,准确性都很差。

    攻击者发送 TCPFIN ,靶机没有响应就是开放,如果端口没有开放返回 RST ACK

    在这里插入图片描述

    端口开放状态

    1. 攻击机发送 TCP FIN
    2. 靶机不回复
      在这里插入图片描述
      在这里插入图片描述

    端口不开放状态

    1. 攻击机发送 TCP FIN
    2. 靶机回复 RST ACK
      在这里插入图片描述

    FIN 扫描 过滤 FIN 包

    ip.addr == 攻击机ip and ip.addr ==靶机ip and !ssh and tcp.flags.fin==1
    
    • 1

    通过过滤发现攻击机扫描了 22端口与3306端口

    在这里插入图片描述
    但是靶机只开放了22端口,3306并没有开放,所有只返回了3306端口的RST包

    在这里插入图片描述

    秘密扫描 TCP ACK

    ACK扫描
    tcp ack通常用于防火墙配置规则扫描
    tcpack利用标志位 ack,ack在tcp协议中表示确认序号有效,确认连接,但因为tcpack并没有完整的tcp连接,所以靶机都会返回 RST,所以无法用于端口扫描,但可用用于检测防火墙拦截了那些端口与放开了那些端口。

    端口被防火墙拦截情况

    1. 攻击机发送ACK
    2. 靶机无响应
      在这里插入图片描述
      在这里插入图片描述

    端口未被防火墙拦截情况

    1. 攻击机发送ACK
    2. 靶机回复RST
      在这里插入图片描述
      在这里插入图片描述

    nmap状态为unfiltered 未被过滤的,但是不能代表此端口开放。

    UDP 扫描

    采用 UDP ICMP 进行端口扫描,只能扫描udp协议的服务,不准确

    端口开放状态

    1. 攻击机发送 UDP 包
    2. 靶机回复 UDP 包或者基于UDP的上层协议
      在这里插入图片描述
      在这里插入图片描述

    端口不开放状态

    1. 攻击机发送 UDP 包
    2. 靶机回复 ICMP 包
      在这里插入图片描述
      在这里插入图片描述

    操作系统识别

    nmap 使用tcp/ip 协议栈识别操作系统,nmap保存了众多操作系统指纹特征,根据返回的特征与之匹配,如果无法匹配,则会以概率形式列举可能的系统。

    在这里插入图片描述

    首先通过ping arp 扫描,然后进行端口扫描,然后通过协议栈识别操作系统。

    在这里插入图片描述

    如果攻击者通过某种连接方式回显了操作系统版本比如执行了uname -a之类的命令,就可以通过通过正则识别

    tcp matches "(.*linux)"
    
    • 1

    在这里插入图片描述

    过滤重要字符串

    常见关键字

    eq,== 等于
    ne,!= 不等于
    gt,> 比…大
    lt,< 比…小 ge,>= 大于等于
    le,<= 小于等于 and,|| 且 or,&& 或 not,! 取反
    tcp.port == 80
    tcp.dstport  ==  80  //  只显tcp协议的目标端口80
    过滤端口范围
    tcp.port  >=  1  and  tcp.port  <=  80
    常见服务协议
    tcp
    udp
    arp
    icmp
    http
    smtp
    ftp
    dns
    msnms
    ip
    ssl
    oicq
    bootp
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    contains 过滤包含指定字符串的数据包
    matches 匹配过滤条件中给定的正则表达式

    HTTP过滤方法

    http.host contains magentonotes.com //过滤经过指定域名的http数据包,这里的host值不一定是请求中的域名
    http.response.code==302 //过滤http响应状态码为302的数据包
    http.response==1    //过滤所有的http响应包
    http.request==1     //过滤所有的http请求
    http.request.method==POST   //过滤所有请求方式为POST的http请求包,其它 方法也可以 比如 put,get等
    http.cookie contains guid      //过滤含有指定cookie的http数据包
    http.server contains “nginx”    //过滤http头中server字段含有nginx字符的数据包
    http.content_type == "text/html" //过滤content_type是text/html的http响应、post包,即根据文件类型过滤http数据包
    http.content_encoding == “gzip”//过滤content_encoding是gzip的http包
    http.transfer_encoding == “chunked”//根据transfer_encoding过滤
    http.content_length == 279      //根据content_length的数值过滤
    http.content_length_header == “279″     //根据content_length的数值过滤头大小
    http.server     //过滤所有含有http头中含有server字段的数据包
    http.request.version == “HTTP/1.1″      //过滤HTTP/1.1版本的http包,包括请求和响应
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    例题

    找到目标 CMS 信息
    利用 matches 正则快速过滤包括 powered by 的字符

    http matches "(.*?)powered by"
    
    • 1

    在这里插入图片描述

    找到黑客通过SQL注入攻击时的软件名称
    通过 正则匹配 sql,and 只有 request 的包

    http matches "sql.*" and http.request==1
    
    • 1

    在这里插入图片描述
    找到黑客登陆网站后台所用的账号密码

    http.request.method==POST and http.request==1 and http matches "username"
    
    • 1

    在这里插入图片描述

  • 相关阅读:
    Redux详解(二)
    【 OpenGauss源码学习 —— 列存储(CUStorage)】
    Kafka学习笔记(三)
    解决网页 H5 对接微信 JSSDK 后自定义分享和跳转APP等没效果
    Mysql第三篇---响应太慢?数据库卡顿?如何优化?
    网络空间开源威胁情报分析的人机优化策略研究
    C++语法2
    基于.NET Core + Quartz.NET+ Vue + IView开箱即用的定时任务UI
    防止消息丢失与消息重复——Kafka可靠性分析及优化实践
    uniapp实现可拖动悬浮按钮(最新版2024-7月)
  • 原文地址:https://blog.csdn.net/qq_38626043/article/details/127906609