sqlilabs靶场记录双服务器(六)

搭建双服务器Tomcat和Apache

由于第29,30,31关需要双服务器环境,即Tomcat和Apache。这里以win2003为环境,利用JSP和PHPStudy来搭建服务器,由于我们已经在PHPStudy上搭建好了Apache服务器,现在只需要在JSP上搭建Tomcat即可。
首先下载JSP

https://www.xp.cn/download.html

sqli-labs文件夹下面还有tomcat文件

image-20220317221150218

解压放到JSPstudy的www目录下

image-20220317221215602

image-20220317221228439

需要改文件

image-20220317221327425

改两处,改成自己的配置,接着改30和31关

less-29基于错误GET双服务器单引号字符型注入

image-20220317221639853

服务器双层架构

image-20220317221650564

服务器端有两个部分,第一部分是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

image-20220317222232693

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 可对服务器和客户端都能够造成一定的威胁。

注入测试

http://10.184.39.243:8080/sqlilabs/Less-29/?id=1	回显正常
http://10.184.39.243:8080/sqlilabs/Less-29/?id=1'

image-20220317222614870

点击返回

从跳转到.jsp页面可以看出来是 Tomcat 服务器,一般来说,现在没有拿 jsp 写后台的了,大都用 php ,我们果断猜测是双服务器。

注入点测试

http://10.184.39.243:8080/sqlilabs/Less-29/?id=1&id=1	回显正常
http://10.184.39.243:8080/sqlilabs/Less-29/?id=1&id=1'

image-20220317222802546

有正确回显和错误回显,单引号无小括号,剩下的事就好办了,可以发现没有其他任何的过滤条件,是最简单的注入之一。

less-30基于错误GET双服务器双引号字符型盲注

image-20220317223127563

有正确回显但无错误回显,所以可以盲注,延时注入,联合注入

less-31基于错误GET双服务器双引号小括号字符型注入

image-20220317223320955

和前面的做法一样,只不过这里是小括号+双引号闭合罢了

从以上三关中,我们主要学习到的是不同服务器对于参数的不同处理,HPP 的应用有
很多,不仅仅是我们上述列出过 WAF 一个方面,还有可以执行重复操作,可以执行非法操
作等。同时针对 WAF 的绕过,我们这里也仅仅是抛砖引玉,后续的很多的有关 HPP 的方法
需要共同去研究。这也是一个新的方向。