关于trinoo源代码的分析  

/ns/wz/comp/data/20020804033444.htm



关于trinoo源代码的分析  


发信人: chillone (我爱丹丹,我爱丹丹), 信区: Security
标 题: 关于trinoo源代码的分析--ns(上)
发信站: 武汉白云黄鹤站 (2001年07月25日15:05:08 星期三), 站内信件

--

    
对于攻击守护进程(NS) 的分析:
/@@@@ 程序中有一段为:
foke=fork()
if (foke>0){
hoe=setpgid(foke,foke);
exit(0);
}
这段程序的具体意思我不是太清楚,
不过它的作用类似于
执行后台程序加上“&” 一样。
如果有谁知道,还请相告。
@@@@/
1: 它在端口27444进行监听,绑定这个端口。
2: 向master 主机发送 *HELLO* 的udp 数据报
3: 进入无限循环::
从监听端口27444接受 :recvfrom(...)并在其中填写 from参数
(由于我们在master 发送命令的时候填写了不同的参数,所以
我们根据收到的内容按格式填入参数arg1 pass arg2,主要是arg1
and arg2)
在下面我就把master 中的命令格式和 ns 对应的参数列表如下:
(用!! 分开 )
master程序 中间处理(在master.c中) ns程序 注释
!! dos ip !! aaa pass arg1 !! aaa arg2 !!ip=arg1=arg2

!! mtimer seconds !! bbb pass arg1 !! bbb arg2 !! seconds=arg1
=arg2
!! killdead !! shi pass !! shi
!! mping !! png pass !! png
!! mdie arg1(killme) !! dle pass !! d1e !!arg1为mdie命令需要的
口令
!! msize arg1 !! rsz arg1 !! rsz !! arg1为重新设置的ud
p报的长度
!! mdos !! xyz pass 123 arg1 !!xyz arg2 !!=arg1
=arg2
4: ns 中每一个子段的解释:
(pass 这个子段由于都相同,提取出来之后在开头时候比较,
出错的话就ft! and exit ! )
4.1 ---- aaa arg2
这个arg2 也就是指定的被攻击的对象(很同情^_^)
时间限定120 seconds (默认值,而不是有些说明中的无限大,疑惑 !)
向目标机随机端口发送udp数据报(发送全零的length=4的udp flood)
这一段也就是攻击目标(单个目标机器)的程序段。
后来我在这篇文章上看到http://www.etechbase.net/tech_disp_page.php?
number=936
分析和我的一样!
4.2 ---- bbb arg2
设定攻击时间
4.3 ---- shi
向master主机发送*HELLO* 的udp数据报
4.4 ----- png
向发起连接的主机(也就是master)31335 端口发送"PONG" udp 数据报

4.5 ----- d1e
退出 ns
4.6 ----- rsz arg2
设置udp数据报的长度,并全为零
4.7 ---- xyz arg2
dos many 也就是可以同时攻击多个ip,
这里的技巧也就是利用strtok这个函数,
如果不是很明白的话,自己可以man 一下,其他的就是类似于攻击单个目
标了。
5 程序end.
※ 修改:・chillone 於 07月25日15:05:37 修改本文・[FROM: 202.114.1.60]
※ 来源:・武汉白云黄鹤站 bbs.whnet.edu.cn・[FROM: 202.114.1.60]


发信人: chillone (我爱丹丹,我就是爱丹丹), 信区: Security
标 题: 关于trinoo源代码的分析--master(下)
发信站: 武汉白云黄鹤站 (2001年07月25日17:21:08 星期三), 转信

攻击控制进程(master.c)
1: 如果你想玩一下的话,看看这个trinoo的版本,
使用master ---v
2: 赋值pass -l44adsl ,这个也就是攻击守护进程中
得到的pass变量
用crypt函数检验是否right.
3: 创建udp socket (sock) 和 tcp socket (sock2)
4: 由于master启动需要密码gOrave,输入这个密码。
5: 绑定tcp端口27665 ,把sock2 状态标志设置为O_NONBLOCK,
并调用listen
函数转换sock2状态,等待连接请求。
6: 绑定udp端口31335
7: 类似于ns.c 程序中的一段:
foke=fork()
if (foke>0){
hoe=setpgid(foke,foke);
exit(0);
}
这段程序的具体意思我不是太清楚,
不过它的作用类似于
执行后台程序加上“&” 一样。如果有谁知道,还请相告。
8: 进入无限循环
8.1 调用select 函数,进行初始化设置
8.2 如果udp socket sock 准备好读:
如果从socket读出的内容为"*HELLO*"(也就是ns进程刚开始启动发送来的)

检查是否这个ip(运行ns,也就是发*HELLO*udp报的地址是否在OUTFLILE中
(程序生成的
默认文件OUTFILE为"...")
第一次启动的话,肯定是没有的,打开文件,添加这个ip,
加密处理,如果tcp socket已经
连接之后,
则写到这个socket "NEW Bcast -ip "
如果从socket读出的内容为"*PONG*" (ns 进程执行控制端mping 命令后相应
master)
写入tcp socket "PONG * Received from *"
8.3 如果监听tcp socket sock2 准备好读:
调用accept函数,bewm为已经连接的tcp socket,
如果已经有用户成功(客户端telnet连接上之后,又有想连接的,
则提示Warning:Connection from 等警告消息)
8.4 如果已连接tcp socket betw准备好读
read(bewm,buf,1024) 把我们在master主机发出的指令等等读到buf中。
8.4.1 由于需要输入密码校验,(betaalmostdone),成功后便进入攻击控制
可操作的提示状态,
否则,退出客户端。
8.4.2 如果输入命令bcast ,则列出OUTFILE 中记录的ns进程所在的主机地

8.4.3 如果输入命令die, 则关掉所有的socket,并且退出。
8.4.4 如果输入命令quit,则关掉已连接的tcp socket
8.4.5 如果输入命令mtimer seconds ,则处理为 bbb l44adsl seconds ,
发送到ns所在主机监听端口,如在ns.c列表说的。
8.4.6 如果输入命令dos ip ,处理为 aaa l44adsl ip
8.4.7 如果输入命令mdie killme , 处理为 d1e l44adsl
8.4.8 如果输入命令 mping,处理为 png l44adsl
8.4.9 如果输入命令 mods, 处理为 xyz l44adsl 123 ip1:ip2:ip3
8.4.10 如果输入命令 nslookup ,host name->ip
8.4.11 如果输入命令 killdead ,处理为 shi l44adsl,并且清空所有的bcas
t 记录( 改名"...-b",于是就empty了)
8.4.12 如果输入命令 usebackup,则使用以前记录的bcast文件,可以参考一下
killdead
8.4.13 如果输入命令help ,后面跟着dos,mtimer 之类的参数的话,
也就是提供一下帮助。
9: 程序结束。