1.2网安学习第一阶段第二周回顾(个人学习记录使用)

本周重点

①TCP/IP五层协议

1、数据链路层(ARP协议和攻击/欺骗)

2、网络层(Ipv4协议,ICMP协议和攻击/欺骗)

3、传输层(TCP协议和特性/攻击, UDD协议和特性/攻击)

4、应用层(DHCP协议,DNS的协议和攻击,HTTP协议)

②Python代码

1、递归

2、排序(冒泡,归并)

本周主要内容

DAY1 TCP/IP五层协议(数据链路层/网络层)

①Wireshark的安装和使用

winpcap(Npcap)需要安装

②数据链路层(基本作用)

封装成帧

数据链路层的报文格式:

网络中的常见的各种协议--报文格式总结学习-CSDN博客

差错校验:

FCS

发送端发送的数据帧:01010001【11】接收端:00110001【11】【11】

可靠传输:

通过交换机有线连接的方式,可靠传输一般交由上层处理。

③*数据链路层(ARP攻击和欺骗)

ARP:属于网络层,作用:根据IP找mac。

ARP攻击

虚拟网络环境

image-20231127152042592

#更新kali的工具包
apt-get install dsniff
​
#发起攻击
arpspoof -t 靶机ip地址(这里是【杨】) 网关ip地址
arpspoof -t 192.168.100.134 192.168.100.2
​
#linux查看ip信息
ip addr

**完成攻击后,靶机没有办法上网。

抓包测试,会发现很多李的报文。

image-20231127153614011

排查:

#查看mac表arp -a

解决:

使用静态绑定(mac地址 和 ip地址)

ARP欺骗

开启转发命令(kali)

echo 1 >> /proc/sys/net/ipv4/ip_forward

关闭转发

echo 0 >> /proc/sys/net/ipv4/ip_forward

区别

ARP欺骗:被攻击者没有感知;

ARP攻击:断网。

④网络层(Ipv4协议)

IPV4协议

小课堂 | 浅析IPV4的基本原理 - 知乎

报文内容

版本(version)

分成4和6

头长度(header length)

一般是20个字节(20 bytes)

区分服务(DSF)

可以不用管,因为现在一般没有用到

总长度

标识

为了区分是否是【同一个】数据

标志位:

第一位暂时不用管;第二位:不需要切片(0=需要,1=不需要)第三位:是否有更多的切片(0=没有更多,1=有更多)

TTL:

不是指时间,而是剩余的跳数;一般Linux最多的跳数是64,windows的是128;为什么需要TTL?防死循环。

Protocal(协议):

传输层的协议

check sum:

验证用的

目的IP地址和源IP地址:

IPV4协议里的源IP和目的IP地址是不会发生改变的。

段偏移

数据太大的时候,会对数据进行分段,该字段指的是分段后的原数据的偏移位。

DAY2 TCP/IP五层协议(网络层/传输层)&Python(递归)

①*Python代码(递归)

求阶乘

n = n*fact(n-1)

对一个数字的每一位求和

sum_digits = sum + sum_digits(n//10, n%10)

判断奇偶性(不同函数之间的递归)

is_even:    
    调用is_odd(n-1)
    
is_odd:
    调用is_even(n-1)

同一个函数多次递归

fib(n) = fib(n-1) + fib(n-2)

求方法数

partition_counts(n, m) = partition_counts(n-m, m) + partition_counts(n, m-1)

②网络层(ICMP协议)

ICMP协议

监测网络是否可用。

image-20231128141207111

报文分析

Type:Code
TYPECODE含义
8(回显请求)0正常请求
00正常响应
3(不可达)0网络不可达
31主机不可达
33端口不可达
5(重定向)0网络重定向
51主机重定向
11(超时重传)0数据包的TTL=0的时候,还没有到达目的地

重定向作用

image-20231128142511551

③*网络层(ICMP攻击和欺骗)

ICMP欺骗(重定向试验)**

准备两台机器:

kali:100.181靶机:100.134

kali

apt-get install netwoxnetwox 86 -g 假网关地址 -i 真实网关

image-20231128145318090

*ICMP泛洪攻击(FLOOD,DDOS)

大量的ping对靶机进行攻击

hping3 -1(ICMP) -d 数据包大小 --flood 目标机器的ip 

虚拟机桥接模式设置

image-20231128165129621

image-20231128165219558

④*传输层(TCP协议)

概述

传输层的协议主要是两个,TCP,UDP。TCP是可靠的,UDP是不可靠的。

TCP特性

可靠;流量控制;拥塞控制(全局);连接管理;区分服务(通过端口进行区分)

和UDP对比

TCPUDP
连接性面向连接(有连接)无连接
可靠性可靠不可靠
首部占用空间
传输速率
应用场景浏览器,文件传输,邮件发送直播,视频,游戏(以前的游戏,现在的没试过)
应用层协议HTTP,HTTPS,FTP,SMTP,DNSDNS

为什么需要三次握手

image-20231128173722653

过程

客户端发起连接,随机的分配一个端口号(TODO,端口号的范围补充),这个端口号是用来和服务器进行通信,建立连接后,服务器再分配一个端口号和客户端进行通信。

报文格式

image-20230920113808473

SEQ和ACK(三次握手报文)

测试网页:www.china-ef.com

image-20231128175428787

DAY3 TCP/IP五层协议(传输层)&Python(排序)

①*Python代码(排序)

线性查找:

7, 18, 19, 100, 130, 300, 500, 501, 1321,........n

如果数字是N条,那么最坏的情况就需要计算N次,

时间复杂度: 数据量是1000,也就是说n=1000,O(800万)=800万,O(n)=n

二分查找

7, 18, 19, 100, 130, 300, 500, 501, 1321

我们要找的是:1321,先看中间的数字开始找

如果,数组的长度是N,那么:O(N)=log​2​​(N)

代码实现

def binary_search(arr, left, right, x):   
    mid = (left + right)//2    
    if (arr[mid] == x):        
        return mid    
    elif arr[mid] > x:        
        return binary_search(arr, left, mid-1, x)    
    elif arr[mid] < x:        
        return binary_search(arr, mid+1, right, x)

注意,可以用 二叉树代替数组。

ps.计算机三基:体系结构(提过),操作系统(偏重),数据结构和算(重点),网络(重点)。

排序

无序:130, 18, 7, 19, 100, 300, 500, 501, 1321;

假如排序的时间复杂度:O(N)=N^​2

冒泡排序

代码

def bubbleSort(arr):
    n = len(arr)
 
    # 遍历所有数组元素
    for i in range(n):
 
        # Last i elements are already in place
        for j in range(0, n-i-1):
 
            if arr[j] > arr[j+1] :
                arr[j], arr[j+1] = arr[j+1], arr[j]
 
arr = [64, 34, 25, 12, 22, 11, 90]
 
bubbleSort(arr)
 
print ("排序后的数组:")
for i in range(len(arr)):
    print ("%d" %arr[i]),

时间复杂度是 O(N)=N^​2​​

归并排序

原数组 = [5, 4, 1, 8, 7, 2, 6, 3]

a = [1, 4, 5, 8]

b = [2, 3, 6, 7]

步骤:

a = [4, 5, 8]
b = [2, 3, 6, 7]
C = [1, ]

a = [4, 5, 8]
b = [3, 6, 7]
C = [1, 2, ]

a = [4, 5, 8]
b = [6, 7]
C = [1, 2, 3, ]

a = [5, 8]
b = [6, 7]
C = [1, 2, 3, 4, ]

a = [8]
b = [6, 7]
C = [1, 2, 3, 4, 5, ]

a = [8]
b = [7]
C = [1, 2, 3, 4, 5, 6, ]

a = [8]
b = []
C = [1, 2, 3, 4, 5, 6, 7]

a = []
b = []
C = [1, 2, 3, 4, 5, 6, 7, 8]

伪代码

def merge_sort(arr, left, right):    
mid = (left+right) //2    
merge_sort(arr, left, mid)    
merge_sort(arr, mid+1, right)    
merge(arr, left, mid, right)

归并排序代码(选择)

#a = [1, 3, 5, 7]
#b = [2, 4, 6, 8]
#C = [1, 2, 3, 4, 5, 6, 7, 8]
#arr = [1, 3, 5, 7, 2, 4, 6]

def merge(arr, left, right, mid): 
    n1 = mid - left + 1    
    n2 = right - mid    
    
    LEFT = [0]* (n1)    
    RIGHT = [0]*(n2)    
    
    #把旧的数组的值给一个新的数组(左边的小数组)    
    for i in range(0, n1):        
        LEFT[i] = arr[left+i]    
        
    # 把旧的数组的值给一个新的数组(右边的小数组)    
    for j in range(0, n2):       
        RIGHT[j] = arr[mid + 1 + j]    
        
        i = 0    
        j = 0    
        k = left    
        
    #核心操作,把两个数组合并到一个大的数组里面    
    while i < n1 and j < n2:        
        if LEFT[i] <= RIGHT[j]:            
            arr[k] = LEFT[i]            
            i = i+1        
        else:            
            arr[k] = RIGHT[j]            
            j = j+1        
            k = k+1    
            
    # 处理第一个数组剩余的元素   
    while i < n1:        
        arr[k] = LEFT[i]       
        k = k+1        
        i = i+1    
    # 处理第二个数组剩余的元素    
    while j < n2:        
        arr[k] = RIGHT[j]        
        k = k + 1        
        j = j + 1
        
def merge_sort(arr, left, right):    
    if left < right:        
        mid = (left + right) // 2        
        merge_sort(arr, left, mid)        
        merge_sort(arr, mid + 1, right)        
        merge(arr, left, right, mid)arr = [5,4,1,8,7,2,6,3]
        merge_sort(arr, 0, len(arr)-1)print(arr)
        
#arr = [1,2, 3, 5, 7, 4, 6, 8, 9]
#merge(arr, 0, 8, 4)
#print(arr)

时间复杂度(选择)

归并的时间复杂度: O(n)=nlog2(n)

②传输层(TCP特性/待续)

流量控制(局部)

image-20231129170246804

通过滑动窗口调整发送数据的大小;

滑动窗口在客户端和服务器端都有,窗口要一致。

拥塞控制(全局)

为了做全局的控制。

image-20231129171237256

可靠传输

累计确认

最后一条数据丢失

image-20231129171631472

累计确认-情况2

中间有数据丢了

image-20231129171800132

image-20231129172604827

三次握手

image-20231129172736734

image-20231129173328976

DAY4 TCP/IP五层协议(传输层/应用层)

①传输层(TCP特性/续)

四次挥手

image-20231130102553819

TCP连接是双向传输的对等的模式,就是说双方都可以同时向对方发送或接收数据。当有一方要关闭连接时,会发送指令告知对方,我要关闭连接了。这时对方会回一个ACK,此时一个方向的连接关闭。但是另一个方向仍然可以继续传输数据,等到发送完了所有的数据后,会发送一个FIN段来关闭此方向上的连接。接收方发送ACK确认关闭连接。注意,接收到FIN报文的一方只能回复一个ACK, 它是无法马上返回对方一个FIN报文段的,因为结束数据传输的“指令”是上层应用层给出的,我只是一个“搬运工”,我无法了解“上层的意志”。

如果提前close,会发生以下问题:

image-20231130103340936

自己要思考的问题:

1. 在close前设置【时间等待】的状态,如何避免这个问题。2. 2MSL如何设置合理(提示:2)。

②传输层(TCP攻击-SYN半连接攻击)

原因:TCP,或者UPD相关的攻击很多不如ICMP效果明显,为什么SYN,UDP泛洪会作为攻击的选项。

很多服务器会禁止ping的功能,TCP没有办法完全禁止。

步骤:

win7安装telnet服务

image-20230920174714576

先用win+R,再输入,services.msc,找到telnet服务并开启:

image-20231130110442996

在win7里面输入netstat -anop tcp查看23端口的连接

image-20230920174856498

用kali对win7进行攻击:

第一种:普通攻击

hping3 -S -p 23 靶机地址

第二种:flood

hping3 -S -p 23 --flood 靶机地址

第三种:随机ip地址

hping3 -S -p 23 --flood --rand-source 靶机地址

③传输层(UDP协议)

UDP是不可靠传输,也就是中间丢包也不会进行重发,客户端只管发送,服务端只管接收。

image-20230921112412977

报文内容

源端口,目标端口长度,checksum(检验和)数据(真实的数据)。

④*传输层(UDP泛洪攻击)

用win server 2016当做DNS服务器。kali泛洪攻击win2016,看看服务会不会挂掉。

win2016设置

image-20230921113429322

image-20230921113504431

image-20230921113549414

关闭2016的防火墙(可以不关试试是否生效)

设置win10

把win10的dns服务器改成win2016的ip地址

netsh interface ip set dnsserver "Ethernet0" static win2016的ip地址

使用kali对2016进行泛洪攻击

hping3 -2 -d 10000(单个数据包) -c 10000(多少个数据包) -p端口号 --flood 192.168.10.133(IP)

现象

win10使用

nslookup www.woniuxy.com     ##会有timeout。

ps.注意要清除dns缓存:ipconfig /flushdns

⑤应用层(DHCP协议)

dynamic host configuration protocal,动态主机配置协议,是应用层的协议,基于UDP协议,端口是68(客户端)和67(服务端)。

主机安装了DHCP的服务,就可以分配IP地址等信息。

DHCP交互过程

image-20231130152251886

discover:客户端寻找dhcp服务器;

offer:服务器告诉客户,我可以提供xxxip给你用;

request:客户端告诉所有的”人”,我已经选好ip了。

ack:被选中的服务器确认,

ip地址是租用的形式,所以会有租期,租期是服务器设置。

如果租期超过一半,客户端会重新发送request请求,请求续租。

如果租期超过0.875倍,会继续发送request请求,请求续租。

如果过期,客户端会重新发送discover报文。

DHCP抓报文实验

win server 2016(ps.设置仅主机模式连接网络,要设置静态IP为DHCP网段)

image-20231130160326771

image-20231130160342436

image-20231130160433233

image-20231130160353433

image-20231130160446247

这一步设置的ip设置成和vment网段一致。

image-20231130160500810

image-20231130160626224

image-20231130160639702

image-20231130160648291

开启wireshark

wireshark抓包

win10

win10设置仅主机(不能用虚拟机自带的vmnet1,并且要关闭自带的dhcp:

image-20231130160251567

image-20231130160751668

DAY5 TCP/IP五层协议(应用层)

①应用层(DNS协议)

什么是DNS

DNS就是域名系统,是因特网中的一【项核心服务】,是用于实现域名和IP地址相互映射的一个【分布式数据库】,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。

DNS查找过程

image-20231201104058180

image-20231201104738546

image-20231201105159423

根域

全球由13“台”根域名服务器(美国和欧洲,亚洲只有日本一个)

Linux试验

步骤:

nslookupset 
type=ns
.
------根据根域名服务器的域名找到ip地址---------
set type=a
a.root-servers.net.
-------得到了一个ip地址,比如:199.9.14.201,进入该ip地址(根域名服务器),找到顶级域名服务器---------
server 199.9.14.201
set type=ns
com.
-------根据顶级域名服务的ip,找域名服务器---------
server 192.55.83.30(顶级域名的ip地址)
baidu.com.
-------得到一个二级域名的服务器地址---------
server 220.181.33.31
set type=a
www.baidu.com.
-------得到一个cdn的地址-------
www.a.shifen.com.

DNS抓包分析

把win2016配置成DNS服务器(操作步骤和昨天一样);

image-20231201121331339

image-20231201121538473

image-20231201121715976

②*应用层(DNS攻击-伪装)

要准备3台电脑:

2016当作DNS服务器win10当作靶机kali当作攻击机

kali告诉win10:我是2016

kali再告诉2016:我是win10.

kali修改配置:

echo "www.woniuxy.com A 192.168.100.181" >> /etc/ettercap/etter.dns

打开ettercap-graphical:

image-20230922150352250

image-20230922150402553

image-20230922150413797

image-20230922150439810

image-20230922150448419

相关命令:

  1. win10清除dns缓存:ipconfig /flushdns

  2. win10清除浏览器缓存

  3. win10运行 nslookup www.woniuxy.com

  4. win10再浏览输入的http://www.woniuxy.com

  5. 2016清除dns缓存(右击【dns】,清除缓存)

  6. 启动service apache2 start

ps.可以修改网页 cd /var/www/html >>>vi index.html (i#修改,esc :wq#退出保存)

③应用层(HTTP协议)

超文本传输协议(Hypertext Transfer Protocal),HTTP;应用层协议,用到的传输层的协议是TCP。

浏览器可以解析http协议。主流的浏览器:谷歌(edge),火狐,IE,safari,opera。

HTTP报文格式

image-20231201163728203

请求头:

URL:统一资源定位符(ip,端口,文件)

image-20231201164431536

请求方法:

POST:一般是提交表单,相对安全,而且对大小没有限制;
GET:是体现在浏览器的地址里面,在【?】后面添加相关的内容,相对不安全,而且大小由限制。

image-20231201165611557

状态码:

1XX:表示通知信息,收到了正在处理;
2XX:表示正常3
XX:表示重定向
4XX:找不到资源
5XX:服务器的错误

一般是和HTML一起用的。

HTML

超文本标记语言,如果把http当作货车,html就是里面的货物。

<html xmlns="http://www.w3.org/1999/xhtml">    
    <head>        
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />        
           <title>我的第一个html</title>    
    </head>    
    <body>        
        <h1>hello html</h1>        
        <form action="/check" method = "post">            
            用户名:<input type="text">            
            密码:<input type="password">            
            <input type="button" value="提交">        
        </form>    
    </body>
</html>

一般和HTML放在一起的还由CSS以及javascript。

④非对称加密的基本概念

对称加密

f(x) = x+1, g(x) = x-1

特点:

相对不安全;处理比较快;管理麻烦(n(n-1)/2);

非对称加密

如果用A_private加密,那就必须使用A_public解密;

如果用A_public加密,那就必须使用A_private解密;

特点:

相对安全;计算比较复杂,处理慢;

证书

机构颁发的,

客户端看服务器

www.baidu.com --》是安全的
www.google.com --》 是安全的
www.91xxx.com ---》不受信的

服务器会看客户端的

网银场景

摘要

把一串很复杂的文字,变成一个相对简单的字符串。

hash(嗷嗷嗷大撒大撒阿萨大大实打实) —-> dsasda12

非对称加密的过程

image-20231201175058631

摘要=hash(原始信息)

数字签名=A_private(摘要)

传给Bob:

加密信息=S_key(原始信息, 数字签名, Alice的证书)
密钥信封 =B_pub(S_key)

Bob接收:S_key = B_private(B_pub(S_key))

原始信息,数字签名,Alice证书 = S_key(S_key(原始信息, 数字签名, Alice的证书))

摘要1 = A_public(A_private(摘要))

摘要2 = hash(原始信息)

if (摘要1 == 摘要2)

这个是Alice

查看Alice的证书

  • 21
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值