基于HPP参数污染的Web服务器指纹识别技术

0x00 关于本文

         关于web服务器指纹识别的技术,已经有十万甚至九万个文章描述,十万甚至九万个工具实现。但目前来看,本文或许是首先提出基于HPP参数污染技术来识别web服务器指纹的。
通过HPP参数污染技术来探测服务器的指纹可以有非常高的准确率,此方法通过不依赖可以随意删除的特征关键字(比如服务器返回头),不会被啊D那样能够把IIS伪装成Apache2这样的伎俩欺骗。但是缺点是只能够识别Web服务器中间件类型,无法识别CMS,并且自动化有一定困难(为自己的懒惰找借口)

0x01 HPP是什么以及为什么HPP可以用来识别Web服务器指纹

         HPP全称HTTP Parameter pollution,就是HTTP参数污染。简单来说就是提供多个同名的参数给服务器,比如说一般提交的是?id=1你提交一个?id=1&id=2。由于HTTP标准并没有写明该怎么办,各个不同的服务器/中间件会有不同的处理方式,而通过观察他们的处理方式的差异即可判断服务器类型
         比如对于网站http://example.com/?color=red&color=blue,不同的服务器认为自己收到的参数如下

Web Application Server BackendParsing ResultExample
ASP.NET / IISAll occurrences concatenated with a commacolor=red,blue
ASP / IISAll occurrences concatenated with a commacolor=red,blue
PHP / ApacheLast occurrence onlycolor=blue
PHP / ZeusLast occurrence onlycolor=blue
JSP, Servlet / Apache TomcatFirst occurrence onlycolor=red
JSP, Servlet / Oracle Application Server 10gFirst occurrence onlycolor=red
JSP, Servlet / JettyFirst occurrence onlycolor=red
IBM Lotus DominoLast occurrence onlycolor=blue
IBM HTTP ServerFirst occurrence onlycolor=red
mod_perl, libapreq2 / ApacheFirst occurrence onlycolor=red
Perl CGI / ApacheFirst occurrence onlycolor=red
mod_wsgi (Python) / ApacheFirst occurrence onlycolor=red
Python / ZopeAll occurrences in List data typecolor=['red','blue']


0x02对于常见情形的的识别

         上表的类型太全面了,我们一般只需要覆盖几个常用的就可以了,因此整理出如下粗略的判断方式



         不过这个判断较为粗糙,而且还有种种因素造成的误差导致想要实现一个完美的判断工具的工作量远大于手动判断,在实际操作的时候建议手动判断

0x03手动判断

         手动判断则更为灵活,现拿██带学的██研究院官网开刀
         发现存在搜索功能,从搜索功能处下手,因为服务器一般会打出搜索字符串,如下图我搜索了nmsl发现结果被打出来了
       
接着再参数污染一个1234

发现都被服务器接收了,类似于iis的情形,但是按理来说用来分割的逗号没有了(经过测试可知逗号被过滤了)
接着进行最后一项测试,在keyword参数前面加一个&符号

0x04工具实现

本人实现了一个很粗糙的工具,代码过于丑陋不予开源,看个图吧
结果返回正常,排除ASP,识别结果ASP.NET






评论

发表评论

此博客中的热门博文

局域网监控软件WFilter ICF 鸡肋0day RCE漏洞挖掘

别想偷我源码:通用的针对源码泄露利用程序的反制(常见工具集体沦陷)

复现基于eBPF实现的Docker逃逸