@@ -66,43 +66,111 @@ public String taskStatus(RestRequestBody body) throws JAXBException, SAXExceptio
66
66
public ReportXml getReport (RestRequestBody body ) throws JAXBException , SAXException , IOException , ParserConfigurationException {
67
67
return getReportResponse (body .getUser (), body .getParams ());
68
68
}
69
-
70
69
71
- private ReportXml getReportResponse (User user , HashMap <String , String > params ) throws JAXBException , SAXException , IOException , ParserConfigurationException {
72
- ProcessBuilder pb = new ProcessBuilder ("bash" , "-c" , buildCommandPrefix (user ) + "'" +xob .buildGetReport (user , params )+"'" );
70
+
71
+ /**
72
+ * Version 11
73
+ */
74
+ private List <Vuln > loadVulns (User user , HashMap <String , String > params , int start , List <Vuln > vulns ) throws JAXBException , SAXException , IOException , ParserConfigurationException {
75
+ ProcessBuilder pb = new ProcessBuilder ("bash" , "-c" , "gvm-cli --timeout 600 socket --socketpath " + socket + " --xml '" + xob .buildGetResult (user , params , start ) + "'" );
73
76
String output = IOUtils .toString (pb .start ().getInputStream ());
74
77
Document doc = DocumentBuilderFactory .newInstance ()
75
- .newDocumentBuilder ()
76
- .parse (new InputSource (new StringReader (output )));
77
- Element reportNodeResponse = (Element ) doc .getElementsByTagName ("get_reports_response" ).item (0 );
78
- Element reportNode = (Element ) reportNodeResponse .getElementsByTagName ("report" ).item (0 );
79
- Element reportNode2 = (Element ) reportNode .getElementsByTagName ("report" ).item (0 );
80
- Element results = (Element ) reportNode2 .getElementsByTagName ("results" ).item (0 );
78
+ .newDocumentBuilder ()
79
+ .parse (new InputSource (new StringReader (output )));
80
+ Element results = (Element ) doc .getElementsByTagName ("get_results_response" ).item (0 );
81
+ Element count = (Element ) doc .getElementsByTagName ("result_count" ).item (0 );
82
+ int resultsCount = Integer .parseInt (count .getElementsByTagName ("filtered" ).item (0 ).getTextContent ());
83
+ log .info ("Loading vulns for page {} and reportid: {}, result count {}" , start , params .get (ConstantStrings .REPORT_ID ), resultsCount );
84
+
81
85
NodeList vulnNode = results .getElementsByTagName ("result" );
82
- List <Vuln > vulns = new ArrayList <>();
83
-
84
86
if (vulnNode != null ) {
85
- int length = vulnNode .getLength ();
86
- for (int i = 0 ; i < length ; i ++) {
87
- if (vulnNode .item (i ).getNodeType () == Node .ELEMENT_NODE ) {
88
- Element el = (Element ) vulnNode .item (i );
89
- try {
90
- Vuln v = new Vuln ();
91
- v .setName (el .getElementsByTagName ("name" ).item (0 ).getTextContent ());
92
- v .setHost (el .getElementsByTagName ("host" ).item (0 ).getFirstChild ().getTextContent ());
93
- v .setDesc (el .getElementsByTagName ("description" ).item (0 ).getTextContent ());
94
- v .setPort (el .getElementsByTagName ("port" ).item (0 ).getTextContent ());
95
- v .setThreat (el .getElementsByTagName ("threat" ).item (0 ).getTextContent ());
96
- vulns .add (v );
97
- } catch (NullPointerException n ) {
98
- log .warn ("Something is wrong with one of the results, nullpoitner returned" );
99
- }
100
- }
101
- }
102
- }
103
-
87
+ int length = vulnNode .getLength ();
88
+ for (int i = 0 ; i < length ; i ++) {
89
+ if (vulnNode .item (i ).getNodeType () == Node .ELEMENT_NODE ) {
90
+ Element el = (Element ) vulnNode .item (i );
91
+ try {
92
+ Vuln v = new Vuln ();
93
+ v .setName (el .getElementsByTagName ("name" ).item (0 ).getTextContent ());
94
+ v .setHost (el .getElementsByTagName ("host" ).item (0 ).getFirstChild ().getTextContent ());
95
+ v .setDesc (el .getElementsByTagName ("description" ).item (0 ).getTextContent ());
96
+ v .setPort (el .getElementsByTagName ("port" ).item (0 ).getTextContent ());
97
+ v .setThreat (getThreat (el .getElementsByTagName ("severity" ).item (0 ).getTextContent ()));
98
+ vulns .add (v );
99
+ } catch (NullPointerException n ) {
100
+ //n.printStackTrace();
101
+ log .info ("Something is wrong with one of the results, nullpoitner returned" );
102
+ }
103
+ }
104
+ }
105
+ }
106
+ log .info ("Vunlns contains {} records" , vulns .size ());
107
+ if (((start * 1000 ) + 1000 ) < resultsCount ){
108
+ start ++;
109
+ vulns .addAll (loadVulns (user , params ,start , vulns ));
110
+ }
111
+
112
+ return vulns ;
113
+ }
114
+
115
+ private String getThreat (String severity ) {
116
+ double sev = Double .parseDouble (severity );
117
+ if (sev == 0.0 ){
118
+ return "Info" ;
119
+ } else if (sev <=4.0 ){
120
+ return "Low" ;
121
+ } else if (sev <=6.0 ) {
122
+ return "Medium" ;
123
+ } else if (sev <=8.0 ){
124
+ return "High" ;
125
+ } else {
126
+ return "Critical" ;
127
+ }
128
+ }
129
+
130
+ /**
131
+ * Version 9
132
+ */
133
+
134
+ private ReportXml getReportResponse (User user , HashMap <String , String > params ) throws JAXBException , SAXException , IOException , ParserConfigurationException {
135
+ List <Vuln > vulns = new ArrayList <>();
136
+ try {
137
+ ProcessBuilder pb = new ProcessBuilder ("bash" , "-c" , "gvm-cli --timeout 600 socket --socketpath " + socket + " --xml '" + xob .buildGetReport (user , params ) + "'" );
138
+ String output = IOUtils .toString (pb .start ().getInputStream ());
139
+ Document doc = DocumentBuilderFactory .newInstance ()
140
+ .newDocumentBuilder ()
141
+ .parse (new InputSource (new StringReader (output )));
142
+ Element reportNodeResponse = (Element ) doc .getElementsByTagName ("get_reports_response" ).item (0 );
143
+ Element reportNode = (Element ) reportNodeResponse .getElementsByTagName ("report" ).item (0 );
144
+ Element reportNode2 = (Element ) reportNode .getElementsByTagName ("report" ).item (0 );
145
+ Element results = (Element ) reportNode2 .getElementsByTagName ("results" ).item (0 );
146
+ NodeList vulnNode = results .getElementsByTagName ("result" );
147
+
148
+
149
+ if (vulnNode != null ) {
150
+ int length = vulnNode .getLength ();
151
+ for (int i = 0 ; i < length ; i ++) {
152
+ if (vulnNode .item (i ).getNodeType () == Node .ELEMENT_NODE ) {
153
+ Element el = (Element ) vulnNode .item (i );
154
+ try {
155
+ Vuln v = new Vuln ();
156
+ v .setName (el .getElementsByTagName ("name" ).item (0 ).getTextContent ());
157
+ v .setHost (el .getElementsByTagName ("host" ).item (0 ).getFirstChild ().getTextContent ());
158
+ v .setDesc (el .getElementsByTagName ("description" ).item (0 ).getTextContent ());
159
+ v .setPort (el .getElementsByTagName ("port" ).item (0 ).getTextContent ());
160
+ v .setThreat (el .getElementsByTagName ("threat" ).item (0 ).getTextContent ());
161
+ vulns .add (v );
162
+ } catch (NullPointerException n ) {
163
+ log .warn ("Something is wrong with one of the results, nullpoitner returned" );
164
+ }
165
+ }
166
+ }
167
+ }
168
+ } catch (NullPointerException e ){
169
+ log .warn ("No results" );
170
+ }
104
171
return new ReportXml (vulns );
105
172
}
173
+
106
174
private String getTaskStatusResponse (User user , HashMap <String , String > params ) throws JAXBException , SAXException , IOException , ParserConfigurationException {
107
175
ProcessBuilder pb = new ProcessBuilder ("bash" , "-c" , buildCommandPrefix (user ) + "'" +xob .buildGetTask (user , params )+"'" );
108
176
String output = IOUtils .toString (pb .start ().getInputStream ());
0 commit comments