1 package com.jsql.view.subscriber;
2
3 import com.jsql.model.injection.strategy.AbstractStrategy;
4 import com.jsql.model.injection.strategy.StrategyError;
5 import com.jsql.util.LogLevelUtil;
6 import com.jsql.view.swing.panel.consoles.NetworkTable;
7 import com.jsql.view.swing.terminal.AbstractExploit;
8 import com.jsql.view.swing.util.MediatorHelper;
9 import org.apache.logging.log4j.LogManager;
10 import org.apache.logging.log4j.Logger;
11
12 import javax.swing.table.DefaultTableModel;
13 import java.awt.*;
14 import java.util.Arrays;
15 import java.util.UUID;
16
17 public class SubscriberView extends AbstractSubscriber {
18
19 private static final Logger LOGGER = LogManager.getRootLogger();
20
21 @Override
22 protected void execute(Seal request) {
23 this.addLog(request);
24 this.progress(request);
25 this.executeInjection(request);
26 this.createTab(request);
27 this.executeExploit(request);
28 }
29
30 private void executeInjection(Seal request) {
31 switch (request) {
32 case Seal.ActivateEngine r -> MediatorHelper.panelAddressBar().getPanelTrailingAddress().setEngine(r.engine());
33 case Seal.AddColumns(var columns) -> MediatorHelper.treeDatabase().addColumns(columns);
34 case Seal.AddTables(var tables) -> MediatorHelper.treeDatabase().addTables(tables);
35 case Seal.AddDatabases(var databases) -> MediatorHelper.treeDatabase().addDatabases(databases);
36
37 case Seal.MarkStrategyInvulnerable(int indexError, AbstractStrategy strategy) -> {
38 if (strategy instanceof StrategyError) {
39 MediatorHelper.panelAddressBar().getPanelTrailingAddress().markInvulnerable(indexError, strategy);
40 } else {
41 MediatorHelper.panelAddressBar().getPanelTrailingAddress().markInvulnerable(strategy);
42 }
43 }
44 case Seal.MarkStrategyVulnerable(int indexError, var strategy) -> {
45 if (strategy instanceof StrategyError) {
46 MediatorHelper.panelAddressBar().getPanelTrailingAddress().markVulnerable(indexError, strategy);
47 } else {
48 MediatorHelper.panelAddressBar().getPanelTrailingAddress().markVulnerable(strategy);
49 }
50 }
51 case Seal.ActivateStrategy(var strategy) -> MediatorHelper.panelAddressBar().getPanelTrailingAddress().activateStrategy(strategy);
52
53 case Seal.MarkFileSystemInvulnerable ignored -> MediatorHelper.tabManagersCards().markFileSystemInvulnerable();
54 case Seal.MarkFileSystemVulnerable ignored -> MediatorHelper.tabManagersCards().markFileSystemVulnerable();
55 default -> {
56
57 }
58 }
59 }
60
61 private void executeExploit(Seal request) {
62 switch (request) {
63 case Seal.AddTabExploitSql(var urlSuccess, var username, var password) -> MediatorHelper.tabResults().addTabExploitSql(urlSuccess, username, password);
64 case Seal.AddTabExploitUdf r -> MediatorHelper.tabResults().addTabExploitUdf(r.biConsumerRunCmd());
65 case Seal.AddTabExploitWeb(String urlSuccess) -> MediatorHelper.tabResults().addTabExploitWeb(urlSuccess);
66 case Seal.GetTerminalResult(UUID uuidShell, String result) -> {
67 AbstractExploit terminal = MediatorHelper.frame().getMapUuidShell().get(uuidShell);
68 if (terminal != null) {
69 terminal.append(result);
70 terminal.append("\n");
71 terminal.reset();
72 }
73 }
74 default -> {
75
76 }
77 }
78 }
79
80 private void addLog(Seal request) {
81 switch (request) {
82 case Seal.MessageBinary(var message) -> {
83 MediatorHelper.panelConsoles().messageBinary(message);
84 MediatorHelper.tabConsoles().setBold("Boolean");
85 }
86 case Seal.MessageChunk(var message) -> {
87 MediatorHelper.panelConsoles().messageChunk(message);
88 MediatorHelper.tabConsoles().setBold("Chunk");
89 }
90 case Seal.MessageHeader r -> {
91 NetworkTable table = MediatorHelper.panelConsoles().getNetworkTable();
92 table.addHeader(r);
93 DefaultTableModel model = (DefaultTableModel) table.getModel();
94 try {
95 model.addRow(new Object[] {
96 r.url(),
97 r.size(),
98 r.metadataStrategy(),
99 Arrays.asList(r.metadataProcess(), r.metadataBoolean())
100 });
101
102 Rectangle rect = table.getCellRect(table.getRowCount() - 1, 0, true);
103 table.scrollRectToVisible(rect);
104
105 MediatorHelper.tabConsoles().setBold("Network");
106 } catch(NullPointerException | IndexOutOfBoundsException e) {
107
108 LOGGER.log(LogLevelUtil.CONSOLE_JAVA, e, e);
109 }
110 }
111 default -> {
112
113 }
114 }
115 }
116
117 private void createTab(Seal request) {
118 switch (request) {
119 case Seal.CreateAdminPageTab(String urlSuccess) -> MediatorHelper.tabResults().addAdminTab(urlSuccess);
120 case Seal.CreateAnalysisReport(var content) -> MediatorHelper.tabResults().addReportTab(content.trim());
121 case Seal.CreateFileTab(var name, var content, var path) -> MediatorHelper.tabResults().addFileTab(name, content, path);
122 case Seal.CreateValuesTab(var columns, var table, var tableBean) -> MediatorHelper.treeDatabase().createValuesTab(table, columns, tableBean);
123 default -> {
124
125 }
126 }
127 }
128
129 private void progress(Seal request) {
130 switch (request) {
131 case Seal.StartIndeterminateProgress(var table) -> MediatorHelper.treeDatabase().startIndeterminateProgress(table);
132 case Seal.StartProgress(var elementDatabase) -> MediatorHelper.treeDatabase().startProgress(elementDatabase);
133 case Seal.UpdateProgress(var database, var countProgress) -> MediatorHelper.treeDatabase().updateProgress(database, countProgress);
134 case Seal.EndIndeterminateProgress(var table) -> MediatorHelper.treeDatabase().endIndeterminateProgress(table);
135 case Seal.EndPreparation ignored -> {
136 MediatorHelper.panelAddressBar().getPanelTrailingAddress().endPreparation();
137 if (MediatorHelper.model().shouldErasePreviousInjection()) {
138 MediatorHelper.tabManagersCards().endPreparation();
139 }
140 }
141 case Seal.EndProgress(var elementDatabase) -> MediatorHelper.treeDatabase().endProgress(elementDatabase);
142 default -> {
143
144 }
145 }
146 }
147 }