乐趣区

关于信息安全:信息安全微专业二-抓包发包

一、网络抓包

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 偏移长度匹配 GET
tcpdump '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 脚本运行

退出移动版