.
diff --git a/pom.xml b/pom.xml
index c13846b..0052706 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
io.mixeway
MixewayOpenVasRestAPI
- 1.0.0-SNAPSHOT
+ 1.2.0-SNAPSHOT
jar
MixewayOpenVasRestAPI
@@ -83,6 +83,21 @@
javassist
3.25.0-GA
+
+ org.springframework
+ spring-test
+ 5.2.3.RELEASE
+
+
+ junit
+ junit
+
+
+ org.apache.commons
+ commons-lang3
+ 3.12.0
+
+
diff --git a/readme.md b/readme.md
index 78bae30..3b7c114 100644
--- a/readme.md
+++ b/readme.md
@@ -87,7 +87,6 @@ Path | HTTP Method | Request Body | Description
/initialize | POST | {
"username":"openvasadmin",
"password":"changeit"
} | Testing endpoint for verification if everything works properly
/createtarget | POST | {
"user": {
"username":"openvasadmin",
"password":"changeit"
},
"params": {
"name":"test_target",
"hosts":"127.0.0.0/28"
}
} | Method which will create targets with `name` and host values `hosts`
/createtask | POST | {
"user": {
"username":"openvasadmin",
"password":"changeit"
},
"params": {
"config_id":"ffffff-ffff-ffff-ffffffffffff",
"target_id":"ffffff-ffff-ffff-ffffffffffff",
"name":"task_name",
"scanner_id":"ffffff-ffff-ffff-ffffffffffff"
}
} | Method which will create taks with given configuration, on particular scan and selected target
-/modifytask/{taskId} | POST | {
"user": {
"username":"openvasadmin",
"password":"changeit"
},
"params": {
"task_id":"ffffff-ffff-ffff-ffffffffffff",
"target_id":"ffffff-ffff-ffff-ffffffffffff"
}
} | Method which modify target for givent taks
/starttask | POST | {
"user": {
"username":"openvasadmin",
"password":"changeit"
},
"params": {
"task_id":"ffffff-ffff-ffff-ffffffffffff"
}
} | Starting task by task_id
/checktask | POST | {
"user": {
"username":"openvasadmin",
"password":"changeit"
},
"params": {
"task_id":"ffffff-ffff-ffff-ffffffffffff"
}
} | Checking status of task (Running, completed)
/getreport | POST | {
"user": {
"username":"openvasadmin",
"password":"changeit"
},
"params": {
"report_id":"ffffff-ffff-ffff-ffffffffffff"
}
} | Getting vulnerabilities from OpenVAS by report_id
diff --git a/src/main/java/pl/orange/bst/mixer/NoAuthSecurityConfig.java b/src/main/java/pl/orange/bst/mixer/NoAuthSecurityConfig.java
new file mode 100644
index 0000000..961b7e6
--- /dev/null
+++ b/src/main/java/pl/orange/bst/mixer/NoAuthSecurityConfig.java
@@ -0,0 +1,35 @@
+package pl.orange.bst.mixer;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Profile;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.core.authority.AuthorityUtils;
+import org.springframework.security.core.userdetails.User;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+@Configuration
+@EnableWebSecurity
+@EnableGlobalMethodSecurity(prePostEnabled = true)
+@Profile("noauth")
+public class NoAuthSecurityConfig extends WebSecurityConfigurerAdapter {
+
+
+ @Override
+ protected void configure(HttpSecurity http) throws Exception {
+ http.csrf().disable();
+ http
+ .authorizeRequests()
+ .antMatchers("/**").permitAll();
+ }
+}
diff --git a/src/main/java/pl/orange/bst/mixer/Config.java b/src/main/java/pl/orange/bst/mixer/SecurityConfig.java
similarity index 94%
rename from src/main/java/pl/orange/bst/mixer/Config.java
rename to src/main/java/pl/orange/bst/mixer/SecurityConfig.java
index 3d45fc1..c37dafe 100644
--- a/src/main/java/pl/orange/bst/mixer/Config.java
+++ b/src/main/java/pl/orange/bst/mixer/SecurityConfig.java
@@ -8,6 +8,7 @@
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Profile;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
@@ -26,7 +27,8 @@
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
-public class Config extends WebSecurityConfigurerAdapter {
+@Profile("!noauth")
+public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Value("${allowed.users}")
private String commonNames;
diff --git a/src/main/java/pl/orange/bst/mixer/Test.java b/src/main/java/pl/orange/bst/mixer/Test.java
new file mode 100644
index 0000000..3cf7224
--- /dev/null
+++ b/src/main/java/pl/orange/bst/mixer/Test.java
@@ -0,0 +1,57 @@
+/*
+ * @created 2021-01-27 : 09:38
+ * @project MixewayScanner
+ * @author siewer
+ */
+package pl.orange.bst.mixer;
+
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.context.support.AnnotationConfigContextLoader;
+import pl.orange.bst.mixer.openvas.helper.XmlOperationBuilder;
+import pl.orange.bst.mixer.openvas.pojo.User;
+
+import javax.xml.bind.JAXBException;
+import java.util.HashMap;
+
+@RunWith(SpringRunner.class)
+@ContextConfiguration(classes= AnnotationConfigContextLoader.class)
+public class Test {
+
+
+ @org.junit.Test
+ public void createTarget() throws JAXBException {
+ XmlOperationBuilder xob = new XmlOperationBuilder();
+ User user = new User("gvmadmin","1qaz@WSX");
+ HashMap params =new HashMap<>();
+ params.put("hosts","192.168.1.1,192.168.1.2");
+ params.put("name","random_rtarget");
+ System.out.println("Create TargeT:");
+ System.out.println(buildCommandPrefix(user) + "\""+xob.buildCreateTarget(user, params)+"\"");
+ }
+ @org.junit.Test
+ public void createTask() throws JAXBException {
+ XmlOperationBuilder xob = new XmlOperationBuilder();
+ User user = new User("gvmadmin","1qaz@WSX");
+ HashMap params =new HashMap<>();
+ params.put("report_id","c9299f55-c17f-4e33-a3b0-48809213ee6d");
+ System.out.println("Create task:");
+ System.out.println(buildCommandPrefix(user) + "'"+xob.buildGetReport(user, params)+"'");
+ }
+ @org.junit.Test
+ public void getReport() throws JAXBException {
+ XmlOperationBuilder xob = new XmlOperationBuilder();
+ User user = new User("gvmadmin","1qaz@WSX");
+ HashMap params =new HashMap<>();
+ params.put("report_id","c9299f55-c17f-4e33-a3b0-48809213ee6d");
+ System.out.println("Create task:");
+ System.out.println(buildCommandPrefix(user) + "'"+xob.buildGetReport(user, params)+"'");
+ }
+
+
+
+ public String buildCommandPrefix(User user){
+ return String.format("gvm-cli --gmp-username=%s --gmp-password=%s socket --socketpath %s --xml ",user.getUsername(), user.getPassword(), "/opt/gvm/var/run/gvmd.sock");
+ }
+}
diff --git a/src/main/java/pl/orange/bst/mixer/openvas/OpenVasClient.java b/src/main/java/pl/orange/bst/mixer/openvas/OpenVasClient.java
index 7cd3764..0cbd066 100644
--- a/src/main/java/pl/orange/bst/mixer/openvas/OpenVasClient.java
+++ b/src/main/java/pl/orange/bst/mixer/openvas/OpenVasClient.java
@@ -11,6 +11,7 @@
import javax.xml.parsers.ParserConfigurationException;
import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
@@ -33,6 +34,8 @@
public class OpenVasClient {
@Value("${openvasmd.socket}")
private String socket;
+ @Value("${gvm-cli.exec}")
+ private String gvmCli;
XmlOperationBuilder xob = new XmlOperationBuilder();
private static final Logger log = LoggerFactory.getLogger(OpenVasClient.class);
@@ -64,47 +67,124 @@ public String taskStatus(RestRequestBody body) throws JAXBException, SAXExceptio
return getTaskStatusResponse(body.getUser(), body.getParams());
}
public ReportXml getReport(RestRequestBody body) throws JAXBException, SAXException, IOException, ParserConfigurationException {
- return getReportResponse(body.getUser(), body.getParams());
+ List vulns = new ArrayList<>();
+ int start =0;
+ vulns = loadVulns(body.getUser(), body.getParams(), start, vulns);
+ return new ReportXml(vulns);
}
-
- private ReportXml getReportResponse(User user, HashMap params) throws JAXBException, SAXException, IOException, ParserConfigurationException {
- ProcessBuilder pb = new ProcessBuilder("bash", "-c", "gvm-cli socket --socketpath "+socket+" --xml '"+xob.buildGetReport(user, params)+"'");
+
+ /**
+ * Version 11
+ */
+ private List loadVulns(User user, HashMap params, int start, List vulns) throws JAXBException, SAXException, IOException, ParserConfigurationException {
+ //ProcessBuilder pb = new ProcessBuilder("bash", "-c", "gvm-cli --timeout 600 socket --socketpath " + socket + " --xml '" + xob.buildGetResult(user, params, start) + "'");
+ ProcessBuilder pb = new ProcessBuilder("bash", "-c", buildCommandPrefix(user) + "'"+xob.buildGetResult(user, params, start)+"'");
String output = IOUtils.toString(pb.start().getInputStream());
Document doc = DocumentBuilderFactory.newInstance()
- .newDocumentBuilder()
- .parse(new InputSource(new StringReader(output)));
- Element reportNodeResponse = (Element) doc.getElementsByTagName("get_reports_response").item(0);
- Element reportNode = (Element) reportNodeResponse.getElementsByTagName("report").item(0);
- Element reportNode2 = (Element) reportNode.getElementsByTagName("report").item(0);
- Element results = (Element) reportNode2.getElementsByTagName("results").item(0);
+ .newDocumentBuilder()
+ .parse(new InputSource(new StringReader(output)));
+ Element results = (Element) doc.getElementsByTagName("get_results_response").item(0);
+ Element count = (Element) doc.getElementsByTagName("result_count").item(0);
+ int resultsCount = Integer.parseInt(count.getElementsByTagName("filtered").item(0).getTextContent());
+ log.info("Loading vulns for page {} and reportid: {}, result count {}", start, params.get(ConstantStrings.REPORT_ID), resultsCount);
+
NodeList vulnNode = results.getElementsByTagName("result");
- List vulns = new ArrayList<>();
-
if (vulnNode != null) {
- int length = vulnNode.getLength();
- for (int i = 0; i < length; i++) {
- if (vulnNode.item(i).getNodeType() == Node.ELEMENT_NODE) {
- Element el = (Element) vulnNode.item(i);
- try {
- Vuln v = new Vuln();
- v.setName(el.getElementsByTagName("name").item(0).getTextContent());
- v.setHost(el.getElementsByTagName("host").item(0).getFirstChild().getTextContent());
- v.setDesc(el.getElementsByTagName("description").item(0).getTextContent());
- v.setPort(el.getElementsByTagName("port").item(0).getTextContent());
- v.setThreat(el.getElementsByTagName("threat").item(0).getTextContent());
- vulns.add(v);
- } catch (NullPointerException n) {
- log.warn("Something is wrong with one of the results, nullpoitner returned");
- }
- }
- }
- }
-
+ int length = vulnNode.getLength();
+ for (int i = 0; i < length; i++) {
+ if (vulnNode.item(i).getNodeType() == Node.ELEMENT_NODE) {
+ Element el = (Element) vulnNode.item(i);
+ try {
+ Vuln v = new Vuln();
+ v.setName(el.getElementsByTagName("name").item(0).getTextContent());
+ v.setHost(el.getElementsByTagName("host").item(0).getFirstChild().getTextContent());
+ v.setDesc(el.getElementsByTagName("description").item(0).getTextContent());
+ v.setPort(el.getElementsByTagName("port").item(0).getTextContent());
+ if(StringUtils.isNumeric(el.getElementsByTagName("severity").item(0).getTextContent())) {
+ v.setThreat(getThreat(el.getElementsByTagName("severity").item(0).getTextContent()));
+ } else {
+ Element severityNvt = (Element) el.getElementsByTagName("severity").item(0);
+ v.setThreat(getThreat(severityNvt.getElementsByTagName("score").item(0).getTextContent()));
+ }
+ vulns.add(v);
+ } catch (NullPointerException n) {
+ //n.printStackTrace();
+ log.info("Something is wrong with one of the results, nullpoitner returned");
+ }
+ }
+ }
+ }
+ log.info("Vunlns contains {} records", vulns.size());
+ if (((start * 1000) + 1000) < resultsCount){
+ start++;
+ vulns.addAll(loadVulns(user, params,start, vulns));
+ }
+
+ return vulns;
+ }
+
+ private String getThreat(String severity) {
+ double sev = Double.parseDouble(severity);
+ if (sev == 0.0){
+ return "Info";
+ } else if (sev <=4.0){
+ return "Low";
+ } else if (sev <=6.0) {
+ return "Medium";
+ } else if (sev <=8.0){
+ return "High";
+ } else {
+ return "Critical";
+ }
+ }
+
+ /**
+ * Version 9
+ */
+
+ private ReportXml getReportResponse(User user, HashMap params) throws JAXBException, SAXException, IOException, ParserConfigurationException {
+ List vulns = new ArrayList<>();
+ try {
+ ProcessBuilder pb = new ProcessBuilder("bash", "-c", "gvm-cli --timeout 600 socket --socketpath " + socket + " --xml '" + xob.buildGetReport(user, params) + "'");
+ String output = IOUtils.toString(pb.start().getInputStream());
+ Document doc = DocumentBuilderFactory.newInstance()
+ .newDocumentBuilder()
+ .parse(new InputSource(new StringReader(output)));
+ Element reportNodeResponse = (Element) doc.getElementsByTagName("get_reports_response").item(0);
+ Element reportNode = (Element) reportNodeResponse.getElementsByTagName("report").item(0);
+ Element reportNode2 = (Element) reportNode.getElementsByTagName("report").item(0);
+ Element results = (Element) reportNode2.getElementsByTagName("results").item(0);
+ NodeList vulnNode = results.getElementsByTagName("result");
+
+
+ if (vulnNode != null) {
+ int length = vulnNode.getLength();
+ for (int i = 0; i < length; i++) {
+ if (vulnNode.item(i).getNodeType() == Node.ELEMENT_NODE) {
+ Element el = (Element) vulnNode.item(i);
+ try {
+ Vuln v = new Vuln();
+ v.setName(el.getElementsByTagName("name").item(0).getTextContent());
+ v.setHost(el.getElementsByTagName("host").item(0).getFirstChild().getTextContent());
+ v.setDesc(el.getElementsByTagName("description").item(0).getTextContent());
+ v.setPort(el.getElementsByTagName("port").item(0).getTextContent());
+ v.setThreat(el.getElementsByTagName("threat").item(0).getTextContent());
+ vulns.add(v);
+ } catch (NullPointerException n) {
+ log.warn("Something is wrong with one of the results, nullpoitner returned");
+ }
+ }
+ }
+ }
+ } catch (NullPointerException e){
+ log.warn("No results");
+ }
return new ReportXml(vulns);
}
+
private String getTaskStatusResponse(User user, HashMap params) throws JAXBException, SAXException, IOException, ParserConfigurationException {
- ProcessBuilder pb = new ProcessBuilder("bash", "-c", "gvm-cli socket --socketpath "+socket+" --xml '"+xob.buildGetTask(user, params)+"'");
+ ProcessBuilder pb = new ProcessBuilder("bash", "-c", buildCommandPrefix(user) + "'"+xob.buildGetTask(user, params)+"'");
String output = IOUtils.toString(pb.start().getInputStream());
Document doc = DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
@@ -118,8 +198,10 @@ private String getTaskStatusResponse(User user, HashMap params)
return null;
}
private String getRunTask(User user, HashMap params) throws JAXBException, SAXException, IOException, ParserConfigurationException {
- ProcessBuilder pb = new ProcessBuilder("bash", "-c", "gvm-cli socket --socketpath "+socket+" --xml '"+xob.buildStartTask(user, params)+"'");
+ ProcessBuilder pb = new ProcessBuilder("bash", "-c", buildCommandPrefix(user) + "'"+xob.buildStartTask(user, params)+"'");
String output = IOUtils.toString(pb.start().getInputStream());
+ log.debug("Request for starttask is {}", buildCommandPrefix(user) + "'"+xob.buildStartTask(user, params)+"'");
+ log.debug("Output for starttask is {}", output);
Document doc = DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
.parse(new InputSource(new StringReader(output)));
@@ -131,7 +213,7 @@ private String getRunTask(User user, HashMap params) throws JAXB
return null;
}
private String getModifyTaskResponse(User user, HashMap params) throws JAXBException, SAXException, IOException, ParserConfigurationException {
- ProcessBuilder pb = new ProcessBuilder("bash", "-c", "gvm-cli socket --socketpath "+socket+" --xml '"+xob.buildModifyTask(user, params)+"'");
+ ProcessBuilder pb = new ProcessBuilder("bash", "-c", buildCommandPrefix(user) + "'"+xob.buildModifyTask(user, params)+"'");
String output = IOUtils.toString(pb.start().getInputStream());
Document doc = DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
@@ -144,7 +226,7 @@ private String getModifyTaskResponse(User user, HashMap params)
return null;
}
private String getCreateTaskResponse(User user, HashMap params) throws JAXBException, SAXException, IOException, ParserConfigurationException {
- ProcessBuilder pb = new ProcessBuilder("bash", "-c", "gvm-cli socket --socketpath "+socket+" --xml '"+xob.buildCreateTask(user, params)+"'");
+ ProcessBuilder pb = new ProcessBuilder("bash", "-c", buildCommandPrefix(user) + "'"+xob.buildCreateTask(user, params)+"'");
String output = IOUtils.toString(pb.start().getInputStream());
Document doc = DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
@@ -157,8 +239,8 @@ private String getCreateTaskResponse(User user, HashMap params)
return null;
}
private String getConfigResponse(User user) throws SAXException, IOException, ParserConfigurationException, JAXBException {
- ProcessBuilder pb = new ProcessBuilder("bash", "-c", "gvm-cli socket --socketpath "+socket+" --xml \""+xob.buildGetConfig(user)+"\"");
- System.out.println("gvm-cli socket --socketpath "+socket+" --xml \""+xob.buildGetConfig(user)+"\"");
+ log.info("About to execute: {} {} {} '{}'","bash","-c", buildCommandPrefix(user),xob.buildGetConfig(user) );
+ ProcessBuilder pb = new ProcessBuilder("bash", "-c", buildCommandPrefix(user) + "'"+xob.buildGetConfig(user)+"'");
String output = IOUtils.toString(pb.start().getInputStream());
Document doc = DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
@@ -179,7 +261,7 @@ private String getConfigResponse(User user) throws SAXException, IOException, Pa
}
private String getScannerResponse(User user) throws SAXException, IOException, ParserConfigurationException, JAXBException {
- ProcessBuilder pb = new ProcessBuilder("bash", "-c", "gvm-cli socket --socketpath "+socket+" --xml \""+xob.buildGetScanners(user)+"\"");
+ ProcessBuilder pb = new ProcessBuilder("bash", "-c", buildCommandPrefix(user) + "'"+xob.buildGetScanners(user)+"'");
String output = IOUtils.toString(pb.start().getInputStream());
Document doc = DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
@@ -200,8 +282,10 @@ private String getScannerResponse(User user) throws SAXException, IOException, P
}
private String getCreateTargetRespnse(User user, HashMap params) throws JAXBException, SAXException, IOException, ParserConfigurationException {
- ProcessBuilder pb = new ProcessBuilder("bash", "-c", "gvm-cli socket --socketpath "+socket+" --xml \""+xob.buildCreateTarget(user, params)+"\"");
+ ProcessBuilder pb = new ProcessBuilder("bash", "-c", buildCommandPrefix(user) + "'"+xob.buildCreateTarget(user, params)+"'");
String output = IOUtils.toString(pb.start().getInputStream());
+ log.debug("Request for createtarget is {}", buildCommandPrefix(user) + "'"+xob.buildCreateTarget(user, params)+"'");
+ log.debug("Output for createtarget is {}", output);
Document doc = DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
.parse(new InputSource(new StringReader(output)));
@@ -213,4 +297,7 @@ private String getCreateTargetRespnse(User user, HashMap params)
return null;
}
+ public String buildCommandPrefix(User user){
+ return String.format("%s --timeout 600 --gmp-username=%s --gmp-password=%s socket --socketpath %s --xml ",gvmCli,user.getUsername(), user.getPassword(), socket);
+ }
}
diff --git a/src/main/java/pl/orange/bst/mixer/openvas/helper/CommandsGetConfig.java b/src/main/java/pl/orange/bst/mixer/openvas/helper/CommandsGetConfig.java
index 29423b5..9aae2fc 100644
--- a/src/main/java/pl/orange/bst/mixer/openvas/helper/CommandsGetConfig.java
+++ b/src/main/java/pl/orange/bst/mixer/openvas/helper/CommandsGetConfig.java
@@ -5,32 +5,11 @@
import pl.orange.bst.mixer.openvas.pojo.Authenticate;
import pl.orange.bst.mixer.openvas.pojo.User;
-@XmlRootElement(name="commands")
+@XmlRootElement(name="get_configs")
public class CommandsGetConfig {
- private Authenticate authenticate;
- private String get_configs;
-
- public Authenticate getAuthenticate() {
- return authenticate;
- }
-
- public void setAuthenticate(Authenticate authenticate) {
- this.authenticate = authenticate;
- }
-
-
- public String getGet_configs() {
- return get_configs;
- }
-
- public void setGet_configs(String get_configs) {
- this.get_configs = get_configs;
- }
public CommandsGetConfig(User user) {
- this.setAuthenticate(new Authenticate(user));
- this.setGet_configs("");
}
public CommandsGetConfig() {}
}
diff --git a/src/main/java/pl/orange/bst/mixer/openvas/helper/CommandsGetResults.java b/src/main/java/pl/orange/bst/mixer/openvas/helper/CommandsGetResults.java
new file mode 100644
index 0000000..395e5d3
--- /dev/null
+++ b/src/main/java/pl/orange/bst/mixer/openvas/helper/CommandsGetResults.java
@@ -0,0 +1,39 @@
+/*
+ * @created 2020-09-28 : 16:14
+ * @project MixewayScanner
+ * @author siewer
+ */
+package pl.orange.bst.mixer.openvas.helper;
+
+import pl.orange.bst.mixer.openvas.pojo.Authenticate;
+import pl.orange.bst.mixer.openvas.pojo.GetResults;
+import pl.orange.bst.mixer.openvas.pojo.Report;
+import pl.orange.bst.mixer.openvas.pojo.User;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement(name="commands")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class CommandsGetResults {
+
+ private Authenticate authenticate;
+ @XmlElement(name="get_results")
+ private GetResults getResults;
+ public Authenticate getAuthenticate() {
+ return authenticate;
+ }
+ public void setAuthenticate(Authenticate authenticate) {
+ this.authenticate = authenticate;
+ }
+
+ public CommandsGetResults(){}
+
+ public CommandsGetResults(User user, int start, String report_id){
+ this.authenticate = new Authenticate(user);
+ this.getResults = new GetResults(report_id, start);
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/pl/orange/bst/mixer/openvas/helper/CommandsGetScanner.java b/src/main/java/pl/orange/bst/mixer/openvas/helper/CommandsGetScanner.java
index 65cbc1f..0c8568f 100644
--- a/src/main/java/pl/orange/bst/mixer/openvas/helper/CommandsGetScanner.java
+++ b/src/main/java/pl/orange/bst/mixer/openvas/helper/CommandsGetScanner.java
@@ -5,26 +5,10 @@
import pl.orange.bst.mixer.openvas.pojo.Authenticate;
import pl.orange.bst.mixer.openvas.pojo.User;
-@XmlRootElement(name="commands")
+@XmlRootElement(name="get_scanners")
public class CommandsGetScanner {
- private Authenticate authenticate;
- private String get_scanners;
- public Authenticate getAuthenticate() {
- return authenticate;
- }
- public void setAuthenticate(Authenticate authenticate) {
- this.authenticate = authenticate;
- }
- public String getGet_scanners() {
- return get_scanners;
- }
- public void setGet_scanners(String get_scanners) {
- this.get_scanners = get_scanners;
- }
-
+
public CommandsGetScanner() {}
public CommandsGetScanner(User user) {
- this.setAuthenticate(new Authenticate(user));
- this.setGet_scanners("");
}
}
diff --git a/src/main/java/pl/orange/bst/mixer/openvas/helper/XmlOperationBuilder.java b/src/main/java/pl/orange/bst/mixer/openvas/helper/XmlOperationBuilder.java
index a443f71..c4b3cbe 100644
--- a/src/main/java/pl/orange/bst/mixer/openvas/helper/XmlOperationBuilder.java
+++ b/src/main/java/pl/orange/bst/mixer/openvas/helper/XmlOperationBuilder.java
@@ -7,25 +7,19 @@
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import pl.orange.bst.mixer.ConstantStrings;
-import pl.orange.bst.mixer.openvas.pojo.Config;
-import pl.orange.bst.mixer.openvas.pojo.CreateTarget;
-import pl.orange.bst.mixer.openvas.pojo.CreateTask;
-import pl.orange.bst.mixer.openvas.pojo.DeleteTarget;
-import pl.orange.bst.mixer.openvas.pojo.GetTask;
-import pl.orange.bst.mixer.openvas.pojo.ModifyTask;
-import pl.orange.bst.mixer.openvas.pojo.Report;
-import pl.orange.bst.mixer.openvas.pojo.Scanner;
-import pl.orange.bst.mixer.openvas.pojo.StartTask;
-import pl.orange.bst.mixer.openvas.pojo.Target;
-import pl.orange.bst.mixer.openvas.pojo.User;
+import pl.orange.bst.mixer.openvas.OpenVasClient;
+import pl.orange.bst.mixer.openvas.pojo.*;
@Component
public class XmlOperationBuilder {
-
+ private static final Logger log = LoggerFactory.getLogger(XmlOperationBuilder.class);
public String buildGetConfig(User user) throws JAXBException {
+ log.info("Getting Config info");
CommandsGetConfig cgc = new CommandsGetConfig(user);
JAXBContext jaxbContext = JAXBContext.newInstance(CommandsGetConfig.class);
Marshaller marshaller = jaxbContext.createMarshaller();
@@ -35,6 +29,7 @@ public String buildGetConfig(User user) throws JAXBException {
return sw.toString();
}
public String buildGetScanners(User user) throws JAXBException {
+ log.info("Getting scanners info");
CommandsGetScanner cgs = new CommandsGetScanner(user);
JAXBContext jaxbContext = JAXBContext.newInstance(CommandsGetScanner.class);
Marshaller marshaller = jaxbContext.createMarshaller();
@@ -44,50 +39,54 @@ public String buildGetScanners(User user) throws JAXBException {
return sw.toString();
}
public String buildCreateTarget(User user, HashMap target) throws JAXBException {
- CommandsCreateTarget cct = new CommandsCreateTarget(user);
+ log.info("Creating target for {}", target.get(ConstantStrings.HOSTS));
+ //CommandsCreateTarget cct = new CommandsCreateTarget(user);
CreateTarget ct = new CreateTarget();
ct.setHosts(target.get(ConstantStrings.HOSTS));
ct.setName(target.get(ConstantStrings.TARGET_NAME));
- cct.setCreateTarget(ct);
+ //cct.setCreateTarget(ct);
JAXBContext jaxbContext = JAXBContext.newInstance(CommandsCreateTarget.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
StringWriter sw = new StringWriter();
- marshaller.marshal(cct, sw);
+ marshaller.marshal(ct, sw);
return sw.toString();
}
public String buildDeleteTarget(User user, HashMap target) throws JAXBException {
- CommandsDeleteTarget cdt = new CommandsDeleteTarget(user);
+ //CommandsDeleteTarget cdt = new CommandsDeleteTarget(user);
DeleteTarget dt = new DeleteTarget();
dt.setTargetId(target.get(ConstantStrings.TARGET_ID));
- cdt.setDeleteTarget(dt);
+ //cdt.setDeleteTarget(dt);
JAXBContext jaxbContext = JAXBContext.newInstance(CommandsDeleteTarget.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
StringWriter sw = new StringWriter();
- marshaller.marshal(cdt, sw);
+ marshaller.marshal(dt, sw);
return sw.toString();
}
public String buildCreateTask(User user, HashMap target) throws JAXBException {
- CommandsCreateTask cct = new CommandsCreateTask(user);
+ log.info("Creating task for {}",target.get(ConstantStrings.TARGET_NAME));
+ //CommandsCreateTask cct = new CommandsCreateTask(user);
CreateTask ct = new CreateTask();
ct.setConfig(new Config(target.get(ConstantStrings.CONFIG_ID)));
ct.setScanner(new Scanner(target.get(ConstantStrings.SCANNER_ID)));
ct.setTarget(new Target(target.get(ConstantStrings.TARGET_ID)));
ct.setName(target.get(ConstantStrings.TARGET_NAME));
- cct.setCreateTask(ct);
+ //cct.setCreateTask(ct);
JAXBContext jaxbContext = JAXBContext.newInstance(CommandsCreateTask.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
StringWriter sw = new StringWriter();
- marshaller.marshal(cct, sw);
+ marshaller.marshal(ct, sw);
return sw.toString();
}
public String buildModifyTask(User user, HashMap target) throws JAXBException {
- CommandsModifyTask cmt = new CommandsModifyTask(user, new ModifyTask(target.get(ConstantStrings.TASK_ID), new Target(target.get(ConstantStrings.TARGET_ID))));
+ log.info("Modyfing task {}",target.get(ConstantStrings.TASK_ID));
+ //CommandsModifyTask cmt = new CommandsModifyTask(user, new ModifyTask(target.get(ConstantStrings.TASK_ID), new Target(target.get(ConstantStrings.TARGET_ID))));
+ ModifyTask cmt = new ModifyTask(target.get(ConstantStrings.TASK_ID), new Target(target.get(ConstantStrings.TARGET_ID)));
JAXBContext jaxbContext = JAXBContext.newInstance(CommandsModifyTask.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
@@ -97,7 +96,9 @@ public String buildModifyTask(User user, HashMap target) throws
}
public String buildStartTask(User user, HashMap target) throws JAXBException {
- CommandsStartTask cst = new CommandsStartTask(user, new StartTask(target.get(ConstantStrings.TASK_ID)));
+ log.info("Starting task {}", target.get(ConstantStrings.TASK_ID));
+ //CommandsStartTask cst = new CommandsStartTask(user, new StartTask(target.get(ConstantStrings.TASK_ID)));
+ StartTask cst = new StartTask(target.get(ConstantStrings.TASK_ID));
JAXBContext jaxbContext = JAXBContext.newInstance(CommandsStartTask.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
@@ -107,7 +108,8 @@ public String buildStartTask(User user, HashMap target) throws J
}
public String buildGetTask(User user, HashMap target) throws JAXBException {
- CommandsGetTasks cgt = new CommandsGetTasks(user, new GetTask(target.get(ConstantStrings.TASK_ID)));
+ //CommandsGetTasks cgt = new CommandsGetTasks(user, new GetTask(target.get(ConstantStrings.TASK_ID)));
+ GetTask cgt = new GetTask(target.get(ConstantStrings.TASK_ID));
JAXBContext jaxbContext = JAXBContext.newInstance(CommandsGetTasks.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
@@ -117,7 +119,9 @@ public String buildGetTask(User user, HashMap target) throws JAX
}
public String buildGetReport(User user, HashMap target) throws JAXBException {
- CommandsGetReport cgr = new CommandsGetReport(user, new Report(target.get(ConstantStrings.REPORT_ID)));
+ log.info("Building report for report_id {}",target.get(ConstantStrings.REPORT_ID));
+ //CommandsGetReport cgr = new CommandsGetReport(user, new Report(target.get(ConstantStrings.REPORT_ID)));
+ Report cgr = new Report(target.get(ConstantStrings.REPORT_ID));
JAXBContext jaxbContext = JAXBContext.newInstance(CommandsGetReport.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
@@ -127,4 +131,17 @@ public String buildGetReport(User user, HashMap target) throws J
}
+ public String buildGetResult(User user, HashMap target, int page) throws JAXBException {
+ //CommandsGetResults cgr = new CommandsGetResults(user, page, target.get(ConstantStrings.REPORT_ID));
+ GetResults cgr = new GetResults(target.get(ConstantStrings.REPORT_ID), page);
+ JAXBContext jaxbContext = JAXBContext.newInstance(CommandsGetResults.class);
+ Marshaller marshaller = jaxbContext.createMarshaller();
+ marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
+ StringWriter sw = new StringWriter();
+ marshaller.marshal(cgr, sw);
+ return sw.toString();
+ }
+
+
+
}
diff --git a/src/main/java/pl/orange/bst/mixer/openvas/pojo/CreateTarget.java b/src/main/java/pl/orange/bst/mixer/openvas/pojo/CreateTarget.java
index 34c7726..161069f 100644
--- a/src/main/java/pl/orange/bst/mixer/openvas/pojo/CreateTarget.java
+++ b/src/main/java/pl/orange/bst/mixer/openvas/pojo/CreateTarget.java
@@ -1,10 +1,24 @@
package pl.orange.bst.mixer.openvas.pojo;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement(name = "create_target")
public class CreateTarget {
private String name;
private String hosts;
private String alive_tests;
+ private PortList port_list;
+
+ public PortList getPort_list() {
+ return port_list;
+ }
+
+ public void setPort_list(PortList port_list) {
+ this.port_list = port_list;
+ }
+
public String getName() {
return name;
}
@@ -24,6 +38,7 @@ public void setAlive_tests(String alive_tests) {
this.alive_tests = alive_tests;
}
public CreateTarget() {
+ this.port_list = new PortList();
this.setAlive_tests("Consider Alive");
}
diff --git a/src/main/java/pl/orange/bst/mixer/openvas/pojo/CreateTask.java b/src/main/java/pl/orange/bst/mixer/openvas/pojo/CreateTask.java
index 7096495..9d827be 100644
--- a/src/main/java/pl/orange/bst/mixer/openvas/pojo/CreateTask.java
+++ b/src/main/java/pl/orange/bst/mixer/openvas/pojo/CreateTask.java
@@ -1,5 +1,8 @@
package pl.orange.bst.mixer.openvas.pojo;
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement(name = "create_task")
public class CreateTask {
private String name;
private Config config;
diff --git a/src/main/java/pl/orange/bst/mixer/openvas/pojo/DeleteTarget.java b/src/main/java/pl/orange/bst/mixer/openvas/pojo/DeleteTarget.java
index 53c8e38..7b15c6f 100644
--- a/src/main/java/pl/orange/bst/mixer/openvas/pojo/DeleteTarget.java
+++ b/src/main/java/pl/orange/bst/mixer/openvas/pojo/DeleteTarget.java
@@ -3,7 +3,9 @@
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlRootElement;
+@XmlRootElement(name = "delete_target")
@XmlAccessorType(XmlAccessType.FIELD)
public class DeleteTarget {
diff --git a/src/main/java/pl/orange/bst/mixer/openvas/pojo/GetResults.java b/src/main/java/pl/orange/bst/mixer/openvas/pojo/GetResults.java
new file mode 100644
index 0000000..a3e4de7
--- /dev/null
+++ b/src/main/java/pl/orange/bst/mixer/openvas/pojo/GetResults.java
@@ -0,0 +1,22 @@
+/*
+ * @created 2020-09-28 : 16:15
+ * @project MixewayScanner
+ * @author siewer
+ */
+package pl.orange.bst.mixer.openvas.pojo;
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement(name = "get_results")
+public class GetResults {
+ @XmlAttribute(name="filter")
+ String filter;
+
+ public GetResults(String reportId, int start){
+ this.filter ="report_id="+reportId+" first="+(start * 1000 + 1)+" rows=1000";
+ }
+
+ public GetResults() {
+ }
+}
diff --git a/src/main/java/pl/orange/bst/mixer/openvas/pojo/GetTask.java b/src/main/java/pl/orange/bst/mixer/openvas/pojo/GetTask.java
index 448edc9..7a8122f 100644
--- a/src/main/java/pl/orange/bst/mixer/openvas/pojo/GetTask.java
+++ b/src/main/java/pl/orange/bst/mixer/openvas/pojo/GetTask.java
@@ -3,9 +3,10 @@
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlRootElement;
@XmlAccessorType(XmlAccessType.FIELD)
-
+@XmlRootElement(name = "get_tasks")
public class GetTask {
@XmlAttribute(name="task_id")
@@ -22,4 +23,6 @@ public void setTaskId(String taskId) {
public GetTask(String id) {
this.setTaskId(id);
}
+
+ public GetTask(){}
}
diff --git a/src/main/java/pl/orange/bst/mixer/openvas/pojo/ModifyTask.java b/src/main/java/pl/orange/bst/mixer/openvas/pojo/ModifyTask.java
index 8c0b565..20c5b4e 100644
--- a/src/main/java/pl/orange/bst/mixer/openvas/pojo/ModifyTask.java
+++ b/src/main/java/pl/orange/bst/mixer/openvas/pojo/ModifyTask.java
@@ -3,9 +3,10 @@
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlRootElement;
@XmlAccessorType(XmlAccessType.FIELD)
-
+@XmlRootElement(name = "modify_task")
public class ModifyTask {
@XmlAttribute(name="task_id")
private String taskId;
diff --git a/src/main/java/pl/orange/bst/mixer/openvas/pojo/PortList.java b/src/main/java/pl/orange/bst/mixer/openvas/pojo/PortList.java
new file mode 100644
index 0000000..66d1d47
--- /dev/null
+++ b/src/main/java/pl/orange/bst/mixer/openvas/pojo/PortList.java
@@ -0,0 +1,16 @@
+/*
+ * @created 2021-01-27 : 10:09
+ * @project MixewayScanner
+ * @author siewer
+ */
+package pl.orange.bst.mixer.openvas.pojo;
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlRootElement;
+
+public class PortList {
+
+ @XmlAttribute
+ private String id="33d0cd82-57c6-11e1-8ed1-406186ea4fc5";
+
+}
diff --git a/src/main/java/pl/orange/bst/mixer/openvas/pojo/Report.java b/src/main/java/pl/orange/bst/mixer/openvas/pojo/Report.java
index a8825d1..c21b747 100644
--- a/src/main/java/pl/orange/bst/mixer/openvas/pojo/Report.java
+++ b/src/main/java/pl/orange/bst/mixer/openvas/pojo/Report.java
@@ -3,14 +3,18 @@
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlRootElement;
@XmlAccessorType(XmlAccessType.FIELD)
+@XmlRootElement(name = "get_reports")
public class Report {
@XmlAttribute(name="report_id")
private String reportId;
@XmlAttribute(name="ignore_pagination")
private Boolean ignorePagination = true;
+ @XmlAttribute(name = "details")
+ private String details = "True";
public String getReportId() {
return reportId;
@@ -23,6 +27,7 @@ public void setReportId(String reportId) {
public Report(String id) {
this.setReportId(id);
}
+ public Report(){}
public Boolean getIgnorePagination() {
return ignorePagination;
diff --git a/src/main/java/pl/orange/bst/mixer/openvas/pojo/StartTask.java b/src/main/java/pl/orange/bst/mixer/openvas/pojo/StartTask.java
index 9922ee0..354308e 100644
--- a/src/main/java/pl/orange/bst/mixer/openvas/pojo/StartTask.java
+++ b/src/main/java/pl/orange/bst/mixer/openvas/pojo/StartTask.java
@@ -3,8 +3,10 @@
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlRootElement;
@XmlAccessorType(XmlAccessType.FIELD)
+@XmlRootElement(name = "start_task")
public class StartTask {
@XmlAttribute(name="task_id")
private String taskId;
@@ -20,5 +22,6 @@ public void setTaskId(String taskId) {
public StartTask(String id) {
this.setTaskId(id);
}
+ public StartTask(){}
}
diff --git a/src/main/java/pl/orange/bst/mixer/openvas/pojo/User.java b/src/main/java/pl/orange/bst/mixer/openvas/pojo/User.java
index b359af3..68f9d32 100644
--- a/src/main/java/pl/orange/bst/mixer/openvas/pojo/User.java
+++ b/src/main/java/pl/orange/bst/mixer/openvas/pojo/User.java
@@ -23,6 +23,9 @@ public User prepare() {
this.setUsername(ConstantStrings.escape(this.getUsername()));
return this;
}
-
+ public User(String username, String password) {
+ this.username = username;
+ this.password = password;
+ }
}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 231d01b..4b784d4 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1,10 +1,12 @@
server.port: 8444
-server.ssl.key-store: pki/localhost.p12
-server.ssl.key-store-password: changeit
+server.ssl.key-store: /Users/gs/pki/new.p12
+server.ssl.key-store-password: 1qaz@WSX
server.ssl.keyStoreType: PKCS12
-server.ssl.key-alias=mixer
-server.ssl.trust-store=etc/pki/trust.jks
+server.ssl.key-alias=mixeway
+server.ssl.trust-store=/Users/gs/pki/trust.jks
server.ssl.trust-store-password=changeit
-server.ssl.client-auth=need
-openvasmd.socket=/usr/local/var/run/openvasmd.sock
-allowed.users=localhost,127.0.0.1
\ No newline at end of file
+server.ssl.client-auth=want
+openvasmd.socket=/Users/gs/gvm/gvmd.sock
+allowed.users=localhost,127.0.0.1
+gvm-cli.exec=gvm-cli
+logging.level.root=WARN
\ No newline at end of file