Java入门
学!
ClassLoader
Java的类都不是一启动就全部加载了的,有些类只在被需要时才被临时加载进JVM。而实现类加载的就是Java的ClassLoader,这个东西感觉在学Java的时候会无数次的被提及,以及他相应的一些知识点。
题目本身出的很诡异,flag删了然后源码里面放了一个憨批对称加密函数,加密过的flag放进了config里面,config可以直接看(BUU题目描述上的那个加密函数是错的),过滤了单引号点号下划线
目标是读源码
只过滤了单引号,双引号还能用,python单双引号好像没有什么大的区别,留了一个能用的就行
单双引号全挂了还过滤字符的话就只能用上次DASCTF的凑%c
和全数字,然后一个个格式化字符串凑字母表
这里不用太麻烦,直接在双引号里面用十六进制\\x00
就能绕过下划线的过滤,点号的过滤用方括号代替,一样能访问属性。
然后随便找个常用payload读文件就能打通。这次的记录主要是重新学习总结了一下SSTI相关的东西,找个机会开一篇文章
平台好卡,环境时不时就访问不上了。卡到不想做题。。。感觉题目也有点莫名其妙的
很容易验证是SSTI,先fuzz一遍过滤的字符# "'.0123456789:[\_ config chr request pop
大概测出来这些,不给用引号数字点号右括号下划线和几个函数,访问属性可以用attr()|attr()
这样子绕,不过下划线这些关键字符还是得想办法搞出来,并且没了数字chr和引号也不好凑字符串了
以前看到过”%c”%num这种方法进行格式化字符串来拼字符的,现在的问题就在于引号没得数字没得,凑不出来,看到这么文章上写了这么个东西{%set pc = g|lower|list|first|urlencode|first%} 取得%
用set定义一堆变量开始慢慢拼,g是flask一个奇怪的模块,g|lower|list|first
会获得一个字符<
,其URL编码为%3C,直接一波获得%c两个字符{%set c = g|lower|list|first|urlencode|last|lower%} 取得c
{%set udl=(pc,c)|join%}
得到”%c”字符串,接下来就要想办法获取数字了,可以像上面的方法如法炮制url反复编码拿到数字,也可以用bool变量加加减减获得数字{%set one=-(False-True)%}
,然后一路加法获得所有数字
最后通过{%set a=udl%((nine|string, seven|string)|join|int) %}
这样子获得
最后的最后凑齐字母表再一个个join起来通过attr()形式命令执行