信息安全微专业 网络基础
Posted 绿茵华尔兹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了信息安全微专业 网络基础相关的知识,希望对你有一定的参考价值。
一、基础知识
1. 网络模型
1969--互联网诞生,APPANET研制成功(鲍勃泰勒、拉里罗伯茨);
1974--TCP/IP协议诞生(罗伯特卡恩、文顿瑟夫);
1984--OSI七层模型;
1989--万维网诞生,第一个web服务器和第一个web浏览器(蒂姆博纳斯李);
历史总结:
互联网的成长在于实践,在于创新;
互联网世界是平等的,每个人都充满了机遇;
TCP/IP协议的实现早于OSI标准的提出;
TCP/IP模型是理论和实践的总结,更符合实际场景
OSI七层模型:
只是一个参考模型,没有实际使用过
重点关注第四层和第七层
可以认为2到7层都是虚拟的,只有第一层(物理层)是真实存在的连接;
用户输入的信息经过7到2层的层层包装到达最底层。物理层根本不用理解包装的含义,在它眼里只有0和1,只要传输就是了;
接收是传输的逆向过程,把包装层层打开,最终将发送端的数据赤裸裸地呈现在接收端面前。
整个传输过程每一次只干一层的活,层与层之间是互不干涉的。在用户看来就相当于把信息直接发送给对方一样
TCP/IP模型:
TCP/IP模型的产生是在协议发明之后,是成功之后的总结,方便后人学习。又由于OSI这样的宏观模型已经存在,所以人们把新协议向旧协议上靠。有人得到四层模型,有人得到五层模型。后面以五层讲解(折中方案)。
原有的OSI 5、6、7层合并为应用层;
TCP/IP四层模型和五层模型的区别只是1层2层是否合并
常见协议对应的层次:
网络层协议的唯一支柱是IP协议。往上分成连接型的TCP协议和无连接型的UDP协议。根据应用层的场景各有所长各有所短
web安全更关注http、https协议;
主机密码爆破关注ssh、rdp协议;
“永恒之蓝”勒索病毒利用445端口的SMB协议
IP协议向下是2层的mac子层协议;
mac子层协议会把IP数据包包装成数据帧,并发送给对端的局域网地址(mac地址);
mac地址是网卡出厂时固化的;
因为以太网是目前使用最广泛的局域网技术,所以以太网帧是大家最熟悉的mac帧格式
TCP/IP五层的实现:
TCP/IP是实际存在的模型,所以每一层有对应的实现,也就是协议具体封装在什么实物里面(这里只是举例说明)
传输层、应用层,都可以用操作系统和上面安装的软件实现,不需要硬件;
常见的网络互连设备工作在下三层。比如一层的网线;二层的网卡和交换机;三层的路由器;
在网络安全领域,我们更关注上两层的漏洞
真实网络环境下的数据传输:
IP协议在整个网络传输过程中起到了至关重要的作用。它是唯一的,所有设备都要认它
路由器这样的三层设备成了串联数据传输中局域网的关键。无论是什么局域网,1层2层是什么,网络层必须是IP协议
TCP/IP协议的问题:
安全思维:安全需要质疑一切权威
设计初期只考虑到了开放性和便利性,并没有考虑到安全性
目前来看,TCPIP的安全缺陷是无法彻底修复的,只能在协议之外缓解
例子1:IP欺骗
IP协议从来都不会检查IP头中的源IP,信任发包机器的源IP地址。接收方收到的最终消息如果需要回复的话,可能会发送到另一台主机上
例子2:三次握手时延
如果三次握手最后的ACK包不发了,又会怎么样?
对方会不断发SYN-ACK包直到超时(DDoS)
安全测试常常要考虑的问题:不按常理出牌会不会导致协议崩溃?
2. IP地址
3. 主机端口
二、后面用到的补充知识点
1. TCP三次握手&四次挥手
2. DNS协议
3.补充
“你猜猜我要在这里写点啥”
二、网络抓包
1.wireshark
winpcap→npcap
lookback抓取本地回环
【模拟实验1】抓取aq.163.com
选网卡选波动最大的
快速滚动的颜色区域是数据包,一行代表一个包,不同颜色代表不同类型
什么都不干,网卡也会有大量数据通信(内网通信、本地回环、本地默认服务和后台运行程序……)
https对于wireshark加密
浏览器第一次请求http会跳转到https,对于多次访问的网站会默认缓存这个动作,不再请求http
设置过滤规则http.host=="aq.163.com"
输入时关键字会自动补全
自动检测输入,绿色底为书写正确
选中一行数据包后,下面会显示该数据包的详细数据(物理、mac、网络、传输、应用)
原始数据以16进制和字符串形式展示
右键点击--追踪流--http流
可查看完整的HTTP请求和响应(类似burp)
去诶单是仅可以抓取到HTTP。因为HTTPS是加密传输
过滤规则ip.addr==59.11.160.94
获取完整四层通信
前三个包:tcp三次握手
SYN包 > SYNACK包 > ACK包
建立tcp连接,发送http数据
服务端返回301跳转,变成https(响应包)
三次握手(443端口)
ssl握手(交换加密证书和秘钥。Certificate,Key EXchange)
过滤规则:
eq == 等于
ne != 不等于
gt > 大于
lt < 小于
ge >= 大于等于
le <= 小于等于
and && 逻辑与
or || 逻辑或
xor ^^ 逻辑异或
not ! 逻辑非
协议过滤格式:tcp
/ udp
/ http
/ udp&&dns
/ dup&&!dns
IP过滤格式:ip.src==10.219.163.0/24
ip.src 源地址
ip.dst 目的地址
ip.addr 源地址 / 目的地址
端口过滤:tcp.dstport==80
内容过滤:http.request.uri contains\'static\'
http.request.uri matches "^/static/"
contains 匹配字符串,包含指定的字符串
maches 匹配正则表达式。"^/"表示开始,"static"为期望的字符串
源IP统计:菜单 > 统计 > IPv4 statistics > All address
计算所有IP的请求排行,排行结果可以导出另作他用
【模拟实验2】研究三次握手
2.tcpdump
安全排查需要服务器抓包,但是linux系统一般是命令行,无GUI,内网访问控制很难安装第三方抓包程序
kali默认安装tcpdump
kali切换root用户:sudo -i
sudo -iu root
命令行开头变为井号,切换成功
查看tcpdump是否安装:tcpdump -h
tcpdump抓包:tcpdump tcp port 80 -nn -vv
参数解释:
-i 指定网卡
-any 监听所有网卡
-i eth0 监听eth0
-n / -nn 不解析主机名/端口名
-v / -vv 显示更多包信息
-r / -w 读取文件/输出到文件
-c 抓取包个数
-s 抓取每个包字节长度,0表示整个包数据包类型:
tcp / udp / icmp 协议关键字
src / dst 传输方向关键字
host / net / port 包类型关键字
and(&&) / or(||) / not(!) 逻辑表达式
[x:y] 高级包头过滤。指定数据包中的字符范围,类似wireshark中的contains
tcpdump生成pcap数据文件:tcpdump tcp port 80 -w aq.163.com.pcap
tcpdump指定多个端口:tcpdump tcp port 80 or port 443 -nn-vv
tcpdump 指定源host和目的端口:tcpdump -i any -nn -vv src host 192.168.164.136 and dst port 80
tcpdump配合gerp使用(linux搜索工具):tcpdump tcp port 80 -nn -vv | gerp\'163.com\'
tcpdump只抓取http请求:tcpdump tcp[20:4]=0x47455420 or tcp[20:4]=0x504f5354 -nn -vv
tcp头部一般20个字节,后面为数据部分,取数据部分前四个字节,写为TCP[20:4]
数据前四个字节为"GET+space",或者为POST,即为HTTP请求(取他们的16进制数据匹配)
更准确的写法:把20
换成(tcp[12:1]&0xf0)>>2
经典面试题:从url输入到页面展现发生了什么?
3.数据包分析
【模拟实验3】DNS解析
wireshark中输入过滤规则:http contains "aq.163.com"
域名解析请求:dns contains "\\x02aq\\x03163\\x03com"
请求和响应对比:
IP协议--源/目的地址
UDP协议--源/目的端口
transcation ID
Flags
DNS资源记录的Name:\\x02
aq \\x03
163 x03
com \\x00
\\x03
www \\x06
google \\x03
com \\x00
DNS资源记录的Type:
DNS资源记录的TTL:
十六进制:0x012c;十进制:300
5分钟(300秒)后,DNS缓存过期
DNS重绑定(DNS Rebinding):自建DNS服务器,TTL设置为0,每时每刻都要和DNS服务器交互
无论域名解析经过多少步,我们抓包只能看到step1的dns query和step8的dns response
linux dig命令:dig ag.163.com+trace
请求根服务器root-servers.net
,j服务器返回com域服务器
gtld-servers.net,b服务器返回163.com域名服务器
ns8.166.com返回aq.163.com的记录59.111.160.194
【模拟实验4】TCP握手
wireshark中输入过滤规则:http contains "aq.163.com"
,右键追踪tcp流
tcp连接的建立(三次握手)
tcp标志位
syn flag: 000010=0x02
syn-ack flag: 010010=0x12
ack flag:010000=0x10
三次握手之SYN包:
1.SYN=1, seq=x
flag=0x02, seq=2715693670
2.flag=0x12, seq=3526619357
ack=2715693670+1
3.flag=0x10
seq=2715693670+1
ack=3526691357+1
TCP连接的释放(四次挥手):
实际情况1:输入aq.163.com快速关闭浏览器后,客户端发送FIN到服务端(第一步),服务端发送FIN到客户端(包含第二三步),客户端发送ACK,TCP断开(第四步)
实际情况2:一直不关浏览器,服务端发起,过程颠倒
【模拟实验5】HTTP请求
tcp[12:1]
前面有3行,每行4字节,取12个字符后开始的第一个字节
tcp[12:1]&0xf0
只取前4个比特,后4个比特是0
4
得到数据偏移的数值
乘以4(<<2)
与真正的tcp头部长度差4倍,每个偏移可以表示4个字节,即向左移动两位
aq.163.com的http请求:
真实数据包中的tcp头部
tcp头部是8:8*4=32字节
tcp头部最大:15*4=60字节
HTTPS交互:
wireshark过滤规则:ip.addr==59.111.160.194
Client Hello:443端口刚刚建立好第一个传输包。cipher suites字段:加密算法
Server Hello:对Client Hello的响应。服务端从上面17种中选择1种,每种2字节,后续所有交互基于这种算法
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
EC- 椭圆曲线;-E 临时的
非对称加密算法:ECDHE_RSA。用于在握手过程中加密生成的密码(DH- 基于离散对数的秘钥交互算法)
对称加密算法:AES_128_GCM。用于对真正传输的数据进行加密
HASH算法:SHA256.用于验证数据的完整性
HTTPS简化流程:
三、网络发包
1.hping
源码地址:https://github.com/antirez/hping
开源。C语言编写。TCP/IP数据包的C语言经典实现
安装包下载地址:http://hping.org/download.php
kali下自带hping,免安装。只需在root下输入hping3 -h
,通过查看使用文档判断能否正常启动
红帽安装命令:yum install hping3
Debian安装命令:apt-get install hping3
136发包:hping3 --syn --flood 192.168.164.137
137抓包:tcpdump src host 192.168.164.136
Ctrl+C 停止抓包
通用参数:
-h, --help 显示帮助
-v, --version 显示版本
-I, --interface 网卡接口
-d, --data 发送数据包内容长度,缺省为0
-c, --count 发送数据包的数目,缺省一直发
数据包类型:
-1, --icmp 发icmp包
-2, --udp 发udp包
-S, --syn 发tcp包,标志位是syn
-A, --ack 发tcp包,标志位是ack
-R, --rst 发tcp包,标志位是rst
-F, --fin 发tcp包,标志位是fin
-P, --push 发tcp包,标志位是push
-U, --urg 发tcp包,标志位是urg
发送速率:
-i, -interval 发送数据包间隔ux,x是微秒
--fast -i u100000(每秒10个)
--faster -i u10000(每秒100个)
--flood 尽快发送
2.apachbench
开源。一个c文件。2000行代码
https://httpd.apache.org/docs...
kali:免安装自带。ab -h查看使用文档
红帽:yum install httpd-tools
Debian:apt-get install apache2-utils
开启.137的web服务:80端口/etc/init.d/apache2.start
.136的请求:显示apache首页证明启动好了curl http://192.168.164.137/ | grep title -t10
.136请求发包:ab -t 10 -C100 http://192.168.164.137 -C100
.137开启抓包:利用tcp偏移长度匹配GETtcpdump \'tcp[((tcp[12:1]&0xf0) >> 2):4] = 0x47455420\' -nn
.137应用层日志:tail -100 /var/log/apache2/access.log
.137启动apache:/etc/init.d/apache2 start
136 curl
137输入tcpdump命令,抓取get请求
136ab是否可以执行ab -h
输入发包命令
136源端口递增
137目的端口都说80,长度统一,访问的都是根目录,使用http1.0协议
Ctrl+C关闭抓包
tail日志
通用参数:
-h 显示帮助
-V 显示版本
-n 总共的请求执行数,缺省为1
-c 并发数,缺省为1
-t 测试所进行的总时间,单位为秒,缺省50000秒
HTTP格式参数:
-H 添加请求头,可重复该参数添加多行
-C 添加cookie信息,可重复该参数添加多个
-k 启用HTTP Keep Alive功能
-m 设置任意请求方法
-i 执行HEAD请求,而非默认的GET
-p 执行POST请求,而非默认的GET
-u 执行PUT请求,而非默认的GET
-T 添加Content -type头信息与-p和-u配合
ab设置UA
136:ab -n 100 -H "user-Agent:Mozila/5.0" http://192.168.164.137/
137:tail -n 10 /var/log/apache2/access.log
ab设置请求方法
136:ab -t10 -mPOST http://192.168.164.137
137:``
ab传递参数
136:echo \'{"name":"netease"}\' > data.json
ab -p data.json -T application/json http://192.168.164.137
137:tcpdump src host 192.168.164.136 -nn -vv
ab伪造IP
-x 设置代理,proxy:port模式。本机用port设置代理
136:ab -n 100 -X 192.168.164.1:8888 http://192.168.164.137
137:
收到的源IP地址为192.168.164.1
136上用burp>HTTP history查看历史
3.僵尸网络
僵尸网络(botnet)是攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络
其中用来发起命令,控制的信道是僵尸程序
控制服务器:command and control server / C&C / C2 / CnC
傀儡机(肉鸡):bot
C2服务器和肉鸡组成类似星型的网络
僵尸网络发包:
攻击者远程登录C2
控制C2向bots发送发包指令(进行攻击)
不计延时,所有肉鸡几乎同时收到指令
bots向受害者发包
mirai源码编译:https://github.com/jgamblin/M...
代码质量差,半成品,不建议阅读
bot目录最后生成的二进制文件是在肉鸡上运行的,因为涉及发包操作,考虑到效率,用C编写
cnc目录生成的二进制文件在主控上运行,用来和bot程序通信,给攻击者登录管理接口(go语言)
loader 下载器,可以在线下下载不同类型的bot程序
tools 加密小程序
scripts 脚本文件
mirai编译步骤
C2主控域名配置
编译加密工具:
root@kali:~/Mirai-Source-Code# cd mirai/tools && gcc enc.c -o enc.out
加密域名:
root@kali:~/MSC/mirai/tools ./enc.out string cnc.mirai.com
root@kali:~/MSC/mirai/tools ./enc.out string report.mirai.com
修改/mirai/bot/table.c代码
2.mysql数据库配置
kali自带MySQL。启动MySQL
root@kali:~/MSC/etc/init.d/mysql/start
Starting mysql (via systemctl):mysql service
修改root密码
修改/scripts/db.sql开始
CREATE DATABASE mirai;
use mirai;
CREATE TABLE \'history\'
修改/scripts/db.sql结束
CREATE TABLE \'whitelist\'(...);
INSERT INTO users VALUES (NULL, \'mirai\', \'mirai\'; 0.0.0.0,-1,1,30,\'\');
执行SQL脚本
修改/mirai/cnc/main.go数据库配置
(修改第三行密码为之前的mysql密码)
3.交叉编译环境配置
创建交叉编译目录:cross-compile-bin,必须与mirai的目录一致
瞎子啊其他平台的编译环境
修改环境变量 ~/.bashrc
环境变量立刻生效
更新软件列表。脚本会在线下载一下软件,比如gcc.golang,不更新下载不下来
执行 /script/cross-compile.sh脚本
4.go编译依赖包配置
go的MySQL数据库依赖
go的命令行解析依赖
5.运行编译脚本
创建debug目录
修改 /mirai/bot/includes.h
/mirai/build.sh脚本运行
以上是关于信息安全微专业 网络基础的主要内容,如果未能解决你的问题,请参考以下文章
SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端Eureka 服务信息Eureka 发现管理Eureka 安全配置Eureka-HA(高可用) 机制Eur(代码片段
网易云课堂微专业—Web安全工程师网易“白帽子黑客”训练营笔记