getFileModifiedTime.c
#include <mysql.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <time.h> #include <sys/types.h> #include <sys/stat.h> #include <errno.h> #include <unistd.h> #include <stdint.h> /*资源分配*/ my_bool getFileModifiedTime_init(UDF_INIT *initid, UDF_ARGS *args, char *message); /*自定义函数*/ char *getFileModifiedTime(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error); /*资源回收*/ void getFileModifiedTime_deinit(UDF_INIT *initid); /* 参数说明: UDF_INT *initid UDF_INIT 指针可以用于将分配好的资源传递给其他函数使用。 UDF_ARG *args UDF_ARG 指针 char *message 出错信息指针 返回值 0 成功, 1 失败 针对UFD_INT和UDF_ARG的成员做一个简单说明。 typedef struct st_udf_args { unsigned int arg_count; 参数个数 enum Item_result *arg_type; 参数类型 char **args; 参数指针 unsigned long *lengths; 参数长度 char *maybe_null; 是否可以为空,1表示可以为空 char **attributes; 参数属性的指针 unsigned long *attribute_lengths; 参数属性的指针指向内容的长度 void *extension; 扩展指针 } UDF_ARGS; typedef struct st_udf_init { my_bool maybe_null; 1表示返回值可以为空 unsigned int decimals; 可以用来设置double类型小数点后的长度 unsigned long max_length; 自定义字符串函数返回结果的最大长度 char *ptr; 字符串指针 一般init里面分配的内存可以把地址给ptr,用于传递到其他函数,比如deinit里面释放分配的内存 my_bool const_item; 函数是否返回固定结果 void *extension; 扩展指针 } UDF_INIT; */ /* init函数在getFileModifiedTime函数执行前调用*/ my_bool getFileModifiedTime_init(UDF_INIT *initid, UDF_ARGS *args, char *message) { if(args->arg_count==1 && args->arg_type[0]==STRING_RESULT ){ initid->maybe_null = 1; return 0; } else { strcpy( message , "Expected exactly one parameter(STRING filePath)" ); return 1; } } /* 参数说明: UDF_INT *initid 同init函数 UDF_ARG *args 用于读取穿进来参数的信息:传入的值,传入值的长度 ,类型等等,具体看上面结构体的说明 *result 保留参数 *length 用于设置返回值的长度 *is_null 是否为空 *error 如果设置为1自定义函数将不被再调用 */ char *getFileModifiedTime(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error) { struct stat attr; int tmpResult = -1; static char str_time[20]; struct tm *local_time = NULL; time_t utc_time; tmpResult=stat(args->args[0], &attr); if (tmpResult == -1 ) { *length=0; return NULL; } /**length=strlen(ctime(&attr.st_mtime)); return ctime(&attr.st_mtime);*/ utc_time = attr.st_mtime; local_time = localtime(&utc_time); strftime(str_time, sizeof(str_time), "%Y-%m-%d %H:%M:%S", local_time); *length=sizeof(str_time); return str_time; } /* deinit函数在getFileModifiedTime函数执行完调用*/ void getFileModifiedTime_deinit(UDF_INIT *initid) { if(initid->ptr){ free(initid->ptr); } return; }
gcc -shared -o getFileModifiedTime.so getFileModifiedTime.c -I /usr/include/mysql
sudo cp getFileModifiedTime.so /usr/lib/mysql/plugin/
mysql@localhost:(none) 05:31:46>create function getFileModifiedTime returns string soname "getFileModifiedTime.so";
mysql@localhost:(none) 05:31:46>select getFileModifiedTime("/home/haibo/script/c/getFileModifiedTime.c");
+-------------------------------------------------------------------+
| getFileModifiedTime("/home/haibo/script/c/getFileModifiedTime.c") |
+-------------------------------------------------------------------+
| 2016-11-10 17:02:04 |
+-------------------------------------------------------------------+
备注:只适合[linux/unix]
相关推荐
本文将详细阐述 MySQL 提权的四种常见方法:UDF 提权、VBS 提权、WebShell 提权以及 Linux 下的 MySQL Backdoor 提权。 #### 一、UDF 提权 **UDF(User Defined Function)提权** 是指通过创建自定义函数来执行...
4. 配置MySQL服务器以允许HTTP访问,这可能涉及到修改`my.cnf`配置文件,添加相应的安全设置和权限。注意,通过HTTP传输数据可能存在安全风险,因此需要谨慎设置防火墙规则和访问控制。 5. 最后,测试HTTP UDF功能...
1. **下载安装包**:用户可以从MySQL官方网站或第三方下载站点获取MySQL5.0.22的安装程序,确保下载的是适合自己操作系统的版本,如Windows、Linux或Mac OS。 2. **运行安装程序**:在Windows环境下,双击下载的....
- **下载与安装**:MySQL可以从官方网站下载,有多种操作系统版本,如Windows、Linux、Mac OS等。 - **配置MySQL服务器**:包括设置用户、密码、端口、数据存储路径等。 3. **数据库与表** - **创建数据库**:...
- 权限提升是关键,针对Windows系统,可能存在MySQL UDF提权、Serv-U提权或旧版本漏洞(如IIS6、PR、巴西烤肉),而在Linux环境下,脏牛漏洞、内核版本漏洞和MySQL、Oracle的提权策略同样重要。完成攻击后,清理...
- MySQL数据库的UDF提权、Serv-U提权等。 - Windows系统下的溢出提权、Linux系统下的脏牛漏洞、内核版本漏洞提权等。 ### 清除测试痕迹与报告编写 **4. 清理测试数据** - 在完成渗透测试后,确保清除所有测试...
4. **权限提升**:在获得初步权限后,可能需要进一步提权,例如Windows下的MySQL UDF提权、Linux脏牛漏洞提权等。 5. **安全开发生命周期**(SDLC)和源代码审计:强调了在开发阶段就考虑安全的重要性,通过审计源...
5. **权限提升** 是渗透测试的关键步骤,涉及Windows和Linux下的提权技术,如MySQL UDF、Serv-U、脏牛漏洞等。 6. **日志清理** 是为了防止留下痕迹,消除攻击证据。 7. **CMS识别** 有助于找到已知的CMS漏洞,而*...
29、公共字段(创建时间,创建人,修改时间,修改者)插入或更新时自动填充 30、对swagger接口进行token验证 31、任务增加超时时间,对超时任务kill datax进程,可配合重试策略避免网络问题导致的datax卡死。 32、...