前言
打了四个半小时,没打出来,应该是对JDBC的各种洞不太了解,一直没思路,后面有思路了也没找到链子
题解
题目描述是小安的数据源测试站已经开发了一部分,所以这题前端上线了两个功能,但后端还有一个
SQLITE,这样看起来就是要打这个SQLITE了。
CVE-2023-32697——sqlite jdbc RCE (qq.com)
1 |
|
1 | gcc evil.c -o evil.so -static |
可执行文件在运行时不依赖于外部的动态库,这使得在没有相应库的系统上也能运行。
ldd来查看是否为静态文件。
漏洞的主要点在这里
fix: use random UUID for external resources · xerial/sqlite-jdbc@edb4b8a (github.com)
通过UUID代替hashcode使得缓存不可见了
大概利用思路就是把evil.so文件写入然后再通过db文件执行sql语句
1 | CREATE VIEW test as SELECT (SELECT load_extension('/tmp/sqlite-jdbc-tmp-1464932377.db')) |
来挂载evil.so文件来执行。
这个hash值就是http://150.158.33.89:81/evil.so通过`new URL(url2).hashCode()`跑出来的,这样就能找到这个evil.so文件了。
还有一种解,应该是预期解了,利用了题目中的类
还是MySQL打反序列化,
MYSQL JDBC反序列化解析 - 跳跳糖 (tttang.com)
小白看得懂的MySQL JDBC 反序列化漏洞分析 - 先知社区 (aliyun.com)
利用的链子是AspectJWeaver反序列化利用链 - 先知社区 (aliyun.com)只要控制对象,然后触发put方法就可以控制文件上传。
然后再利用[JavaSec/9.JDBC Attack/SQLite/index.md at main · Y4tacker/JavaSec (github.com)](https://github.com/Y4tacker/JavaSec/blob/main/9.JDBC Attack/SQLite/index.md)
使用load_extension来加载上传的恶意文件来反弹shell
小结
经验少了,这些洞都挺有价值的,以后有时间来仔细分析一下吧。感觉比赛还是缺乏搜集信息的能力。