目录
服务器(两层)架构介绍
Less-29
Less-30
Less-31
首先介绍一下 29,30,31 这三关的基本情况:
服务器端有两个部分:第一部分为 tomcat 为引擎的 jsp 型服务器,第二部分为 apache为引擎的 php 服务器,真正提供 web 服务的是 php 服务器。工作流程为:client 访问服务器,能直接访问到 tomcat 服务器,然后 tomcat 服务器再向 apache 服务器请求数据。数据返回路径则相反。
此处简单介绍一下相关环境的搭建。环境为 ubuntu14.04。此处以我搭建的环境为例,我们需要下载三个东西:tomcat 服务器、jdk、mysql-connector-java.分别安装,此处要注意jdk 安装后要 export环境变量,mysql-connector-java 需要将 jar文件复制到 jdk 的相关目录中。
接下来将 tomcat-files.zip 解压到 tomcat 服务器 webapp/ROOT 目录下,此处需要说明的是需要修改源代码中正确的路径和 mysql 用户名密码。到这里我们就可以正常访问 29-32 关了。
重点:index.php?id=1&id=2,你猜猜到底是显示 id=1 的数据还是显示 id=2 的?
Explain:apache(php)解析最后一个参数,即显示 id=2 的内容。Tomcat(jsp)解析第一个参数,即显示 id=1 的内容。
以上图片为大多数服务器对于参数解析的介绍。
此处我们想一个问题:index.jsp?id=1&id=2 请求,针对第一张图中的服务器配置情况,客户端请求首先过 tomcat,tomcat 解析第一个参数,接下来 tomcat 去请求 apache(php)服务器,apache 解析最后一个参数。那最终返回客户端的应该是哪个参数?
Answer:此处应该是 id=2 的内容,应为时间上提供服务的是 apache(php)服务器,返回的数据也应该是 apache 处理的数据。而在我们实际应用中,也是有两层服务器的情况,那为什么要这么做?是因为我们往往在 tomcat 服务器处做数据过滤和处理,功能类似为一个 WAF。而正因为解析参数的不同,我们此处可以利用该原理绕过 WAF 的检测。该用法就是 HPP(HTTP Parameter Pollution),http 参数污染攻击的一个应用。HPP 可对服务器和客户端都能够造成一定的威胁。
第29关被称为世界上最好的WAF,但我们直接开始做的时候,发现它与第1关一样,这显然是不对的。这一次29-32关在其他地方,同时还需要配置下环境 。
配置jspstudy环境
sqli-labs-master文件夹下面还有tomcat文件,这才是真正的关卡,里面的jspstudy需要搭建环境jspstudy
jspstudy的下载包:Windows版phpstudy下载 - 小皮面板(phpstudy)
接着我们将之前解压的tomcat文件中的sqli-labs文件复制到WWW文件中
打开其中的Less-29,右击用Notepad打开index.jsp,我们看到选中的地方,括号里的网址所指向的目录,这是将要打开的原来65关Less-29的index.php所在的位置,根据自己的情况来修改,我这里的地址如图所示:
我们接下来需要修改Jsp Study的端口号,因为php Study默认端口为80,不修改可能会因为端口占用而无法启动,按照下图操作即可:
通过火狐登陆,输入网址加上:8080是jsp,此时页面还有点异常 :
我们需要在后面加上index.jsp?id=1的时候,返回正常了.
开始正式的29关
参数污染:jsp/tomcat使用getgetParameter("id")获取到的是第一个值,php/apache使用$_GET["id"]获取的是第二个值,那么第一个id纯数字,第二个id的值,也就是,需要注入两个参数,第二个参数才是可以实现sql注入的。
使用两个id的命令:index.jsp?id=1&id=2请求,服务器配置情况,客户端请求首先过tomcat,tomcat解析第一个参数,接下来tomcat去请求apache(php)服务器,apache解析最后一个参数。那最终返回客户端的应该是id=2的参数。
即jsp/tomcat使用getParameter("id")获取到的是第一个值,php/apache使用$_GET["id"]获取的是第二个值,那么第一个id纯数字,第二个id的值我们往往在tomcat服务器处做数据过滤和处理,功能类似为一个WAF。而正因为解析参数的不同,我们此处可以利用该原理绕过WAF的检测。该用法就是HPP(HTTP Parameter Pollution),http参数污染攻击的一个应用。HPP可对服务器和客户端都能够造成一定的威胁。
apache 解析后面的参数 http://127.0.0.1:8080/sqli-labs/Less-29/index.jsp?id=1&id=2'--+
接下来我们在后面的id进行注入,语句为联合查询的语句,请参照第一关的语句,这里只举第一句为例:http://127.0.0.1:8080/sqli-labs/Less-29/index.jsp?id=1&id=-2'union select 1,2,group_concat(schema_name)from information_schema.schemata --+
ps:安装jsp并运行这个我也没有搞定,由于时间比较仓促,可以参考一下这个视频:
sql注入之sqli-labs系列教程(less29-31)_哔哩哔哩_bilibili
Less-30 与 less-29 原理是一致的,我们可以看到 less-30 的 sql 语句为:
这一关的包裹形式变为了双引号,其他地方均与29关相同,此处省略:
此处包裹变为“),其他均与29,30关相同,不再赘述
http://127.0.0.1:8080/sqli-labs/Less-31/index.jsp?id=1&id=-2") union select 1,2,3--+
参考网址:sqli-labs Less29-Less31 - 骑着七彩祥云的少年 - 博客园
参考视频:sql注入之sqli-labs系列教程(less29-31)_哔哩哔哩_bilibili
总结:从以上三关中,我们主要学习到的是不同服务器对于参数的不同处理,HPP 的应用有很多,不仅仅是我们上述列出过 WAF 一个方面,还有可以执行重复操作,可以执行非法操作等。同时针对 WAF 的绕过,我们这里也仅仅是抛砖引玉,后续的很多的有关 HPP 的方法需要共同去研究。这也是一个新的方向。
个人感觉还是参考视频比较靠谱,我这边环境问题,没有搞成功。