关于搭建双服务器这件事,就先鸽了。
看别人的wp做个记录吧。
注:截图等来自《MySQL注入天书:Less 29》
服务器端有两个部分:第一部分为 tomcat 为引擎的 jsp 型服务器,第二部分为 apache 为引擎的 php 服务器,真正提供 web 服务的是 php 服务器。
工作流程为:client 访问服务器,能直接访问到 tomcat 服务器,然后 tomcat 服务器再向 apache 服务器请求数据。数据返回路径则相反。
接下来是参数解析的问题。
问:index.php?id=1&id=2
,这时回显是id=1
还是id=2
呢?
答:apache (php) 解析最后一个参数,即回显id=2
;tomcat (jsp) 解析第
一个参数,即回显id=1
。
大多数服务器对于参数解析:
这里有一个新问题。
问:index.jsp?id=1&id=2
,针对这关的两层结构,客户端请求首先过 tomcat,tomcat 解析第一个参数,接下来 tomcat 请求 apache,apache 解析最后一个参数。那么最终返回客户端的是哪个参数?
答:此处应该还是id=2
,因为实际上提供服务的是 apache 服务器,返回的数据也应该是 apache 处理的数据。
而在我们实际应用中,也是有两层服务器的情况,那为什么要这么做?是因为我们往往在 tomcat 服务器处做数据过滤和处理,功能类似为一个 WAF。
而正因为解析参数的不同,我们此处可以利用该原理绕过 WAF 的检测。如 payload:index.jsp?id=1&id=0 or 1=1--+
,tomcat 只检查第一个参数id=1
,而对第二个参数id=0 or 1=1--+
不做检查,直接传给了 apache,apache 恰好解析第二个参数,便达到了攻击的目的。
该用法就是 HPP(HTTP Parameter Pollution)即 HTTP 参数污染攻击的一个应用。HPP 可对服务器和客户端都能够造成一定的威胁。