Dockerfile.router01
Dockerfile.router02
dockerfile을 보면 iproute2랑 tcpdump 패키지가 설치되어있는 모습을 볼 수 있다.
문제가 baby bgp인걸 보아 bgp 패킷을 가로채거나 확인하는걸로 추정됨.
bgp는 bordergateway protocol로 pc가 스위치 -> 라우터를 통해서 인터넷을 하는데
라우터는 말그대로 라우터들 무리에서 외부 내부 그 경계에 있는 라우터다.
bgp는 포트 179번에서 동작하는 프로토콜.
router01.sh
#!/bin/bash
IP_ADDR=$(ip addr show eth0 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1)
IFS='.' read -ra ADDR <<< "$IP_ADDR"
let "ADDR[3]+=1"
NEIGHBOR_IP="${ADDR[0]}.${ADDR[1]}.${ADDR[2]}.${ADDR[3]}"
cat > /etc/bird/bird.conf <<EOF
log syslog all;
router id $IP_ADDR;
protocol bgp dreamhack {
local as 65001;
source address $IP_ADDR;
graceful restart on;
neighbor $NEIGHBOR_IP as 65002;
import all;
export all;
}
protocol kernel {
scan time 60;
import none;
# export all; # Actually insert routes into the kernel routing table
}
protocol device {
scan time 60;
}
EOF
bird -c /etc/bird/bird.conf &
while true; do python3 /send.py; sleep 5; done
router02.sh
#!/bin/bash
IP_ADDR=$(ip addr show eth0 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1)
IFS='.' read -ra ADDR <<< "$IP_ADDR"
let "ADDR[3]-=1"
if [ ${ADDR[3]} -lt 0 ]; then
ADDR[3]=255
fi
NEIGHBOR_IP="${ADDR[0]}.${ADDR[1]}.${ADDR[2]}.${ADDR[3]}"
cat > /etc/bird/bird.conf <<EOF
log syslog all;
router id $IP_ADDR;
protocol bgp dreamhack {
local as 65002;
source address $IP_ADDR;
graceful restart on;
neighbor $NEIGHBOR_IP as 65001;
import all;
export all;
}
protocol kernel {
scan time 60;
import none;
# export all; # Actually insert routes into the kernel routing table
}
protocol device {
scan time 60;
}
EOF
bird -c /etc/bird/bird.conf -d &
exec /usr/sbin/sshd -D
send.py
from scapy.all import *
import netifaces as ni
def get_internal_ip(interface='eth0'):
ni.ifaddresses(interface)
ip = ni.ifaddresses(interface)[ni.AF_INET][0]['addr']
return ip
def calculate_neighbor_ip(own_ip):
ip_parts = own_ip.split('.')
ip_parts[3] = str((int(ip_parts[3]) + 1) % 256)
return '.'.join(ip_parts)
own_ip = get_internal_ip('eth0')
neighbor_ip = calculate_neighbor_ip(own_ip)
target_host = neighbor_ip
target_port = 179
flag = "DH{fakeflagfakeflagfakeflagfakeflagfakeflagfakeflag}"
ip = IP(dst=target_host)
tcp = TCP(sport=RandShort(), dport=target_port, flags="S")
malformed_syn = ip/tcp/Raw(load=flag)
send(malformed_syn)
neighbor ip, 포트는 179번을 통해서 flag 패킷을 보낸다.
우리는 tcpdump를 이용해서 그 패킷을 가로채보자.
DH{w4s_Bgp_Nec35sarY?}
+ iproute2 명령어를 통해, 네트워크 상태를 확인가능하다
'Dreamhack > Dreamhack Wargame (Challenge)' 카테고리의 다른 글
[179] IT 비전공자 [dreamhack] hidden_vigenere문제풀기 (0) | 2025.03.12 |
---|---|
[177] IT 비전공자 [dreamhack] reverse_decoding문제풀기 (0) | 2025.03.10 |
[176] IT 비전공자 [dreamhack] [CodeEngn] Malware L05문제풀기 (0) | 2025.03.10 |
[175] IT 비전공자 [dreamhack] [CodeEngn] Malware L03문제풀기 (0) | 2025.03.08 |
[174] IT 비전공자 [dreamhack] Race with me?문제풀기 (0) | 2025.03.07 |