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文件
解压放到JSPstudy的www目录下
需要改文件
改两处,改成自己的配置,接着改30和31关
less-29基于错误GET双服务器单引号字符型注入
服务器双层架构
服务器端有两个部分,第一部分是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 可对服务器和客户端都能够造成一定的威胁。
注入测试
http://10.184.39.243:8080/sqlilabs/Less-29/?id=1 回显正常
http://10.184.39.243:8080/sqlilabs/Less-29/?id=1'
点击返回
从跳转到.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'
有正确回显和错误回显,单引号无小括号,剩下的事就好办了,可以发现没有其他任何的过滤条件,是最简单的注入之一。
less-30基于错误GET双服务器双引号字符型盲注
有正确回显但无错误回显,所以可以盲注,延时注入,联合注入
less-31基于错误GET双服务器双引号小括号字符型注入
和前面的做法一样,只不过这里是小括号+双引号闭合罢了
从以上三关中,我们主要学习到的是不同服务器对于参数的不同处理,HPP 的应用有
很多,不仅仅是我们上述列出过 WAF 一个方面,还有可以执行重复操作,可以执行非法操
作等。同时针对 WAF 的绕过,我们这里也仅仅是抛砖引玉,后续的很多的有关 HPP 的方法
需要共同去研究。这也是一个新的方向。