p0f使用相关

简介

p0f是一个纯粹的被动指纹识别工具,它在不干涉双方通信的情况下,通过嗅探的方式来分析流经某一网卡的流量以达到指纹识别的目的。
它的能力如下:

  • 高度可扩展性
  • 能够快速识别一个tcp连接两端的主机操作系统,因为它是被动识别工具,所以在某些nmap被禁止、不可靠、太慢或者会触发警报的情况下,它仍然能够很好的工作
  • 探测系统uptime,network hookup,距离(包括位于nat或者包过滤器后的网络环境)等等
  • 自动探测NAT,负载均衡,应用级的代理设置情况
  • 探测一些客户端/服务器的X-Mailer与User-Agent

这个工具可以运行在前台也可以后台运行,p0f还提供了简单易用的实时API供第三方平台调用(以此来开发垃圾邮件拦截工具等)。我们可以利用该工具进行渗透测试以及日常的网络管理,探测内网中可疑的网络连接。

ubuntu下的安装

0x00

默认kali下是集成了该工具的,所以如果不想安装就直接在kali上使用吧,在kali下只需要输入命令:

p0f

你就会看到如下画面,这就表示已经开始嗅探了,如果你打开浏览器访问网页应该就可以看到终端中捕获的信息了:
在这里插入图片描述

0x01

从github上下载p0f源码

git clone https://github.com/p0f/p0f.git

然后到进入目录p0f,执行目录中的build.sh脚本,这个脚本会自动执行编译工作,但是我在安装过程中出现了诸多问题,在此列出解决办法

安装过后就可以执行了,注意要以管理员权限执行

使用方法

命令行参数

用法: p0f [ …选项… ] [ ‘过滤规则’ ]

网络接口选项:

-i iface - 指定监听的网络接口
-r file - 读取由抓包工具抓到的网络数据包文件
-p - 设置 -i参数 指定的网卡 为混杂模式
-L - 列出所有可用接口

操作模式和输出设置:

-f file - 指定指纹数据库 (p0f.fp) 路径,不指定则使用默认数据库。(默认:/etc/p0f/p0f.fp)
-o file - 将信息写入指定的日志文件中。只有同一网卡的log文件才可以附加合并到本次监听中来。
-s name - 回答 unix socket 的查询 API
-u user - 以指定用户身份运行程序,工作目录会切换到到当前用户根目录下;
-d - 以后台进程方式运行p0f ,需要配合-0或者-s选项

性能相关的选项:

-S limit - 设置API并发数,默认为20,上限为100;
-t c,h - 设置连接超时时间 (30s,120m)
-m c,h - 设置最大网络连接数(connect)和同时追踪的主机数(host)(默认值: c = 1,000, h = 10,000).

通过 man tcpdump 命令可以了解更过 过滤选项表达式。例如:

sudo ./p0f -i eth0 'port 443'
常用选项使用实例

1.通过嗅探流经eth0的流量来识别连接双方的指纹信息

./p0f -i eth0 

在这里插入图片描述
2. 后台以指定用户权限运行,并且将识别记录写入到/var/log/p0f.log文件中,日志是用|符号来分隔每一项的

./p0f -i eth0 -d -u user -o /var/log/p0f.log

日志文件格式如下:
在这里插入图片描述
3.从cap文件中来识别系统

./p0f -r test.cap

API使用

有了API我们就可以很方便的把p0f集成到各个工具里啦,例如用它来开发垃圾邮件过滤器,web应用等等,我们只需要用客户端来连接到p0f -s选项指定的unix socket,并按照规定发送请求,就可以得到p0f的应答啦。

下面是API的使用规则:

  • 查询必须是21个字节,格式如下
字段 字节 作用
Magic dword 本地主机字节存储顺序(大端小端)
Address type byte ipv4四个字节,ipv6六个字节 ip地址字节
地址数据,网络字节存储顺序 16
  • p0f返回数据格式
magic dword native endian
status dword 0x00表示错误查询,0x01表示查询成功,0x20表示没有匹配项
主机信息 主机信息是一个很大的数据项,也是我们最需要的信息,它的每组字节也有特别含义,我直接贴出官方文档
Host information, valid only if status is 'OK' (byte width in square
    brackets):

    [4]  first_seen  - unix time (seconds) of first observation of the host.

    [4]  last_seen   - unix time (seconds) of most recent traffic.

    [4]  total_conn  - total number of connections seen.

    [4]  uptime_min  - calculated system uptime, in minutes. Zero if not known.

    [4]  up_mod_days - uptime wrap-around interval, in days.

    [4]  last_nat    - time of the most recent detection of IP sharing (NAT,
                       load balancing, proxying). Zero if never detected.

    [4]  last_chg    - time of the most recent individual OS mismatch (e.g.,
                       due to multiboot or IP reuse).

    [2]  distance    - system distance (derived from TTL; -1 if no data).

    [1]  bad_sw      - p0f thinks the User-Agent or Server strings aren't
                       accurate. The value of 1 means OS difference (possibly
                       due to proxying), while 2 means an outright mismatch.

                       NOTE: If User-Agent is not present at all, this value
                       stays at 0.

    [1]  os_match_q  - OS match quality: 0 for a normal match; 1 for fuzzy
                       (e.g., TTL or DF difference); 2 for a generic signature;
                       and 3 for both.

    [32] os_name     - NUL-terminated name of the most recent positively matched
                       OS. If OS not known, os_name[0] is NUL.

                       NOTE: If the host is first seen using an known system and
                       then switches to an unknown one, this field is not
                       reset.

    [32] os_flavor   - OS version. May be empty if no data.

    [32] http_name   - most recent positively identified HTTP application
                       (e.g. 'Firefox').

    [32] http_flavor - version of the HTTP application, if any.

    [32] link_type   - network link type, if recognized.

    [32] language    - system language, if recognized.

指纹数据库

p0f是有默认的指纹数据库的,与p0f可执行文件在同一目录下,名字叫p0f.fp,部分截图如下:
在这里插入图片描述
至于每个字段的含义,由于内容太多,此处不在详述,具体参考github上的使用说明

总结

总的来说,个人认为它的功能与nmap比起来要逊色很多,但是由于是被动信息收集工具,所以在某种程度上弥补了nmap的不足,同时它对tcp,http头信息的解析还是很强大的。

发布了116 篇原创文章 · 获赞 161 · 访问量 42万+

猜你喜欢

转载自blog.csdn.net/he_and/article/details/88350861