发信站: 武汉白云黄鹤站 (Thu Mar 29 11:28:20 2001) , 转信 作者:scz 标题: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: 7C 90 4E925: 18 90 4E93C: 7E EB 4EA62: 6A EB 4EA63: 00 15 4EABC: 50 EB 4EABD: E8 12 -------------------------------------------------------------------------- <待续> 标题: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解析过程中发生崩溃。 |