信息安全微專業(二) 抓包發包

1、網絡抓包

1. wireshark

winpcap→npcap
lookback抓取本地迴環php

【模擬實驗1】抓取aq.163.comhtml

選網卡選波動最大的
快速滾動的顏色區域是數據包,一行表明一個包,不一樣顏色表明不一樣類型
什麼都不幹,網卡也會有大量數據通訊(內網通訊、本地迴環、本地默認服務和後臺運行程序……)
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)

過濾規則:mysql

eq == 等於
ne != 不等於
gt > 大於
lt < 小於
ge >= 大於等於
le <= 小於等於
and && 邏輯與
or || 邏輯或
xor ^^ 邏輯異或
not ! 邏輯非

協議過濾格式:tcp / udp / http / udp&&dns / dup&&!dns
IP過濾格式:ip.src==10.219.163.0/24linux

ip.src    源地址
ip.dst    目的地址
ip.addr   源地址 / 目的地址

端口過濾:tcp.dstport==80
內容過濾:
http.request.uri contains'static'
http.request.uri matches "^/static/"git

contains  匹配字符串,包含指定的字符串
maches    匹配正則表達式。"^/"表示開始,"static"爲指望的字符串

源IP統計:菜單 > 統計 > IPv4 statistics > All address
計算全部IP的請求排行,排行結果能夠導出另做他用github

【模擬實驗2】研究三次握手golang

2.tcpdump

安全排查須要服務器抓包,可是linux系統通常是命令行,無GUI,內網訪問控制很難安裝第三方抓包程序
kali默認安裝tcpdumpweb

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簡化流程:

2、網絡發包

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腳本運行

相關文章
相關標籤/搜索