论坛: 菜鸟乐园 标题: NetXray使用说明~! 复制本贴地址    
作者: tianyecool [tianyecool]    论坛用户   登录
标题:NetXray使用说明之(1) 

1.1.1.1----2.2.2.2----3.3.3.3----4.4.4.4 这是一个ShareHub连接下的局域网 
             | 
             | 
          5.5.5.5 这是一个8080端口上的http/ftp proxy 
             | 
             | 
          Internet 

启动Capture,进入Capture Setting,选择Profiles-->New, 
以Default为模板,起名叫proxy,选择ok-->Done, 
设置过滤所有目标IP是5.5.5.5的报文,即Any---->5.5.5.5 
开始抓包,同时从本机使用http proxy,然后就可以停止抓包。 
选中一个目标IP是5.5.5.5的报文,按鼠标右键,选择"编辑显示过滤", 
选择"数据模式",选择Add Pattern,到TCP层选中8080目标端口, 
用鼠标选择"设置数据",起名"目标端口8080"。回去选择"应用显示 
过滤"。以后用proxy规则过滤将只过滤目标IP是5.5.5.5、目标端口 
是8080的报文。要是对协议分析熟悉,根本不用写这么多,以后 
要问NetXray的使用说明,请直奔主题,否则回答起来实在罗嗦。 
关键是有些人太懒惰,不乐意自己实践。 

标题:NetXray使用说明之(2) 

如何指定源端口、目标端口? 

1. 注意Data Pattern和Address是逻辑与的关系 
2. 进入Data Pattern设置页 
  比如你想设置这样一个过滤规则,源端口是2323或者目标端口是2323 
  的IP包,先选中第一行,用Toggle AND/OR调整成OR,因为你的逻辑表达式 
  的最外层是 OR 
3. 选择Add Pattern,在弹出的对话框里设置 

  Packet 34 2 Hex 
  从顶头开始填写 09 13,因为十进制的2323对应十六进制的0x0913,而IP包 
  使用网络字节顺序,高字节在低地址。 
  起名任意,比如源端口2323,确定 

  再次选择Add Pattern 
  Packet 36 2 Hex 从顶头开始填写 09 13 
  起名任意,比如目标端口2323,确定 

  于是最外层的OR下有两个叶子,分别对应两个Pattern。 
4. 还有很多变化,但都和这个基本例子差不多,你的过滤规则可以非常复杂。 
  最外层的OR表示它下面的所有叶子之间都是OR的关系,所以我建议当你企图 
  建立一个非常复杂的规则的时候先写出逻辑表达式再来操作,以免不必要的 
  重复劳动。 

标题:NetXray使用说明之(3) 

如何抓ftp/pop3口令明文? 

NetXray所谓的高级协议过滤事实上就是端口过滤,用(2)中介绍的方法指定源端口 
目标端口均过滤0x00 0x17,就可以达到和指定telnet过滤一样的效果。NetXray 
认为telnet就是23端口,所以如果想捕捉一个非标准telnetd的通信,必须自己 
指定端口过滤。此外Pwin98下services文件的修改不影响NetXray认为telnet就是 
端口23。 

每次指定捕捉telnet协议,但显示的时候可能会发现有些包没有标记成telnet,而 
是tcp,为什么?因为这些标记成tcp的包没有telnet数据区,虽然在完整的物理帧 
中有数据,但根据IP报头中的 ntohs( ip->tot_len ) ,对于IP报文来说没有 
telnet数据区。物理帧中为什么有?可能是考虑"填充",我不知道是数据链路层从 
内核返回的时候带上来的"填充",还是对端发送的时候就已经"填充",在linux下用 
sock_packet抓包也存在同样的问题,一般情况下recvfrom返回的字节数减去各个报 
头长度得到数据区长度,但出现"填充"时就不是这样了,所以处理IP协议族时,一 
定要用 ntohs( ip->tot_len ) ,我写linuxkiller时才认真注意到这个问题。那么 
用NetXray时,不要看第三栏,那里是完整的物理帧,有很多干扰信息,应该看第二 
栏的数据区。 

如果是分析telnet协议并还原屏幕显示,只需要抓从server到client的回显数据即 
可,因为口令不回显,这种过滤规则下抓不到口令明文。在linux下编程实现时需要 
考虑95个可打印字符、汉字以及32个控制字符的显示过滤问题。如果想抓telnet的 
口令明文,需要抓client到server的数据。Pred写的Sniff监听别人的BBS登录就象 
看动画,但看不到口令,应该是只抓从server到client的回显数据。 

nethackii可以抓pop3/ftp/telnet的口令,对于前两者很容易实现,因为有PASS关 
键字可以鉴别,后者稍微麻烦些,需要重组。值得一提的是foxmail的邮件监视器, 
简直就是定时发送口令明文,用NetXray抓从client到server包,指定过滤PASS关键 
字,非常清楚。下面简单说一下这个设置: 

先指定IP过滤规则,应该只指定 any <--> any,或者干脆不指定IP地址,以最大 
可能地捕捉口令。 
然后增加一个过滤模式,Packet 54 4 Hex 0x50 41 53 53 
再增加一个过滤模式,Packet 54 4 Hex 0x70 61 73 73 
两者是or模式,后者是因为这种关键字在网络传输中大小写不敏感,比如 
cuteftp发送的是pass。剩下的就是等口令来了。注意,不必指定过滤特定高级协 
议,直接指定过滤IP协议族就可以了,用这种办法ftp/pop3口令是很容易看清楚的。 
因为许多ftp/pop3的口令可以telnet 23,所以...... 

标题:NetXray使用说明之(4) 

unix/linux下执行clear命令究竟发送了什么字符串到终端才导致清屏效果出现, 
用NetXray捕捉server到client的回显数据,发现如下字符串: 
1B 5B 48 1B 5B 4A 
可以用fprintf输出这些字符到屏幕上,结果就是导致清屏效果。 

对于UDP报文的源端口/目标端口过滤基本上和TCP报文的设置一样,不过这次换种方 
式指定: 
Protocol 20 2 Hex 源端口 
Protocol 22 2 Hex 目标端口 
这些都是在没有使用IP选项的情况下指定,如果使用了IP选项就需要做相应改变。 

标题:NetXray使用说明之(5) 

这里的使用说明可以用于sniffer pro 2.6,因为这两个东西实际是一个公司的。 
虽然很多人告诉我sniffer pro比netxray强大,但是我个人觉得在协议分析方面 
netxray比sniffer pro要方便,虽然支持的协议少了点,但是在设置过滤规则和 
应用过滤规则等小操作上,显然sniffer pro没有吸取netxray的精华,这些小操 
作平时很难遇到,但真正做协议分析指定一些复杂的过滤规则的时候就会碰上。 

今天我们介绍的是如何抓取RPC报文,下面给出的办法仅仅是种尝试而已。 

因为RPC Server使用动态端口,所以你无法进行常规的端口过滤设置,如果一定 
要设置可能需要尝试,具体例子请参看<< RPC/XDR/NFS系列之----NFS/Mount协议 >> 

这里给一种不是很科学的办法: 

1. 指定进行IP过滤,设置Any <--> RPC Server IP 
2. 指定对TCP以及UDP协议进行过滤,因为RPC Server可能的底层支持协议包括二者。 
3. 进入Data Pattern设置页,用Toggle AND/OR调整成OR,因为你的逻辑表达式 
  的最外层是 OR 
4. 选择Add Pattern,在弹出的对话框里设置 

  Protocol 60 8 Hex 00 00 00 00 00 00 00 02 
  起名TCP RPC CALL 

5. 同4的步骤,依次选择Add Pattern,在弹出的对话框里设置 

  Protocol 60 4 Hex 00 00 00 01 
  起名TCP RPC REPLY 

  Protocol 32 8 Hex 00 00 00 00 00 00 00 02 
  起名UDP RPC CALL 

  Protocol 32 4 Hex 00 00 00 01 
  起名UDP RPC REPLY 

这里给的办法仅仅代表一种思路,如果你发现并没有抓住某个特定RPC SERVER 
的报文,可以自行调整过滤规则。要理解这个过滤规则,需要RPC本身的知识, 
可以参看<< RPC/XDR/NFS系列 >>。 

我曾经想设置远程程序号的过滤规则,但发现RPC REPLY报文中没有固定字段对 
应远程程序号,只好放弃。如果你只想抓RPC CALL报文,可以考虑这个思路。 

标题:NetXray使用说明之(6)----捕捉oicq message报文 

NetXray发包前可以在decode状态下编辑,sniffer pro 2.6却不象NetXray那样 
善解人意,只能进行二进制编辑。sniffer pro的Add Pattern里的TAB键极其混 
帐,并且这里也不提供decode支持。始终不能理解这些地方。不过破解版的 
NetXray在decode时有些地方对不准,菜单window也不时失灵。 

暂略(回头补吧,没时间了) 

今天讲讲oicq message报文的捕捉。 

1. 首先设置进行IP/UDP报文过滤,IP/TCP暂时就不必了,因为oicq message报文多 
  是IP/UDP报文,我还没有看到过IP/TCP,应该是没有的。 

2. 根据需要在Address/IP Include里设置通信双方的IP,假设我们需要捕获所有与 
  本机oicq.exe通信的oicq message报文,设置成 myIp <----> Any 

3. 进入Data Pattern设置页,用<< NetXray使用说明之(2) >>里的办法指定 
  ( ( srcPort == 4000 ) && ( dstPort != 8000 ) ) 
  || 
  ( ( srcPort != 8000 ) && ( dstPort == 4000 ) ) 

  第一条的意思是本机向别人发消息,第二条是别人向本机发消息,之所以排除掉 
  8000,你可以进入oicq chat room看看此时涉及的端口。那么为什么不指定两头 
  都是4000呢,因为如果过了透明网关之类的,UDP RELAY的时候会改变源端口, 
  一般都不会是4000了。反过来,如果你发现一个入包的源端口不是4000,他/她应 
  该在类似sygate的代理后面。不过此时UDP DATA PIPE已经建立,即使他/她在 
  sygate后面,还是可以利用刚才抓到的IP/PORT和他/她通信,意味着很多事情都 
  可能发生。 

  这里假设都通过oicq.exe通信,如果用自己写的程序与oicq.exe通信,源端口不 
  必非是4000,可以任意指定。 

4. 算了,还是详细说说条目3中高级过滤规则的指定 

  a. 用Toggle AND/OR把最上层调成OR 
  b. 选中OR,然后Add AND/OR增加两个上去,分别用Toggle AND/OR调成AND 
  c. 选中第一个AND,然后Add Pattern,选中增加的Pattern,选择 
     Packet 34 2 Hex,从1开始输入 0F A0,就是0x0fa0的意思, 
     srcPort == 4000 
  d. 选中第一个AND,然后Add NOT,选中增加的NOT,用Toggle NOT确认已经调成 
     NOT,选中NOT,然后Add Pattern,选中增加的Pattern,选择 
     Packet 36 2 Hex,从1开始输入 1F 40,就是0x1f40的意思, 
     dstPort != 8000 
  e. 选中第二个AND,重复"类似"c、d的步骤,分别指定srcPort != 8000以及 
     dstPort == 4000 
  f. 选中最上层的OR,看看summary,是否符合你预想的逻辑表达式,如果不符合, 
     继续调整,直至正确。 

虽然这里是针对oicq.exe设置高级过滤规则,但这是一个很完整而又略显复杂的设置 
说明,对<< NetXray使用说明之(2) >>是个很好的补充。 

标题:NetXray使用说明之(小插曲)----分析netants的1975问题 

设置过滤规则为:myIp --> any:1975 

设置捕获IP/TCP协议,注意不要指定捕获HTTP协议,NetXray是根据端口区分协议的, 
你指定HTTP协议,就只捕获80端口的报文了。 

过一段时间1975上的连接自动切断。 

在本机用netstat -a 或者 netstat -na 看到如下信息: 

TCP    scz:1475             ad2-1.aureate.com:1975    ESTABLISHED 
TCP    192.168.8.90:1475    216.37.13.140:1975        ESTABLISHED 

标题:NetXray使用说明之(7)----LanExplorer 3.5下的过滤规则设置 

作者:小四 < mailto: scz@nsfocus.com > 
主页:http://www.nsfocus.com 
日期:2000-08-28 20:21 

-------------------------------------------------------------------------- 
下面是咱们<ipxodi@nsfocus.com>的大放厥词: 

LanExplorer 3.5,9x/NT/2K下的协议分析软件,7MB,  http://www.intellimax.com 

破解如下: 

安装完成后,用HEXEDIT打开probe.exe 
CTRL+G 跳到0x4eac7,把75改成eb,保存。 
以后运行提示注册,点击Cancel进入即可。 
-------------------------------------------------------------------------- 

实际上LanExplorer和NetXray不是一个厂家的产品,从使用上也很多不同,但是从协 
议分析角度来看,没有区别,姑且放到一起介绍。这个系列完全是为初学者写的,前 
阵有人问起续篇,将就着再写写,实在是没意思的东西。 

1. 

从菜单上选择Capture-->Filter,选择左上角的[ New Profile ]按钮,输入你觉得 
切合要求的名字,比如TCP-SMB。这里有个小窍门,如果你已经有一个合理可用的IP 
规则,就先选中IP规则,然后点击左上角的[ New Profile ]按钮,那么新规则以IP 
规则为模板生成。 

2. 

选中TCP/UDP Port页,点击最顶行最右边的[ TCP/UDP Ports... ]按钮,选择New, 
输入端口号445,描述任意,比如TCP-SMB,Ok。 

Filter Mode选择Inclusive,选中下面的[ Exclude Non-TCP/UDP Packets ]复选框 
在[ Port 1 ]里选择刚刚新创建的TCP-SMB,选择-->,在[ Port 2 ]里选择All,选 
中右边的TCP复选框,UDP复选框不要选中。 

3. 

选中Address页,Address Mode选择IP,选中下面的[ Exclude Non-IP Packets ]复 
选框,Filter Mode选择Inclusive,在[ Address 1 ]里选择[ Any Address ],选择 
-->,在[ Address 2 ]里输入192.168.8.90(我自己的内部IP) 

4. 

选中Layer 3+页,假设所有的复选框都清空了,从右边开始,在TCP/UDP栏里只选择 
Others,而IP/ARP栏里的TCP和UDP不用选中,提交本条过滤规则的时候LanExplorer 
会自动判别并替你选中IP/ARP栏里的TCP和UDP复选框,如果你此时自己选中也无妨。 

5. 

选中Layer 2/3页,假设所有的复选框都清空了,从左边开始,在Ethernet II栏里只 
选择IP/ARP复选框,注意和Layer 3+页之间的关系,提交本条过滤规则的时候 
LanExplorer会自动判别并替你选中LLC栏里的IP复选框以及SNAP栏里的IP/ARP复选框, 
如果你此时自己选中也无妨。 

6. 

选中Layer 2页,假设所有的复选框都清空了,在VLAN栏里选中Others复选框,MAC栏 
不用理会。点击中文的[ 确定 ]按钮(太奇怪了,LanExplorer为什么这里出现了中文 
按钮,而其他地方没有) 

7. 

从菜单上选择Capture-->Filter,选中你要使用的过滤过则,如果刚刚创建过新规则, 
默认的当前过滤规则就是新规则。从菜单上选择Capture-->Start。 

这个规则设置过程很简单,显然LanExplorer的设置不如Sniffer Pro友好,至于它的 
发送更是不尽人意,这些不多说了,用过的朋友自己对照。执行 
net use \\192.168.8.48\ipc$或者newletmein \\192.168.8.48 -all -d之类的命令, 
可以验证上述过滤规则是否有效。 

很多朋友在高级过滤规则的设置上失败,其原因很多,抛开对协议本身不了解的原因, 
LanExplorer设置复杂是重要原因。有一点特别注意,宁可多选几个复选框,不要对 
自己不了解复选框清空,你能解释第6条中为什么选择VLAN栏里的Others复选框吗? 
我不能,可你的确必须如此选择。更多的东西需要自己摸索。我不喜欢这个东西,可 
我现在2K下,没有别的可用。 

-------------------------------------------------------------------------- 
下面是NetGuy的破解 

1. Probe.exe: 1,114,112 b字节 
2. crack_probe.exe: 1,114,112 b字节 

4E924:7C90 
4E925:1890 
4E93C:7EEB 
4EA62:6AEB 
4EA63:0015 
4EABC:50EB 
4EABD:E812 
-------------------------------------------------------------------------- 

<待续> 

标题:NetXray使用说明之(7.5)----LanExplorer 3.6下的过滤规则设置举例(续) 

3.6据说比3.5加强了一些,包括退出后僵尸进程的问题,启动中乱报错问题,现在似 
乎支持拨号适配器上的抓包了(以前如何我还真没测试过),但在过滤规则上毫无改观。 
以前过滤规则全部在升级过程中丢掉了,只好重新设置。下面是IP过滤规则的设置: 

1. 

从菜单上选择Capture-->Filter,选择左上角的[ New Profile ]按钮,输入你觉得 
切合要求的名字,比如IP。这里有个小窍门,如果你已经有一个合理可用的Default 
规则,就先选中Default规则,然后点击左上角的[ New Profile ]按钮,那么新规 
则以Default规则为模板生成。 

2. 

不要动TCP/UDP Port页、Address页 

3. 

选中Layer 3+页,假设所有的复选框都选中了,因为我们设置的是IP过滤规则,要求 
抓取所有IP报文。 

注意LanExplorer把ARP归入Layer 3+页,如果你的确只想抓IP报文,清除该页第一个 
ARP复选框。反之,如果你只想抓ARP报文,应该清空Layer 3+页后只选择该页第一个 
ARP复选框。 

4. 

选中Layer 2/3页,假设所有的复选框都清空了,从左边开始,在Ethernet II栏里只 
选择IP/ARP复选框,注意和Layer 3+页之间的关系。 

3.5版这里会自动替你选中LLC栏里的IP复选框以及SNAP栏里的IP/ARP复选框,3.6版 
没有这个毛病了。 

5. 

选中Layer 2页,假设所有的复选框都清空了,在VLAN栏里选中Others复选框,MAC栏 
根据需要指定,比如只想抓取单播IP报文,就只选中Unicast复选框。VLAN栏里 
Others复选框必须选中,至于为什么,不清楚。 

回头看第三条,如果想抓ARP报文,因为Arp Request是广播报文,为了同时抓取请求 
和响应报文,必须在MAC栏里选中Broadcast复选框。当然,只选中Unicast复选框, 
将抓取所有Arp Reply报文。 

点击中文的[ 确定 ]按钮(太奇怪了,LanExplorer为什么这里出现了中文按钮,而其 
他地方没有) 

6. 

从菜单上选择Capture-->Filter,选中你要使用的过滤过则,如果刚刚创建过新规则, 
默认的当前过滤规则就是新规则。从菜单上选择Capture-->Start。 

标题:NetXray使用说明之(8)----捕捉来自特定源IP的ARP报文 

今天调试一个程序的时候,利用SIGALRM进行ARP欺骗,需要抓几个ARP响应报文确认 
定时机制起作用了,但又不想都抓,ARP报文太多了。 

1. 以default为模板复制一条规则arp 

2. 在"高级过滤"里选中ARP协议 

3. 在"数据模板"里选择"增加模板",此时默认是AND规则 

4. 依次输入或选择 

  Packet 28 4 Hex 

5. 从顶头开始输入 

  C0 A8 0A 19 

  就是说源IP为192.168.10.25 

  描述性文字任意,比如srcIp == 192.168.10.25 

6. 一路确定下去即可 

事实上平时设置过滤规则不需要这样麻烦,可以先用母体规则(比如default)抓取一 
些报文,然后用鼠标选中你需要的报文,保持不动的情况下进入过滤规则设置界面, 
新建一个过滤规则arp,此时"数据模板"里的"设置数据"按钮可用,在左面选择你感 
兴趣的数据域,点击"设置数据",会自动替你生成一个"数据模板",然后根据需要稍 
微修改一下即可。即使你对TCP/IP协议非常熟悉,也没有必要自己计算偏移量。 
<<NetXray使用说明之(2)>>里的"数据模板"一样推荐采用这个办法指定。 

标题:NetXray使用说明之(9)----TCP/DNS问题 

论坛上santa朋友报告了一个关于Win2K下Sniffer Pro 4.5的问题,简单说就是解析 
TCP/DNS报文的时候有点问题。flag和我一起仔细测试过,的确存在小麻烦。 

在RFC 1035的"4.2.2. TCP usage"小节对此有足够解释,TCP数据流的前两个字节是 
message length,这点和UDP DNS报文明显不同。注意,既然是TCP数据流,所以并不 
要求这两个字节和DNS负载出现在同一个报文中,至少RedHat下nslookup在做区传输 
的时候先发送了两个字节的message length,然后发送另外一个TCP报文携带了DNS负 
载。对于UDP DNS报文,UDP数据区直接对应DNS负载,UDP头部中UDP报文长度减去8就 
是DNS负载长度(也就是UDP数据区长度)。 

从Win9x下的Sniffer Pro 2.6到Win2K下Sniffer Pro 4.5,事实上都意识到了TCP DNS 
的特殊性,解析区传输引发的TCP查询报文时,对前两个字节做了规避。偏偏前两个 
字节已经单独发送到DNS SERVER去了,最终导致后续DNS负载中真正的id域被当成 
message length而越过,param域被当成id域解析,再后面的域解析全部乱套。区传 
输的第一个响应报文中message length和后续DNS负载位于同一个TCP报文中,所以解 
析正确。 

RFC 1035没有强制要求message length如何出现,对于TCP数据流来说,这是完全正 
确的,本来就没有边界概念。Sniffer Pro无法预知所有TCP数据流的表现方式,或者 
说无法预知所有DNS CLIENT的具体实现方式,只能简单假设message length和后续 
DNS负载位于同一个TCP报文中,不可能为了正确解析这种TCP DNS查询报文而跟踪保 
持前后的TCP数据流(前后状态相关)。 

NetXray 3.03存在类似问题,但是它显式解析了message length字段,以Tcp Length 
显示该字段,明确提醒使用者TCP DNS报文和UDP DNS报文的差别。很奇怪,Sniffer 
Pro抛弃了太多NetXray的优点,这次又是一个例证。 

如果你想自己测试验证这个问题,重点在于如何激发TCP DNS报文,下面是我整理维 
护的<<Unix编程/应用问答中文版>>中的内容: 

-------------------------------------------------------------------------- 
17. 如何进行DNS区传输 

A: scz <scz@nsfocus.com> 

  用nslookup是最普遍适用的 
  nslookup 
  > server ns.tsinghua.edu.cn 
  > set type=axfr 
  > ls tsinghua.edu.cn [> tsinghua.txt] (方括号里的可选) 

  有些系统提供了dig命令 
  dig @ns.tsinghua.edu.cn axfr tsinghua.edu.cn 

A: lgwu 

  有些系统提供了host命令,这个命令不太保险 
  host -l net.tsinghua.edu.cn (后面指定域) 
  host -l ncic.ac.cn 

18. 如何获知权威名字服务器 

A: scz <scz@nsfocus.com> 

  nslookup 
  > set query=ns 
  > ncic.ac.cn (获知管辖该域的权威名字服务器) 
  Authoritative answers can be found from: 
  gatekeeper.ncic.ac.cn   internet address = 159.226.41.188 
  > server gatekeeper.ncic.ac.cn 
  > set type=axfr (准备区传输) 
  > ls ncic.ac.cn > ncic.txt 
-------------------------------------------------------------------------- 

另外有个问题,用RedHat下nslookup做区传输激发TCP DNS报文,Win2K下 
LanExplorer 3.6抓取响应报文(不是分成两半的查询报文),在企图解析时导致进程 
异常退出。具体原因尚在猜测中,可能和错误处理message length字段有关。 

由此我们想到其他sniffer是否存在类似问题,针对Unix系统下snoop、tcpdump是否 
有机会做exploit。 

2001-02-14 23:37 

snoop -v tcp dst host 192.168.10.1 and src port 53 and src host 192.168.0.2 
这个命令会报告TCP DNS负载,但是并不像LanExplorer 3.6那样企图解析什么。 

tcpdump -S -n -t src port 53 and src host 192.168.0.2 and dst host 192.168.10.2 
and ip proto \\tcp 
这个命令干脆不会报告DNS负载,tcpdump究竟如何才能达到效果,-v和-vv都不行。 

结论是tcpdump和snoop暂时不存在类似问题。 

<<libnet使用举例(8)>> 

./dkiii --di 192.168.8.90 --num 20 

dkiii所发送的异常DNS请求分组制造了一个解析循环,NetXray3.03终止, 
LanExplorer 3.5在试图解析该类报文的时候异常终止。今天测试结果是 
LanExplorer 3.6依旧存在该问题,98/2K下测试。此外袁哥确认qtcount值异常的时 
候,LanExplorer 3.6解析过程中发生崩溃。 

发信人: scz (小四), 信区: Security WWW-POST 
标  题: NetXray使用说明之(10)----捕获telnet登录口令 
发信站: 武汉白云黄鹤站 (Sun Apr 15 19:41:40 2001) , 转信 

今天逛CERNET/BBS的时候看到又有人问如何抓telnet登录口令的事情,再写一遍好了。 
其实如果你有现成的口令监听工具,就不必看这里的介绍了,我也不喜欢用本来是协 
议分析工具的Sniffer Pro去做这种事情。仅仅是进一步演示高级过滤规则和触发器 
的使用。 

原理如下: 

telnet登录时口令部分不回显,只能抓取从client到server的报文才能获取明文口令。 
所以一般那些监视还原软件无法直接看到口令,看到的多半就是星号(*)。缺省情况 
下telnet登录时进入字符输入模式,而非行输入模式,此时基本上是客户端一有击键 
就立即向服务器发送字符,TCP数据区就一个字节。在不考虑IP选项、TCP选项介入的 
复杂情况下,整个物理帧长度14 + 20 + 20 + 1 = 55。 

我是懒得升级,所以一直用Pwin98下的Sniffer Pro 2.6(就是deepin上传到spp那里 
的那个)和古老的NetXray。下面的举例以Sniffer Pro 2.6为准,更高版本基本类似, 
不想切换到2K下测试4.5版了。 

Capture --> Define Filter... --> Profiles... --> New... 

如果你已经有TCP模板或者更精确的模板,就选它们,没有的话,选择根据Default模 
板创建,起个相关点的名字,别什么test1、test2的就来了,我起名 
telnet_username_passwd。一路确定(Done),回到Define Filter对话框。 

进入Advanced设置页,选中IP/TCP/TELNET。 

Packet Size                             Packet Type 
Equal 59                                只选中Normal 
Size = 59 

进入Data Pattern设置页,Add Pattern,选择 

Packet 46 2 Hex 

数据区设置50 18 

描述成"tcp头20字节、ack+psh"(这里任意描述,但应该有意义) 

进入Address设置页,设置根据IP地址过滤,设置"clientIp --> serverIp"的过滤模 
式。不要设置成双向或者"serverIp --> clientIp",否则干扰信息太多。 

点击确定后这条"telnet_username_passwd"过滤规则就设置完了。什么意思?很直白, 
只捕获从客户端到服务器的、TCP数据区只有一个字节的、带ACK+PSH标志的、不带IP 
选项和TCP选项的正常TELNET报文。 

可能你有疑问,为什么设置Size = 59,而不是55。我也很想知道Sniffer Pro哪里吃 
错药了。以太网帧的确应该是55,可是如果加上4字节的CRC校验和,就是59了。 
Sniffer Pro在decode显示中没有显示这个4字节CRC校验和,却在设置Packet Size的 
地方包含了它,简直就是毛病。NetXray在decode显示中显示了4字节CRC校验和,在 
设置Packet Size的地方并不包含它,也就是说,同样的规则如果换到NetXray那里, 
应该是Size = 55。显然我们习惯NetXray的这些地方,可惜sniffer pro丢弃了太多 
NetXray好的一面,这次又是一个例证。 

顺便问一下,谁知道在Unix/Linux下编程的时候如何得到这4字节的CRC校验和,链路 
层编程收包得到的仅仅是以太网帧,没有CRC。 

回到看口令的问题上来,设置了上述规则后,实际就可以看到用户名、口令以及登录 
后的击键了。干扰信息相当少,一眼就可以看出哪个是哪个。 

如果要玩点玄的,比如Trigger,我们可以这样考虑问题。第一个有效包应该是59字 
节,前面的其他报文在做三次握手、TELNET协商,长度都不是59字节(可以抓包确认 
这个结论)。定义一条规则"telnet_username begin",对于这次的举例,实际就和 
"telnet_username_passwd"一样,但是最好选择后者做模板单独重新定义一次,为什 
么?这个以后自然就会明白,至少可以让设置清晰、直观些。 

最后一个有效包(就是说看到这个包后停止抓包)应该是什么呢?不能是60字节的0D 
0A(对于微软平台的telnet)或者0D 00(Unix平台),因为用户名输入结束的时候就有 
一次60字节的报文出现,如果选择这样的报文做结束报文,口令就抓不到了。考虑登 
录成功后服务器都会向客户机发送"Last login:"一类的信息,同一个包中还包括登 
录后的shell显示,这个包显然要比前后附近的包大很多(不是三四个字节的问题)。 
我们以此包为结束触发报文。定义一条规则"telnet_passwd end",以 
"telnet_username begin"为模板创建,修改两个地方,一个是"Size > 100",一个 
是"clientIp <-- serverIp"(反向,因为这个报文是从服务器到客户机的)。 

至此我们定义了三条规则,一个开始触发规则、一个持续抓包规则、一个结束触发规 
则。开始设置Trigger: 

Capture --> Trigger Setup... 

四个复选框中只选中"Start Tigger"、"Stop Trigger"。因为以前没有设置过,无法 
从下拉列表中选择什么,只能分别定义触发器。以Start Trigger为例,进入Define, 
New一个新的触发器名字,起名"telnet_username begin"(不必和过滤规则一致,但 
是保持一致比较清晰),右边三个复选框只选中最下面的"Event filter",那个下拉 
列表里实际对应过滤规则,选中"telnet_username begin"过滤规则,确定。这里还 
可以设置什么时间开始触发,不过作为演示,简化这些可能。 

Capture的下拉列表里也是对应的过滤规则,选中"telnet_username_passwd"过滤规 
则(持续抓包规则)。 

"Stop Trigger"的定义类似"Start Trigger",这次选择"telnet_passwd end"过滤规 
则,起名"telnet_passwd end"。同样,演示中不考虑时间设置,简化操作。 

可以指定在结束触发条件满足后还多抓几个包,比如指定多抓2个包。 

确定后这个触发器生效。什么意思呢。Sniffer Pro自动开始捕获报文,但是并不保 
存,直到碰上一个报文匹配了"telnet_username begin"过滤规则,此时开始保存在 
自己的缓冲区中。然后根据Capture处选择的"telnet_username_passwd"过滤规则持 
续抓包。一直到结束触发条件"telnet_passwd end"被满足。多抓两个包后彻底停止 
抓包。查看结果,就完整地对应了登录过程中用户名、口令的输入过程,很容易恢复 
出口令明文和用户名。 

Trigger作用下的显示结果显式标注了Start Trigger和Stop Trigger的位置,这之间 
的就是我们关心的内容。先是用户名,然后紧跟口令明文,最后是两次登录成功的击 
键。0D 0A或者0D 00被过滤掉,登录协商信息也被扔掉了。 

如果不熟悉sniffer pro的操作,可能看了之后还是比较模糊,可以对照着实地操作 
一下,其实不难。开始触发规则和持续抓包规则可以不一样,这次举例比较特殊而已。 
现在交换环境以及加密传输越来越普及,单纯靠这些小把戏抓口令已经意义不大了。 

很多人估计从来就没有用过Trigger。你验证过之后完全可以根据自己实际需要定义 
Trigger,基本思路是,定义三条规则,一个开始触发、一个持续抓包、一个结束触 
发,要区分共性、特性,考虑结合时间触发设置。至于Alarm触发设置,以后有实际 
应用举例的时候再介绍,现在介绍你晕我也晕。 

Pwin98下Sniffer Pro 2.6毛病很多,使用Trigger后很容易蓝屏。我没有切换到2K下 
测试4.5版是否还有这个毛病。 

今天发现telnet过程使用行输入模式是荒芜陈旧的,不推荐使用,但用户可以Ctrl-] 
进入telnet>模式,输入mode line(可能要两次)切换到行输入模式,Pwin98的 
telnet.exe如何切换进入行输入模式,我也不知道。 

如果有人吃疯了,以行输入模式登录,口令明文就在单包中,用户名在另一单包中, 
更容易恢复出来。作为上述Trigger设置却要失效了。Cterm登录的时候用的应该就是 
行输入模式。此时一个办法就是不用Trigger,直接抓包看就可以了。如果要指定 
Trigger,应该修改开始触发规则和持续抓包规则,结束触发规则不必修改。持续抓 
包规则就设置成telnet协议报文即可,因为用户名和口令明文到底多长不清楚,即使还做数据区长度限制,也应该换成 58 < Size < 100。开始触发规则换成Size = 70, 
从客户机到服务器,这样的包在login提示符出现前只有一个,是个telnet协商报文, 
也比较靠近login提示符出现的时候,干扰信息较少,我暂时没有更好的想法来设置 
开始触发规则。 

修正后的Trigger既可以对付单字符输入模式登录,也可以对付行输入模式登录,不 
过在对付单字符输入模式登录的时候没有前一个Trigger好,干扰信息稍微多了几个。 

这里介绍的Trigger不是最好的,仅仅是演示效果。大家可以发挥自己的想象力设置 
高效实用的Trigger(我憎恨Trigger,回去睡觉,2001-04-15 07:56)。 

下午过来时想到,开始触发规则可以用clientIp <-- serverIp,服务器始终会给客 
户机一个"login:"提示,可以用它做开始触发。对于登录Solaris和Linux有所不同, 
需要分别抓包确认其中区别,比如Solaris提示"login:"之后还有一些协商过程,而 
Linux没有。输入口令错误,第二次提示"login:"的报文就和Linux一样了,也是65个 
字节(包括CRC)。提示"login:"的时候,如果连续两次回车,服务器给客户机的提示 
报文又有不同。根据具体情况抓包分析,按照某种原则选择合适的报文,设置开始触 
发规则。显然没有一劳永逸、放之四海皆准的触发规则。 

对于结束触发规则,如果服务器上用户主目录$HOME下有一个.hushlogin文件存在, 
则服务器回显客户机的时候,没有"Last login:"信息,顶多是登录shell的显示(也 
就几个字节),此时前面设置的结束触发规则失效。演示举例中不考虑这些非普遍现 
象,真要对付所有情况,应该自己写程序做内容过滤,确定各种触发条件。 

现在来总结一下稍微通用点的Trigger设置: 

1) 开始触发规则"telnet_username begin" 

clientIp <-- serverIp 这个根据需要调整,必要时可以使用Any,不过对于Trigger, 
使用Any的可能不大,仔细想想为什么。 

TELNET协议,只抓Normal报文。 

ACK+PSH 标志,至少不要让带SYN的两个报文混进来吧。也就是在Data Pattern处设 
置Packet 46 2 Hex,数据区设置50 18。这样做了之后实际意味着带IP选项、TCP选 
项的报文被丢弃,进一步减少干扰信息。 

69 < Packet Size < 72,不解释了,分别登录Solaris/Linux,自己抓包看看。 

2) 持续抓包规则"telnet_username_passwd" 

clientIp --> serverIp 因为口令不回显,只能抓从客户机到服务器的击键获取口令。 
没有必要抓服务器的回显,减少干扰信息。 

TELNET协议,只抓Normal报文。 

58 < Packet Size < 100 主要是考虑了使用Cterm登录的时候,进入行输入模式。如 
果不考虑这种情况,完全可以指定Size = 59,这样要精确得多。 

在Data Pattern处设置Packet 46 2 Hex,数据区设置50 18。解释同上。 

3) 结束触发规则"telnet_passwd end" 

clientIp <-- serverIp,telnet协议,Packet Size > 100,只抓Normal报文。 

在Data Pattern处设置Packet 46 2 Hex,数据区设置50 18。解释同上。 

上面是说如何捕获telnet登录口令,同理,要在公共机房捕获BBS登录口令,首先抓 
包简单分析一下,设置不同的触发条件,一样容易实现。这个我就不写那么直白了, 
否则要被人砍死的。 

修改持续抓包规则,Size = 59,其他不变,起名"telnet_key",不设置Trigger,直 
接捕获客户机到服务器的击键,我觉得这个设置简单、高效、实用。 

 


地主 发表时间: 08/02 19:43

论坛: 菜鸟乐园

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号