Web安全班作业 | wireshark抓包+中间人攻击+绕过CDN+ARL灯塔+编写扫描器
2021-09-03 23:08:06 Author: mp.weixin.qq.com(查看原文) 阅读量:160 收藏

本文作者:某学员A(Web安全培训班1期学员)

按老师要求尝试完成布置的作业如下:

1.使用wireshark抓包,根据实际数据包,分析ARP报文结构

2.使用ettercap完成APP中间人攻击

3.Python3实现TCP扫描器

4.查真实IP

5.搭建ARL灯塔

一、wireshark抓包分析

WireShark简介:

Wireshark是一款最流行和强大的开源数据包抓包与分析工具,没有之一。在SecTools安全社区里颇受欢迎,曾一度超越Metasploit、Nessus、Aircrack-ng等强悍工具。该软件在网络安全与取证分析中起到了很大作用,作为一款网络数据嗅探与协议分析器,已经成为网络运行管理、网络故障诊断、网络应用开发与调试的必用工具。

上面是wireshark的主窗口,分三大主块:packlist list(数据包列表),Packet Details(数据包细节),Packet Bytes(数据包字节)。

WireShark抓包分析

TCP报文

TCP:(TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP时面向连接的所以只能用于点对点的通讯)

源IP地址:发送包的IP地址

目的IP地址:接收包的IP地址

源端口:源系统上的连接的端口

目的端口:目的系统上的连接的端口


TCP报文格式

具体过程:

TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答SYN,ACK。这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议。第一次握手:建立连接时,客户端发送SYN包(SEQ=x)到服务器,并进入SYNSEND状态,等待服务器确认。第二次握手:服务器收到SYN包,必须确认客户的SYN(ACK=x+1),同时自己也送一个SYN包(SEQ=y),即SYN+ACK包,此时服务器进入SYNRECV状态。第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ACK=y+1),此包发送完毕,客户端和服务器进入Established状态,完成三次握手。

封装包详细信息

这个TCP包分为4部分,分别代表物理层、数据链路层、网络层、传输层的数据,如果有应用层数据会出现第五层。

第一行,Frame帧,其中10319表示所抓帧的序号为10319,捕获字节等于传送字节为66bits;

第二行,Ethernet以太网,有线局域网技术,代表第二层数链层。可以看到源Mac地址为:54:0d:f9:09:da:f1目标mac地址为:94:e6:f7:41:e0:ce

第三行,Internet Protocol Version 4 IPv4协议,网络层;源ip地址为124.227.148.1 目的IP地址为192.168.3.235

第四行,Transmission Control Protocol TCP协议,传输层,源端口80,目的端口5565,ACK代表TCP数据包首部中的确认标志,对已接收到的TCP报文进行确认,值为1表示确认号有效,len为0 因此没有第五行的data。

Frame信息组成

接下来具体看看每层包内具体记录的内容

•Arrival Time:到达时间,

•EPoch 信息出现时间,值为1629875461.343240000时间戳格式

•[ Time delta from previous captured frame:] :与之前捕获数据帧之间的时间差0.000316000s

•[Time delta from previous displayed frame: ]:与之前显示的帧的时间差0.000316000s

•[Time since reference or first frame: ]:距参考帧或第一帧的时间差:237.546855000s

•Frame Number:10319帧的编号为10319

•Frame Length:66byites帧长度为66字节

•capture Length:捕获内容为66字节

•Frame is marked:false 帧未被标记

•Frame is ignored:false 帧未被忽略

•Protocols in frame:帧内协议 以太网\EtherType(IEEE802.3)\IP\TCP协议

Ethernet II信息组成

•Destination:54:0d:f9:09:da:f1记录目标的mac地址

•Source:94:e6:f7:41:e0:ce记录了源IP地址

•Type:IPv4 类型为IPv4的数据包

IPv4 协议 信息组成

•Version:4 协议版本为IPv4

•header length:20bytes 头部大小20字节

•Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: Not-ECT),区分的服务领域:0x00 (默认的是DSCP:0x00);

•Flags:dont fragment不支持分组

•fragment offset:0 分组的偏移量为0

•Time to live: 128,TTL,生存时间为64,TTL通常表示包在被丢弃前最多能经过的路由器个数,当数据包传输到一个路由器之后,TTL就自动减1,如果减到0了还没有传送到目标主机,那么就自动丢失。

•Header checksum: 0xcebd [correct],头部校验和

•Source: 192.168.3.235 ,源IP地址为192.168.21.175

•Destination Address:124.227.148.1目的ip地址为124.227.148.1

TCP数据 信息组成

•source port:5565 源端口为5565

•destination Port:80 目的端口80

•steam index:83流序号为83

•Sequence Number:0 后面括号表示该字段为相对序列号,用来确定传送数据的正确位置,并可以通过该序列号来侦测包是否丢失,

–下个序列号数字为1 (next sequence number:1)

•数据包头大小为32字节

•flags,包含六个标志:ACK:确认序号有效;SYN:同步序号用来发起一个连接;FIN:发端完成发送任务;RST:重新连接;PSH:接收方应该尽快将这个报文段交给应用层;URG:紧急指针(urgentpointer)有效;

•windows窗口大小:TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节。窗口大小是一个16bit字段,因而窗口大小最大为65536字节,上面显示窗口大小为1825字节;

•checksum十六位校验和,检验和覆盖了整个的TCP报文段,由发端计算和存储,并由接收端进行验证。

二、Ettercap完成中间人攻击

EtterCap初探

EtterCap是一个基于ARP地址欺骗方式的网络嗅探工具,主要适用于交换局域网络。借助于EtterCap嗅探软件,渗透测试人员可以检测网络内明文数据通讯的安全性,及时采取措施,避免敏感的用户名/密码等数据以明文的方式进行传输。主要用于进行中间人攻击(Main-in-the-middle attack)

ettercap mitm方法

•ARP  ARP欺骗

•ICMP 发送ICMP数据包重定向到kali,然后由kali转发(只有受害者发出的数据包经过kali)

•DHCP 发送DHCP数据包,让受害者认为kali是路由器(只有受害者发出的数据包经过kali)

•Swith Port Stealing ARP静态绑定欺骗

•NDP IPv6协议欺骗技术

EtterCap图形化界面

配置完后点击右上角对号,进入如下界面

其中中间人攻击方式:

其他选项有

ettercap中间人攻击复现

环境是虚拟机下以NAT方式搭建的学习环境,并非真实环境!

首先扫描局域网环境下存活主机,四个存活ip,其中网关是192.168.184.2

将网关放入target1,目标主机放入target2

此时通过view->connection 可以看到目标主机与外界交互的数据包。下图捕获到了目标主机GET请求访问4399的数据包。

三、Python3实现TCP端口扫描器

Python3实现简单的TCP端口扫描

TCP端口扫描的分类

针对不同TCP发包达到探测目的的扫描主要分为以下四种方式:

•TCP connect扫描:也称为全连接扫描,这种方式直接连接到目标端口,完成了TCP三次握手的过程,这种方式扫描结果比较准确,但速度比较慢而且可轻易被目标系统检测到。

•TCP SYN扫描:也称为半开放扫描,这种方式将发送一个SYN包,启动一个TCP会话,并等待目标响应数据包。如果收到的是一个RST包,则表明端口是关闭的,而如果收到的是一个SYN/ACK包,则表示相应的端口是打开的。

•Tcp FIN扫描:这种方式发送一个表示拆除一个活动的TCP连接的FIN包,让对方关闭连接。如果收到了一个RST包,则表明相应的端口是关闭的。

•TCP XMAS扫描:这种方式通过发送PSH、FIN、URG、和TCP标志位被设为1的数据包。如果收到了一个RST包,则表明相应的端口是关闭的。

利用Python3实现简单的TCP全端口扫描器

基本思路就是,尝试对目标IP的指定范围端口建立socket连接,如果连接成功,则与该端口完成整个三次握手的过程,证明该端口存活,如果连接超时则尝试与下一个端口建立连接,循环直至与所有端口尝试过建立连接,达到端口探测的目的

# 全连接扫描实现
# -*- coding: utf-8 -*-
from socket import *def portScanner(host,port):
    try:
        datasocket = socket(AF_INET,SOCK_STREAM)
        datasocket.connect((host,port))
        print(f'端口 {port} 开放')
        datasocket.close()
    except:
        passdef main():
    setdefaulttimeout(1)
    for p in range(70,444):
        portScanner('47.96.102.237',p)if __name__ == '__main__':
    main()

以探测ms08067.com的真实ip为例,输出结果!

目前该demo只是简单实现了tcp全端口扫描的功能,实际上速度较慢,由于本周时间有限,下一步会尝试使用多线程提升扫描速度,并对其他的TCP扫描方式编写DEMO并进行相应知识的学习。

四、绕过CDN查找真实IP

CDN

在不同地域的用户访问网站的相应速度存在差异,为了提高用户访问的相应速度、优化现有Internet中信息的流动,需要在用户和服务器间加入中间层CDN.使用户能以最快的速度,从最接近用户的地方获得所需的信息,彻底解决网络拥塞,提高响应速度,是目前大型网站使用的流行的应用方案。

CDN概述

CDN全称是Content Delivery Network,即内容分发网络。其目的是通过在现有的Internet中增加一层新的Cache(缓存)层,将网站的内容发布到最接近用户的网络'边缘'的节点,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因,提高用户访问网站的响应速度。

流程图:

访问过程(未加速缓存服务)

我们先看传统的未加缓存服务的访问过程,以便了解CDN缓存访问方式与未加缓存访问方式的差别:

由上图可见,用户访问未使用CDN缓存网站的过程为:

1.用户输入访问的域名,操作系统向 LocalDns 查询域名的ip地址.

2.LocalDns向 ROOT DNS 查询域名的授权服务器(这里假设LocalDns缓存过期)

3.ROOT DNS将域名授权dns记录回应给 LocalDns

4.LocalDns得到域名的授权dns记录后,继续向域名授权dns查询域名的ip地址

5.域名授权dns 查询域名记录后,回应给 LocalDns

6.LocalDns 将得到的域名ip地址,回应给 用户端

7.用户得到域名ip地址后,访问站点服务器

8.站点服务器应答请求,将内容返回给客户端.

CDN访问过程(使用缓存服务)

1.用户输入访问的域名,操作系统向 LocalDns 查询域名的ip地址.

2.LocalDns向 ROOT DNS 查询域名的授权服务器(这里假设LocalDns缓存过期)

3.ROOT DNS将域名授权dns记录回应给 LocalDns

4.LocalDns得到域名的授权dns记录后,继续向域名授权dns查询域名的ip地址

5.域名授权dns 查询域名记录后(一般是CNAME),回应给 LocalDns

6.LocalDns 得到域名记录后,向智能调度DNS查询域名的ip地址

7.智能调度DNS 根据一定的算法和策略(比如静态拓扑,容量等),将最适合的CDN节点ip地址回应给 LocalDns

8.LocalDns 将得到的域名ip地址,回应给 用户端

9.用户得到域名ip地址后,访问站点服务器

10.CDN节点服务器应答请求,将内容返回给客户端.(缓存服务器一方面在本地进行保存,以备以后使用,二方面把获取的数据返回给客户端,完成数据服务过程)

通过以上的分析我们可以得到,为了实现对普通用户透明(使用缓存后用户客户端无需进行任何设置)访问,需要使用DNS(域名解析)来引导用户来访问Cache服务器,以实现透明的加速服务. 由于用户访问网站的第一步就是域名解析,所以通过修改dns来引导用户访问是最简单有效的方式.


实战绕CDN查找某域名真实ip

FOFA查找真实IP

title信息查找

查看网站源码,以title为特征查找真实ip


语法fofa title="title内容"

其中一个IP地址可以访问网站并且能够跳转到其它页面,故判断其为真实ip

ICON信息查找

通过icon图标同样可以找到真实ip

SSL证书查找

提取证书的指纹信息

登录censys

https://censys.io/

根据指纹信息搜索


得到目标域名信息,点击该域名,并切换到host查询

成功得到真实ip地址


五、搭建ARL资产灯塔

ARL资产灯塔系统搭建

本次用的是centos 7系统对ARL进行搭建,该项目推荐在docker下运行,则以推荐的方式进行搭建。

Docker 安装

sudo yum install docker -y

这个命令默认安装的最新版本的docker

sudo systemctl start docker

启动docker

Docker-compose安装

curl -L "https://github.com/docker/compose/releases/download/版本信息/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

通过该命令下载特定版本的docker-compose,本次下载的是1.25.5

chmod +x /usr/local/bin/docker-compose

授予权限

ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

创建软连接

docker-compose --version

验证一下,成功安装.

Docker环境安装ARL

这里官方给出了文档:

https://github.com/TophantTechnology/ARL/wiki/Docker-%E7%8E%AF%E5%A2%83%E5%AE%89%E8%A3%85-ARL

mkdir docker_arl
wget -O docker_arl/docker2.4.zip https://github.com/TophantTechnology/ARL/releases/download/v2.4/docker.zip
cd docker_arl
unzip docker2.4.zip
docker volume create arl_db
docker-compose up -d

进行如上操作即可直接拉取镜像。

访问vps的5003端口,即可登录。

扫描下方二维码加入星球学习

加入后邀请你进入内部微信群,内部微信群永久有效!

 

 

来和5000+位同学一起加入星球学习吧!



文章来源: http://mp.weixin.qq.com/s?__biz=MzU1NjgzOTAyMg==&mid=2247495508&idx=1&sn=ce71022ce40d7f33fd802af155a967a1&chksm=fc3c5655cb4bdf434ae09b25df2ae724a4c2142ca62a951b4453fa7386887590f48ba03cbf8d#rd
如有侵权请联系:admin#unsafe.sh