<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>cbless.de</title><link href="/" rel="alternate"></link><link href="/feeds/all.atom.xml" rel="self"></link><id>/</id><updated>2020-03-25T21:15:00+01:00</updated><subtitle></subtitle><entry><title>Traffic Analysis with tshark</title><link href="/posts/en/2020/03/tshark-analysis/" rel="alternate"></link><published>2020-03-25T21:15:00+01:00</published><updated>2020-03-25T21:15:00+01:00</updated><author><name>Christoph Bleß</name></author><id>tag:None,2020-03-25:/posts/en/2020/03/tshark-analysis/</id><summary type="html">&lt;p&gt;Introduction to traffic analysis with tshark.&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Basic usage&lt;/h2&gt;
&lt;p&gt;The first option we can use is to read packets from a pcap file. The filename must be specified by parameter &lt;em&gt;-r&lt;/em&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;tshark -r file.pcap
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Another option is to read packets direcly from a live capture. Therefore you need to specify the interface by using the parameter &lt;em&gt;-i&lt;/em&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;tshark -i eth0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Additionally you can use tshark to produce a capture file. The name of the output filemust be specified by parameter &lt;em&gt;-w&lt;/em&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;tshark -i eth0 -w file.pcap
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Display statistics about PCAP files&lt;/h2&gt;
&lt;p&gt;To get a brief overview what kind of traffic has been captured the protocol hierarchy can be used.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;tshark -Q -r file.pcap -z io,phs
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;===================================================================&lt;/span&gt;
Protocol Hierarchy Statistics
Filter: 

eth                                      frames:170574 bytes:165271675
  ip                                     frames:167829 bytes:165118368
    tcp                                  frames:166836 bytes:164972597
      http                               frames:1169 bytes:1113141
        data-text-lines                  frames:141 bytes:68030
          tcp.segments                   frames:121 bytes:55944
        media                            frames:13 bytes:8526
          tcp.segments                   frames:13 bytes:8526
&lt;span class="o"&gt;[&lt;/span&gt;...&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Another useful feature is the endpoint statistic. The following example displays all &lt;strong&gt;IPv4&lt;/strong&gt; endpoints within the given capture file.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;tshark -Q -r file.pcap -z endpoints,ip
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Result:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;================================================================================&lt;/span&gt;
IPv4 Endpoints
Filter:&amp;lt;No Filter&amp;gt;
                        &lt;span class="p"&gt;|&lt;/span&gt;  Packets  &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;  Bytes  &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; Tx Packets &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; Tx Bytes &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; Rx Packets &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; Rx Bytes &lt;span class="p"&gt;|&lt;/span&gt;
&lt;span class="m"&gt;10&lt;/span&gt;.16.31.1              &lt;span class="m"&gt;142285&lt;/span&gt;     &lt;span class="m"&gt;145306928&lt;/span&gt;     &lt;span class="m"&gt;107742&lt;/span&gt;       &lt;span class="m"&gt;142895090&lt;/span&gt;       &lt;span class="m"&gt;34543&lt;/span&gt;         &lt;span class="m"&gt;2411838&lt;/span&gt;   
&lt;span class="m"&gt;10&lt;/span&gt;.16.31.4              &lt;span class="m"&gt;142285&lt;/span&gt;     &lt;span class="m"&gt;145306928&lt;/span&gt;      &lt;span class="m"&gt;34543&lt;/span&gt;         &lt;span class="m"&gt;2411838&lt;/span&gt;      &lt;span class="m"&gt;107742&lt;/span&gt;       &lt;span class="m"&gt;142895090&lt;/span&gt;   
&lt;span class="o"&gt;[&lt;/span&gt;...&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;================================================================================&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The next example can be used to display all &lt;strong&gt;IPv4&lt;/strong&gt; and &lt;strong&gt;IPv6&lt;/strong&gt; endpoints within the given capture file.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;tshark -Q -r file.pcap -z endpoints,ipv6 -z endpoints,ip
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Result:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;================================================================================&lt;/span&gt;
IPv4 Endpoints
Filter:&amp;lt;No Filter&amp;gt;
                        &lt;span class="p"&gt;|&lt;/span&gt;  Packets  &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;  Bytes  &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; Tx Packets &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; Tx Bytes &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; Rx Packets &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; Rx Bytes &lt;span class="p"&gt;|&lt;/span&gt;
&lt;span class="m"&gt;10&lt;/span&gt;.16.31.1              &lt;span class="m"&gt;142285&lt;/span&gt;     &lt;span class="m"&gt;145306928&lt;/span&gt;     &lt;span class="m"&gt;107742&lt;/span&gt;       &lt;span class="m"&gt;142895090&lt;/span&gt;       &lt;span class="m"&gt;34543&lt;/span&gt;         &lt;span class="m"&gt;2411838&lt;/span&gt;   
&lt;span class="m"&gt;10&lt;/span&gt;.16.31.4              &lt;span class="m"&gt;142285&lt;/span&gt;     &lt;span class="m"&gt;145306928&lt;/span&gt;      &lt;span class="m"&gt;34543&lt;/span&gt;         &lt;span class="m"&gt;2411838&lt;/span&gt;      &lt;span class="m"&gt;107742&lt;/span&gt;       &lt;span class="m"&gt;142895090&lt;/span&gt;   
&lt;span class="o"&gt;[&lt;/span&gt;...&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;================================================================================&lt;/span&gt;
&lt;span class="o"&gt;================================================================================&lt;/span&gt;
IPv6 Endpoints
Filter:&amp;lt;No Filter&amp;gt;
                        &lt;span class="p"&gt;|&lt;/span&gt;  Packets  &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;  Bytes  &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; Tx Packets &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; Tx Bytes &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; Rx Packets &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; Rx Bytes &lt;span class="p"&gt;|&lt;/span&gt;
ff02::1:2                     &lt;span class="m"&gt;19&lt;/span&gt;          &lt;span class="m"&gt;2857&lt;/span&gt;          &lt;span class="m"&gt;0&lt;/span&gt;               &lt;span class="m"&gt;0&lt;/span&gt;          &lt;span class="m"&gt;19&lt;/span&gt;            &lt;span class="m"&gt;2857&lt;/span&gt;   
fe80::cd42:fe8a:AAAA:1234          &lt;span class="m"&gt;14&lt;/span&gt;          &lt;span class="m"&gt;2072&lt;/span&gt;         &lt;span class="m"&gt;14&lt;/span&gt;            &lt;span class="m"&gt;2072&lt;/span&gt;           &lt;span class="m"&gt;0&lt;/span&gt;               &lt;span class="m"&gt;0&lt;/span&gt;   
&lt;span class="o"&gt;[&lt;/span&gt;...&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Extract files from pcaps files&lt;/h2&gt;
&lt;p&gt;The following example shows how to extract objects from a pcap containing SMB traffic.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;tshark -Q -r file.pcap  --export-objects smb,outdir
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The following example shows how to extract objects from a pcap which were transmitted via HTTP.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;tshark -Q -r file.pcap  --export-objects http,outdir
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Analyze traffic within pcap files&lt;/h2&gt;
&lt;h3&gt;Analyze HTTP traffic&lt;/h3&gt;
&lt;p&gt;The following example can be used to display information from HTTP responses. In this case the server ip as well as the &lt;em&gt;server&lt;/em&gt; header are displayed. To remove duplicated entries the tools &lt;em&gt;sort&lt;/em&gt; and &lt;em&gt;uniq&lt;/em&gt; are used.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;tshark -r file.pcap -Y &lt;span class="s2"&gt;&amp;quot;http.response&amp;quot;&lt;/span&gt; -T fields -e ip.src -e http.server &lt;span class="p"&gt;|&lt;/span&gt; sort &lt;span class="p"&gt;|&lt;/span&gt;uniq
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;To analyze HTTP request you can use the filter "http.request". In this case we display the source ip, destination ip, destination port, request method, hostname, requested URI as well as the user agent.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;tshark -r file.pcap -Y &lt;span class="s2"&gt;&amp;quot;http.request&amp;quot;&lt;/span&gt; -T fields -e ip.src -e ip.dst -e tcp.dstport -e http.request.method -e http.host -e http.request.uri -e http.user_agent &lt;span class="p"&gt;|&lt;/span&gt; sort &lt;span class="p"&gt;|&lt;/span&gt;uniq
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Modbus Traffic&lt;/h3&gt;
&lt;p&gt;The next example displays die IP addresses of the Modbus-Master, Modbus slave and the requested Modbus function code.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;tshark -r file.pcap -Y &lt;span class="s2"&gt;&amp;quot;modbus &amp;amp;&amp;amp; tcp.dstport == 502&amp;quot;&lt;/span&gt; -T fields -e ip.src -e ip.dst -e modbus.func_code

&lt;span class="m"&gt;10&lt;/span&gt;.21.10.10 &lt;span class="m"&gt;10&lt;/span&gt;.21.10.24 &lt;span class="m"&gt;15&lt;/span&gt;
&lt;span class="m"&gt;10&lt;/span&gt;.21.10.10 &lt;span class="m"&gt;10&lt;/span&gt;.21.10.24 &lt;span class="m"&gt;15&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Telnet&lt;/h3&gt;
&lt;p&gt;The following example can be used to display all data transmitted via Telnet.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;tshark -r file.pcap -Y &lt;span class="s2"&gt;&amp;quot;telnet&amp;quot;&lt;/span&gt; -T fields -e telnet.data
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;DNS traffic&lt;/h3&gt;
&lt;p&gt;Display IP addresses from all DNS requests within a pcap file. Since we filter for DNS traffic with destination port 53 all DNS clients can be identified by the source address. We pass the results to &lt;em&gt;sort&lt;/em&gt; and &lt;em&gt;uniq&lt;/em&gt; to remove duplicate entries.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;tshark -r file.pcap -Y &lt;span class="s2"&gt;&amp;quot;dns.qry.name &amp;amp;&amp;amp; udp.dstport==53 &amp;quot;&lt;/span&gt; -T fields -e ip.src -e ip.dst  &lt;span class="p"&gt;|&lt;/span&gt; sort &lt;span class="p"&gt;|&lt;/span&gt; uniq

&lt;span class="m"&gt;192&lt;/span&gt;.168.1.24    &lt;span class="m"&gt;192&lt;/span&gt;.168.1.1
&lt;span class="o"&gt;[&lt;/span&gt;...&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;To display requested hostnames from DNS queries. If you are reading from pcap you can use &lt;em&gt;sort&lt;/em&gt; and &lt;em&gt;uniq&lt;/em&gt; to remove duplicate entries.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;tshark -r file.pcap -Y &lt;span class="s2"&gt;&amp;quot;dns.qry.name &amp;amp;&amp;amp; udp.dstport==53&amp;quot;&lt;/span&gt; -T fields -e dns.qry.name  &lt;span class="p"&gt;|&lt;/span&gt; sort &lt;span class="p"&gt;|&lt;/span&gt; uniq

www.heise.de
www.google.com
&lt;span class="o"&gt;[&lt;/span&gt;...&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="Network"></category><category term="tshark"></category><category term="traffic analysis"></category><category term="pcap analysis"></category><category term="live capture"></category></entry><entry><title>Kismet analyzer</title><link href="/posts/en/2018/11/kismet-analyzer/" rel="alternate"></link><published>2018-11-25T10:20:00+01:00</published><updated>2018-11-25T10:20:00+01:00</updated><author><name>Christoph Bleß</name></author><id>tag:None,2018-11-25:/posts/en/2018/11/kismet-analyzer/</id><summary type="html">&lt;p&gt;A simple script for parsing the results of .kismet files.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Kismet-analyzer is a python library which can be used to analyze the results of the new Kismet version. The library is available on &lt;a href="https://bitbucket.org/cbless/"&gt;bitbucket.org/cbless&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Curently the following scripts will be installed:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;kismet_analyzer_aplist:&lt;/strong&gt; This script can be used to extract access points from the SQLite database &lt;em&gt;&lt;db&gt;.kismet&lt;/em&gt; and export these results to &lt;em&gt;csv&lt;/em&gt; and &lt;em&gt;kml&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;License&lt;/h2&gt;
&lt;p&gt;This script is licensed under the GNU General Public License in version 3. See http://www.gnu.org/licenses/ for further details.&lt;/p&gt;
&lt;h2&gt;Installation:&lt;/h2&gt;
&lt;p&gt;This library requires &lt;em&gt;simplekml&lt;/em&gt; for exporting extracted information to &lt;em&gt;kml&lt;/em&gt;. You can use &lt;em&gt;pip&lt;/em&gt; to install the neccessary requirement.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pip install -r requirements.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The setup script can be used to install the library and requirements. It will create the above listed console commands.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;python setup.py install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Usage:&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;venv&lt;span class="o"&gt;)[&lt;/span&gt;kismet-analyzer&lt;span class="o"&gt;]&lt;/span&gt;$ kismet_analyzer_aplist -h
usage: kismet_analyzer_aplist &lt;span class="o"&gt;[&lt;/span&gt;-h&lt;span class="o"&gt;]&lt;/span&gt; --in INFILE &lt;span class="o"&gt;[&lt;/span&gt;--out OUTFILE&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;--title TITLE&lt;span class="o"&gt;]&lt;/span&gt;
                              &lt;span class="o"&gt;[&lt;/span&gt;--ssid SSID&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;--exclude-ssid EXCLUDESSID&lt;span class="o"&gt;]&lt;/span&gt;
                              &lt;span class="o"&gt;[&lt;/span&gt;--strongest-point&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;--encryption ENCRYPTION&lt;span class="o"&gt;]&lt;/span&gt;
                              &lt;span class="o"&gt;[&lt;/span&gt;--csv&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;--kml&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;--verbose&lt;span class="o"&gt;]&lt;/span&gt;

Kismet to KML Log Converter

optional arguments:
  -h, --help            Show this &lt;span class="nb"&gt;help&lt;/span&gt; message and &lt;span class="nb"&gt;exit&lt;/span&gt;
  --in INFILE           Input file &lt;span class="o"&gt;(&lt;/span&gt;.kismet&lt;span class="o"&gt;)&lt;/span&gt; 
  --out OUTFILE         Output filename &lt;span class="o"&gt;(&lt;/span&gt;optional&lt;span class="o"&gt;)&lt;/span&gt;
  --title TITLE         Title embedded &lt;span class="k"&gt;in&lt;/span&gt; KML file
  --ssid SSID           Only plot networks which match the SSID &lt;span class="o"&gt;(&lt;/span&gt;or SSID
                        regex&lt;span class="o"&gt;)&lt;/span&gt;
  --exclude-ssid EXCLUDESSID
                        Exclude networks which match the SSID &lt;span class="o"&gt;(&lt;/span&gt;or SSID
                        regex&lt;span class="o"&gt;)&lt;/span&gt;
  --strongest-point     Plot points based on strongest signal
  --encryption ENCRYPTION
                        Show only networks with given encryption &lt;span class="nb"&gt;type&lt;/span&gt;
  --csv                 Export results to csv
  --kml                 Export results to kml
  --verbose             Print MAC, SSID, encryption &lt;span class="nb"&gt;type&lt;/span&gt; to stdout
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Export only access points with encryption type "Open" to csv and kml files:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;kismet_analyzer_aplist --in input.kismet --out &lt;span class="nb"&gt;test&lt;/span&gt; --encryption &lt;span class="s2"&gt;&amp;quot;Open&amp;quot;&lt;/span&gt; --kml --csv 
Exported &lt;span class="m"&gt;11&lt;/span&gt; devices to test.csv
Exported &lt;span class="m"&gt;11&lt;/span&gt; devices to test.kml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Output example for kml exports&lt;/h2&gt;
&lt;p&gt;The script generates colored notes for exported access points. The color depends on the identified encryption type. WPA encrypted access points will be added with a green color, WEP encrypted networks will be displayed in orange and Open network are displayed in red. Networks were the encryption type could not be detected will be added as a yellow note.
Each note contains detailed meta information about the access point (SSID, MAC address, frequency, channel, manufacturer, and a list of clients MAC addresses).
&lt;img alt="KML example" src="/images/kismet-analyzer-img.png"&gt;&lt;/p&gt;</content><category term="Scripts"></category><category term="kismet"></category><category term="Python"></category><category term="kismet analyzer"></category><category term="kismet_analyzer_aplist"></category></entry><entry><title>parse-nmap.py</title><link href="/posts/2016/05/parse-nmap/" rel="alternate"></link><published>2016-05-03T10:20:00+02:00</published><updated>2016-05-03T10:20:00+02:00</updated><author><name>Christoph Bleß</name></author><id>tag:None,2016-05-03:/posts/2016/05/parse-nmap/</id><summary type="html">&lt;p&gt;Vorstellung der Optionen zu &lt;em&gt;parse-nmap&lt;/em&gt;, einem Script zum parsen von &lt;em&gt;nmap&lt;/em&gt; Scanergebnissen.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;Parse-nmap&lt;/em&gt; ist ein Tool zum parsen von &lt;em&gt;nmap&lt;/em&gt; Scanergebnissen (nur XML), welches es ermöglicht die Scanergebnisse zu filtern (z.B.: nach Plattform oder IP), Target-Listen zu erstellen oder die Ergebisse als LaTeX Tabelle zu exportieren (diese Option habe ich verwendet um die Tabellen für den &lt;a href="https://www.offensive-security.com/information-security-certifications/oscp-offensive-security-certified-professional/"&gt;OSCP&lt;/a&gt;-Report zu erzeugen). In diesem Beitrag werde ich einige dieser Optionen etwas genauer vorstellen. Das Script ist in meinem Account auf &lt;a href="https://bitbucket.org/cbless/"&gt;bitbucket.org&lt;/a&gt; zu finden.&lt;/p&gt;
&lt;p&gt;Für die folgenden Beispiele wird davon ausgegangen, dass ein &lt;em&gt;nmap&lt;/em&gt;-Scan über die TOP 20 TCP Ports gemacht und dieses Ergebnis in der Datei lab-top-ports gespeichert wurde (siehe erstes Code-Beispiel).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;prompt$ nmap -sS -sV --top-ports &lt;span class="m"&gt;20&lt;/span&gt; -oA lab-top-ports &amp;lt;IPs&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Display Optionen&lt;/h2&gt;
&lt;h3&gt;Übersicht&lt;/h3&gt;
&lt;p&gt;Das folgende Beispiel zeigt, wie mit Hilfe von &lt;em&gt;parse-nmap&lt;/em&gt; eine Übersicht aller in der XML-Datei enthaltenen Hosts angeizeigt wird. Die ersten vier Zeilen zeigen lediglich Informationen zur Anzahl der in der Datei vorhandenen Hosts und der Anzahl an Hosts nach Anwendung der Filter. Diese Übersicht enthält drei Spalten pro Host. Die erste ist die IP, gefolgt von Hostnamen (localhost, falls dieser nicht Verfügbar ist) und einer Spalte mit Informationen zum Betriebssystem (falls vorhanden).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;prompt$ parse-nmap.py lab-top-ports.xml
&lt;span class="c1"&gt;# number of hosts in the report: 6&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after IP filter: 6&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after OS and IP filter: 6&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after OS, IP and port filter: 6&lt;/span&gt;
&lt;span class="m"&gt;192&lt;/span&gt;.168.56.10 localhost Microsoft Windows XP SP2 or SP3
&lt;span class="m"&gt;192&lt;/span&gt;.168.56.101 localhost Linux &lt;span class="m"&gt;2&lt;/span&gt;.6.32 - &lt;span class="m"&gt;3&lt;/span&gt;.10
&lt;span class="m"&gt;192&lt;/span&gt;.168.56.102 localhost Microsoft Windows &lt;span class="m"&gt;7&lt;/span&gt; SP0 - SP1, Windows Server &lt;span class="m"&gt;2008&lt;/span&gt; SP1, or Windows &lt;span class="m"&gt;8&lt;/span&gt;
&lt;span class="m"&gt;192&lt;/span&gt;.168.56.103 localhost Linux &lt;span class="m"&gt;2&lt;/span&gt;.4.9 - &lt;span class="m"&gt;2&lt;/span&gt;.4.18 &lt;span class="o"&gt;(&lt;/span&gt;likely embedded&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="m"&gt;192&lt;/span&gt;.168.56.200 localhost Microsoft Windows &lt;span class="m"&gt;7&lt;/span&gt; SP0 - SP1, Windows Server &lt;span class="m"&gt;2008&lt;/span&gt; SP1, or Windows &lt;span class="m"&gt;8&lt;/span&gt;
&lt;span class="m"&gt;192&lt;/span&gt;.168.56.250 localhost Microsoft Windows &lt;span class="m"&gt;7&lt;/span&gt; SP0 - SP1, Windows Server &lt;span class="m"&gt;2008&lt;/span&gt; SP1, or Windows &lt;span class="m"&gt;8&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;print-ports&lt;/h3&gt;
&lt;p&gt;Die Option &lt;em&gt;-p&lt;/em&gt; zeigt neben IP, Hostname und Betriebssysteminformationen auch die offenen Ports für jeden Host.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;prompt$ parse-nmap.py -p lab-top-ports.xml
&lt;span class="c1"&gt;# number of hosts in the report: 6&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after IP filter: 6&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after OS and IP filter: 6&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after OS, IP and port filter: 6&lt;/span&gt;
&lt;span class="c1"&gt;#===============================================================================&lt;/span&gt;
IP:     &lt;span class="m"&gt;192&lt;/span&gt;.168.56.10
Hostname:   localhost
OS:     Microsoft Windows XP SP2 or SP3
&lt;span class="c1"&gt;#-------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class="m"&gt;135&lt;/span&gt; tcp msrpc product: Microsoft Windows RPC ostype: Windows
&lt;span class="m"&gt;139&lt;/span&gt; tcp netbios-ssn 
&lt;span class="m"&gt;445&lt;/span&gt; tcp microsoft-ds product: Microsoft Windows XP microsoft-ds ostype: Windows

&lt;span class="c1"&gt;#===============================================================================&lt;/span&gt;
IP:     &lt;span class="m"&gt;192&lt;/span&gt;.168.56.101
Hostname:   localhost
OS:     Linux &lt;span class="m"&gt;2&lt;/span&gt;.6.32 - &lt;span class="m"&gt;3&lt;/span&gt;.10
&lt;span class="c1"&gt;#-------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class="m"&gt;22&lt;/span&gt; tcp ssh product: OpenSSH version: &lt;span class="m"&gt;6&lt;/span&gt;.6.1 extrainfo: protocol &lt;span class="m"&gt;2&lt;/span&gt;.0
&lt;span class="m"&gt;80&lt;/span&gt; tcp http product: Apache httpd version: &lt;span class="m"&gt;2&lt;/span&gt;.4.6 extrainfo: &lt;span class="o"&gt;(&lt;/span&gt;CentOS&lt;span class="o"&gt;)&lt;/span&gt; PHP/5.4.16
&lt;span class="m"&gt;8080&lt;/span&gt; tcp tcpwrapped 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Filter Optionen&lt;/h2&gt;
&lt;h3&gt;Filter open TCP and UDP ports&lt;/h3&gt;
&lt;p&gt;Mit &lt;em&gt;parse-nmap&lt;/em&gt; ist es möglich nach offenen TCP (Option -t oder --tcp)  oder UDP (Option -u oder --udp) Ports zu filtern. Das folgende Beispiel zeigt, die Verwendung eines TCP-Filters, der dafür sorgt, dass nur Hosts mit einem offenen TCP-Port 22 angezeigt werden.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;prompt$ parse-nmap.py -p -t &lt;span class="m"&gt;22&lt;/span&gt; lab-top-ports.xml
&lt;span class="c1"&gt;# number of hosts in the report: 6&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after IP filter: 6&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after OS and IP filter: 6&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after OS, IP and port filter: 2&lt;/span&gt;
&lt;span class="c1"&gt;#===============================================================================&lt;/span&gt;
IP:     &lt;span class="m"&gt;192&lt;/span&gt;.168.56.101
Hostname:   localhost
OS:     Linux &lt;span class="m"&gt;2&lt;/span&gt;.6.32 - &lt;span class="m"&gt;3&lt;/span&gt;.10
&lt;span class="c1"&gt;#-------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class="m"&gt;22&lt;/span&gt; tcp ssh product: OpenSSH version: &lt;span class="m"&gt;6&lt;/span&gt;.6.1 extrainfo: protocol &lt;span class="m"&gt;2&lt;/span&gt;.0
&lt;span class="m"&gt;80&lt;/span&gt; tcp http product: Apache httpd version: &lt;span class="m"&gt;2&lt;/span&gt;.4.6 extrainfo: &lt;span class="o"&gt;(&lt;/span&gt;CentOS&lt;span class="o"&gt;)&lt;/span&gt; PHP/5.4.16
&lt;span class="m"&gt;8080&lt;/span&gt; tcp tcpwrapped 

&lt;span class="c1"&gt;#===============================================================================&lt;/span&gt;
IP:     &lt;span class="m"&gt;192&lt;/span&gt;.168.56.103
Hostname:   localhost
OS:     Linux &lt;span class="m"&gt;2&lt;/span&gt;.4.9 - &lt;span class="m"&gt;2&lt;/span&gt;.4.18 &lt;span class="o"&gt;(&lt;/span&gt;likely embedded&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;#-------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class="m"&gt;22&lt;/span&gt; tcp ssh product: OpenSSH version: &lt;span class="m"&gt;3&lt;/span&gt;.1p1 extrainfo: protocol &lt;span class="m"&gt;1&lt;/span&gt;.99
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Filter hosts by platform&lt;/h3&gt;
&lt;p&gt;Zusätzlich zum Port-Filter ist es auch möglich Hosts auf Basis der Plattform (z.B.: Windows oder Linux) zu filtern. Diese Plattform oder Betriebssystemfamilie kann durch Angabe der Option &lt;em&gt;-f&lt;/em&gt; oder &lt;em&gt;--os-familiy&lt;/em&gt; spezifiziert werden.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;prompt$ parse-nmap.py -p -f Windows lab-top-ports.xml
&lt;span class="c1"&gt;# number of hosts in the report: 6&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after IP filter: 6&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after OS and IP filter: 4&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after OS, IP and port filter: 4&lt;/span&gt;
&lt;span class="c1"&gt;#===============================================================================&lt;/span&gt;
IP:     &lt;span class="m"&gt;192&lt;/span&gt;.168.56.10
Hostname:   localhost
OS:     Microsoft Windows XP SP2 or SP3
&lt;span class="c1"&gt;#-------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class="m"&gt;135&lt;/span&gt; tcp msrpc product: Microsoft Windows RPC ostype: Windows
&lt;span class="m"&gt;139&lt;/span&gt; tcp netbios-ssn 
&lt;span class="m"&gt;445&lt;/span&gt; tcp microsoft-ds product: Microsoft Windows XP microsoft-ds ostype: Windows

&lt;span class="c1"&gt;#===============================================================================&lt;/span&gt;
IP:     &lt;span class="m"&gt;192&lt;/span&gt;.168.56.102
Hostname:   localhost
OS:     Microsoft Windows &lt;span class="m"&gt;7&lt;/span&gt; SP0 - SP1, Windows Server &lt;span class="m"&gt;2008&lt;/span&gt; SP1, or Windows &lt;span class="m"&gt;8&lt;/span&gt;
&lt;span class="c1"&gt;#-------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class="m"&gt;135&lt;/span&gt; tcp msrpc product: Microsoft Windows RPC ostype: Windows
&lt;span class="m"&gt;139&lt;/span&gt; tcp netbios-ssn 
&lt;span class="m"&gt;445&lt;/span&gt; tcp netbios-ssn 
&lt;span class="m"&gt;1025&lt;/span&gt; tcp msrpc product: Microsoft Windows RPC ostype: Windows

...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Filter by IP&lt;/h3&gt;
&lt;p&gt;Um Hosts anhand der IP zu filtern, kann der Remote-Host mit der Option &lt;em&gt;-r&lt;/em&gt; angegeben werden.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;prompt$ parse-nmap.py -p -r &lt;span class="m"&gt;192&lt;/span&gt;.168.56.10 lab-top-ports.xml
&lt;span class="c1"&gt;# number of hosts in the report: 6&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after IP filter: 1&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after OS and IP filter: 1&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after OS, IP and port filter: 1&lt;/span&gt;
&lt;span class="c1"&gt;#===============================================================================&lt;/span&gt;
IP:     &lt;span class="m"&gt;192&lt;/span&gt;.168.56.10
Hostname:   localhost
OS:     Microsoft Windows XP SP2 or SP3
&lt;span class="c1"&gt;#-------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class="m"&gt;135&lt;/span&gt; tcp msrpc product: Microsoft Windows RPC ostype: Windows
&lt;span class="m"&gt;139&lt;/span&gt; tcp netbios-ssn 
&lt;span class="m"&gt;445&lt;/span&gt; tcp microsoft-ds product: Microsoft Windows XP microsoft-ds ostype: Windows
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;parse-nmap mit anderen Tools nutzen&lt;/h2&gt;
&lt;h3&gt;Target-Listen generieren&lt;/h3&gt;
&lt;p&gt;Mit &lt;em&gt;parse-nmap&lt;/em&gt; ist es möglich Target-Listen für andere Tools zu erzeugen. Das Standard-Trennzeichen zwischen den IPs ist ein Leerzeichen, dieses lässt sich allerdings mit der Option &lt;em&gt;-d&lt;/em&gt; oder &lt;em&gt;--list-delimiter&lt;/em&gt; ändern. Die folgenden Beispiele zeigen, wie eine Target-Liste für alle Windows Rechner mit einem offenen TCP-Port 445 erzeugt wird. Das erste Beispiel nutzt das Standard-Trennzeuchen, das zweite Beispiel nutzt ein Komma als Trennzeichen.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;prompt$ parse-nmap.py -f Windows -t &lt;span class="m"&gt;445&lt;/span&gt; --list lab-top-ports.xml
&lt;span class="m"&gt;192&lt;/span&gt;.168.56.10 &lt;span class="m"&gt;192&lt;/span&gt;.168.56.102 &lt;span class="m"&gt;192&lt;/span&gt;.168.56.200 &lt;span class="m"&gt;192&lt;/span&gt;.168.56.250
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;prompt$ parse-nmap.py -f Windows -t &lt;span class="m"&gt;445&lt;/span&gt; --list -d &lt;span class="s2"&gt;&amp;quot;,&amp;quot;&lt;/span&gt; lab-top-ports.xml
&lt;span class="m"&gt;192&lt;/span&gt;.168.56.10,192.168.56.102,192.168.56.200,192.168.56.250
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Target-Listen als Datei speichern&lt;/h3&gt;
&lt;p&gt;Wenn eine Target-Liste benötigt wird, die für jede IP eine seperate Zeile nutzt (z.B.: bei Verwendung von &lt;em&gt;onesixtyone&lt;/em&gt;), kann die Option &lt;em&gt;--list-file&lt;/em&gt; genutzt werden. Angenommen ein Nmap-Scan über UDP-Port 161 wurde in der Datei udp.xml gespeichert und es soll für &lt;em&gt;onesixtyone&lt;/em&gt; eine Target-Liste mit allen Hosts erstellt werden, bei denen der Port offen ist. Dies ist mit folgendem Kommando möglich.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;prompt$ parse-nmap.py -u &lt;span class="m"&gt;161&lt;/span&gt; --list-file targetlist udp.xml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;parse-nmap als Eingabe für nmap&lt;/h3&gt;
&lt;p&gt;Das folgende Beispiel nutzt &lt;em&gt;parse-nmap&lt;/em&gt; als Input für &lt;em&gt;nmap&lt;/em&gt; um einen vulnscan bei allen Windows Rechnern auf Port 445 durchzuführen.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;prompt$ nmap -sV -p &lt;span class="m"&gt;445&lt;/span&gt; --script&lt;span class="o"&gt;=&lt;/span&gt;vuln --script-args&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;unsafe&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="k"&gt;$(&lt;/span&gt;parse-nmap.py -f Windows -t &lt;span class="m"&gt;445&lt;/span&gt; --list lab-top-ports.xml&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="Scripts"></category><category term="nmap"></category><category term="Python"></category><category term="parse-nmap"></category><category term="parse-nmap.py"></category></entry><entry><title>parse-nmap.py</title><link href="/posts/en/2016/05/parse-nmap/" rel="alternate"></link><published>2016-05-03T10:20:00+02:00</published><updated>2016-05-03T10:20:00+02:00</updated><author><name>Christoph Bleß</name></author><id>tag:None,2016-05-03:/posts/en/2016/05/parse-nmap/</id><summary type="html">&lt;p&gt;A simple script for parsing nmap scan results.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;Parse-nmap&lt;/em&gt; is a tool which parses nmap scan results (only XML) from a file. By using &lt;em&gt;parse-nmap&lt;/em&gt; it is possible to filter the results by platform or ip. It is also possible 
to generate a target-list whith the resulting IPs or export the results as a LaTeX table (I used this feature to generate some tables for my &lt;a href="https://www.offensive-security.com/information-security-certifications/oscp-offensive-security-certified-professional/"&gt;OSCP&lt;/a&gt;-Report). In this post I will give you some 
examples to demonstrate the available options of &lt;em&gt;parse-nmap&lt;/em&gt;. The script is available in my account on &lt;a href="https://bitbucket.org/cbless/"&gt;bitbucket.org&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For the following examples we assume that we run a nmap scan to scan the top rated TCP ports and perform a version scan on these ports. The results will be stored in a file called lab-top-ports.xml (see the first code example).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;prompt$ nmap -sS -sV --top-ports &lt;span class="m"&gt;20&lt;/span&gt; -oA lab-top-ports &amp;lt;IPs&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Display Options&lt;/h2&gt;
&lt;h3&gt;brief list&lt;/h3&gt;
&lt;p&gt;The following example shows a brief list of all hosts in the specified &lt;em&gt;nmap&lt;/em&gt; file. The first four lines display some 
information about the number of hosts in the file and the number of hosts after filtering. The brief output lists 
three colomns per host. The first column contains the IP, the second column contains the hostname (or &lt;em&gt;localhost&lt;/em&gt; if 
the name is not available). 
The last column contains the OS String (if available).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;prompt$ parse-nmap.py lab-top-ports.xml
&lt;span class="c1"&gt;# number of hosts in the report: 6&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after IP filter: 6&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after OS and IP filter: 6&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after OS, IP and port filter: 6&lt;/span&gt;
&lt;span class="m"&gt;192&lt;/span&gt;.168.56.10 localhost Microsoft Windows XP SP2 or SP3
&lt;span class="m"&gt;192&lt;/span&gt;.168.56.101 localhost Linux &lt;span class="m"&gt;2&lt;/span&gt;.6.32 - &lt;span class="m"&gt;3&lt;/span&gt;.10
&lt;span class="m"&gt;192&lt;/span&gt;.168.56.102 localhost Microsoft Windows &lt;span class="m"&gt;7&lt;/span&gt; SP0 - SP1, Windows Server &lt;span class="m"&gt;2008&lt;/span&gt; SP1, or Windows &lt;span class="m"&gt;8&lt;/span&gt;
&lt;span class="m"&gt;192&lt;/span&gt;.168.56.103 localhost Linux &lt;span class="m"&gt;2&lt;/span&gt;.4.9 - &lt;span class="m"&gt;2&lt;/span&gt;.4.18 &lt;span class="o"&gt;(&lt;/span&gt;likely embedded&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="m"&gt;192&lt;/span&gt;.168.56.200 localhost Microsoft Windows &lt;span class="m"&gt;7&lt;/span&gt; SP0 - SP1, Windows Server &lt;span class="m"&gt;2008&lt;/span&gt; SP1, or Windows &lt;span class="m"&gt;8&lt;/span&gt;
&lt;span class="m"&gt;192&lt;/span&gt;.168.56.250 localhost Microsoft Windows &lt;span class="m"&gt;7&lt;/span&gt; SP0 - SP1, Windows Server &lt;span class="m"&gt;2008&lt;/span&gt; SP1, or Windows &lt;span class="m"&gt;8&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;print-ports&lt;/h3&gt;
&lt;p&gt;If you want to know which ports are open you can use the parameter &lt;em&gt;-p&lt;/em&gt;. This option displays the open ports for each host.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;prompt$ parse-nmap.py -p lab-top-ports.xml
&lt;span class="c1"&gt;# number of hosts in the report: 6&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after IP filter: 6&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after OS and IP filter: 6&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after OS, IP and port filter: 6&lt;/span&gt;
&lt;span class="c1"&gt;#===============================================================================&lt;/span&gt;
IP:     &lt;span class="m"&gt;192&lt;/span&gt;.168.56.10
Hostname:   localhost
OS:     Microsoft Windows XP SP2 or SP3
&lt;span class="c1"&gt;#-------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class="m"&gt;135&lt;/span&gt; tcp msrpc product: Microsoft Windows RPC ostype: Windows
&lt;span class="m"&gt;139&lt;/span&gt; tcp netbios-ssn 
&lt;span class="m"&gt;445&lt;/span&gt; tcp microsoft-ds product: Microsoft Windows XP microsoft-ds ostype: Windows

&lt;span class="c1"&gt;#===============================================================================&lt;/span&gt;
IP:     &lt;span class="m"&gt;192&lt;/span&gt;.168.56.101
Hostname:   localhost
OS:     Linux &lt;span class="m"&gt;2&lt;/span&gt;.6.32 - &lt;span class="m"&gt;3&lt;/span&gt;.10
&lt;span class="c1"&gt;#-------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class="m"&gt;22&lt;/span&gt; tcp ssh product: OpenSSH version: &lt;span class="m"&gt;6&lt;/span&gt;.6.1 extrainfo: protocol &lt;span class="m"&gt;2&lt;/span&gt;.0
&lt;span class="m"&gt;80&lt;/span&gt; tcp http product: Apache httpd version: &lt;span class="m"&gt;2&lt;/span&gt;.4.6 extrainfo: &lt;span class="o"&gt;(&lt;/span&gt;CentOS&lt;span class="o"&gt;)&lt;/span&gt; PHP/5.4.16
&lt;span class="m"&gt;8080&lt;/span&gt; tcp tcpwrapped 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Filter options&lt;/h2&gt;
&lt;h3&gt;Filter open TCP and UDP ports&lt;/h3&gt;
&lt;p&gt;With parse-nmap it is possible to filter hosts by open TCP (Option -t or --tcp)  or UDP (option -u or --udp) ports. The following example will only display ports with an open TCP port 22. &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;prompt$ parse-nmap.py -p -t &lt;span class="m"&gt;22&lt;/span&gt; lab-top-ports.xml
&lt;span class="c1"&gt;# number of hosts in the report: 6&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after IP filter: 6&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after OS and IP filter: 6&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after OS, IP and port filter: 2&lt;/span&gt;
&lt;span class="c1"&gt;#===============================================================================&lt;/span&gt;
IP:     &lt;span class="m"&gt;192&lt;/span&gt;.168.56.101
Hostname:   localhost
OS:     Linux &lt;span class="m"&gt;2&lt;/span&gt;.6.32 - &lt;span class="m"&gt;3&lt;/span&gt;.10
&lt;span class="c1"&gt;#-------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class="m"&gt;22&lt;/span&gt; tcp ssh product: OpenSSH version: &lt;span class="m"&gt;6&lt;/span&gt;.6.1 extrainfo: protocol &lt;span class="m"&gt;2&lt;/span&gt;.0
&lt;span class="m"&gt;80&lt;/span&gt; tcp http product: Apache httpd version: &lt;span class="m"&gt;2&lt;/span&gt;.4.6 extrainfo: &lt;span class="o"&gt;(&lt;/span&gt;CentOS&lt;span class="o"&gt;)&lt;/span&gt; PHP/5.4.16
&lt;span class="m"&gt;8080&lt;/span&gt; tcp tcpwrapped 

&lt;span class="c1"&gt;#===============================================================================&lt;/span&gt;
IP:     &lt;span class="m"&gt;192&lt;/span&gt;.168.56.103
Hostname:   localhost
OS:     Linux &lt;span class="m"&gt;2&lt;/span&gt;.4.9 - &lt;span class="m"&gt;2&lt;/span&gt;.4.18 &lt;span class="o"&gt;(&lt;/span&gt;likely embedded&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;#-------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class="m"&gt;22&lt;/span&gt; tcp ssh product: OpenSSH version: &lt;span class="m"&gt;3&lt;/span&gt;.1p1 extrainfo: protocol &lt;span class="m"&gt;1&lt;/span&gt;.99
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Filter hosts by platform&lt;/h3&gt;
&lt;p&gt;In addition to the port filter it is possible to filter hosts by a specifiy platform, such as Windows or Linux. If you want to do this you need to the option &lt;em&gt;-f&lt;/em&gt; or &lt;em&gt;--os-familiy&lt;/em&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;prompt$ parse-nmap.py -p -f Windows lab-top-ports.xml
&lt;span class="c1"&gt;# number of hosts in the report: 6&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after IP filter: 6&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after OS and IP filter: 4&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after OS, IP and port filter: 4&lt;/span&gt;
&lt;span class="c1"&gt;#===============================================================================&lt;/span&gt;
IP:     &lt;span class="m"&gt;192&lt;/span&gt;.168.56.10
Hostname:   localhost
OS:     Microsoft Windows XP SP2 or SP3
&lt;span class="c1"&gt;#-------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class="m"&gt;135&lt;/span&gt; tcp msrpc product: Microsoft Windows RPC ostype: Windows
&lt;span class="m"&gt;139&lt;/span&gt; tcp netbios-ssn 
&lt;span class="m"&gt;445&lt;/span&gt; tcp microsoft-ds product: Microsoft Windows XP microsoft-ds ostype: Windows

&lt;span class="c1"&gt;#===============================================================================&lt;/span&gt;
IP:     &lt;span class="m"&gt;192&lt;/span&gt;.168.56.102
Hostname:   localhost
OS:     Microsoft Windows &lt;span class="m"&gt;7&lt;/span&gt; SP0 - SP1, Windows Server &lt;span class="m"&gt;2008&lt;/span&gt; SP1, or Windows &lt;span class="m"&gt;8&lt;/span&gt;
&lt;span class="c1"&gt;#-------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class="m"&gt;135&lt;/span&gt; tcp msrpc product: Microsoft Windows RPC ostype: Windows
&lt;span class="m"&gt;139&lt;/span&gt; tcp netbios-ssn 
&lt;span class="m"&gt;445&lt;/span&gt; tcp netbios-ssn 
&lt;span class="m"&gt;1025&lt;/span&gt; tcp msrpc product: Microsoft Windows RPC ostype: Windows

...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Filter by IP&lt;/h3&gt;
&lt;p&gt;To filter hosts by IP yout can use the option &lt;em&gt;-r&lt;/em&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;prompt$ parse-nmap.py -p -r &lt;span class="m"&gt;192&lt;/span&gt;.168.56.10 lab-top-ports.xml
&lt;span class="c1"&gt;# number of hosts in the report: 6&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after IP filter: 1&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after OS and IP filter: 1&lt;/span&gt;
&lt;span class="c1"&gt;# number of hosts after OS, IP and port filter: 1&lt;/span&gt;
&lt;span class="c1"&gt;#===============================================================================&lt;/span&gt;
IP:     &lt;span class="m"&gt;192&lt;/span&gt;.168.56.10
Hostname:   localhost
OS:     Microsoft Windows XP SP2 or SP3
&lt;span class="c1"&gt;#-------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class="m"&gt;135&lt;/span&gt; tcp msrpc product: Microsoft Windows RPC ostype: Windows
&lt;span class="m"&gt;139&lt;/span&gt; tcp netbios-ssn 
&lt;span class="m"&gt;445&lt;/span&gt; tcp microsoft-ds product: Microsoft Windows XP microsoft-ds ostype: Windows
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Using parse-nmap with other tools&lt;/h2&gt;
&lt;h3&gt;generating target lists&lt;/h3&gt;
&lt;p&gt;You can use &lt;em&gt;parse-nmap&lt;/em&gt; to generate target lists for use as input for other tools. The default delimiter is a space, but this can be changed by using option &lt;em&gt;-d&lt;/em&gt; or &lt;em&gt;--list-delimiter&lt;/em&gt;. The following examples show all hosts which are running a Windows OS with an open TCP port 445. The first one uses the default delimeter the second one uses the delimiter "," to separate the hosts.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;prompt$ parse-nmap.py -f Windows -t &lt;span class="m"&gt;445&lt;/span&gt; --list lab-top-ports.xml
&lt;span class="m"&gt;192&lt;/span&gt;.168.56.10 &lt;span class="m"&gt;192&lt;/span&gt;.168.56.102 &lt;span class="m"&gt;192&lt;/span&gt;.168.56.200 &lt;span class="m"&gt;192&lt;/span&gt;.168.56.250
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;prompt$ parse-nmap.py -f Windows -t &lt;span class="m"&gt;445&lt;/span&gt; --list -d &lt;span class="s2"&gt;&amp;quot;,&amp;quot;&lt;/span&gt; lab-top-ports.xml
&lt;span class="m"&gt;192&lt;/span&gt;.168.56.10,192.168.56.102,192.168.56.200,192.168.56.250
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;write target lists to file&lt;/h3&gt;
&lt;p&gt;If you need the target list as file with one target per line (e.g. if you use &lt;em&gt;onesixtyone&lt;/em&gt;), you can use option &lt;em&gt;--list-file&lt;/em&gt;. We assume that you perfomed a namp scan for open UDP port 161 and want to generate a target file for onesixtyone. You can do this with the following command: &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;prompt$ parse-nmap.py -u &lt;span class="m"&gt;161&lt;/span&gt; --list-file targetlist udp.xml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;parse-nmap as input for nmap&lt;/h3&gt;
&lt;p&gt;The following example uses &lt;em&gt;parse-nmap&lt;/em&gt; as input for &lt;em&gt;nmap&lt;/em&gt; to perform a vulnscan on port 445 on all host which are running on a Windows platform.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;prompt$ nmap -sV -p &lt;span class="m"&gt;445&lt;/span&gt; --script&lt;span class="o"&gt;=&lt;/span&gt;vuln --script-args&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;unsafe&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="k"&gt;$(&lt;/span&gt;parse-nmap.py -f Windows -t &lt;span class="m"&gt;445&lt;/span&gt; --list lab-top-ports.xml&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="Scripts"></category><category term="nmap"></category><category term="Python"></category><category term="parse-nmap"></category><category term="parse-nmap.py"></category></entry><entry><title>winenum.py</title><link href="/posts/2016/01/winenum/" rel="alternate"></link><published>2016-01-02T11:13:00+01:00</published><updated>2016-01-02T11:13:00+01:00</updated><author><name>Christoph Bleß</name></author><id>tag:None,2016-01-02:/posts/2016/01/winenum/</id><summary type="html">&lt;p&gt;Vorstellung des Tools winenum.py.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;winenum&lt;/em&gt; ist ein Tool zur Automatisierung einiger Privilege Escalation Aufgaben. Inspieriert durch den Artikel &lt;a href="http://www.fuzzysecurity.com/tutorials/16.html"&gt;Windows Privilege Escalation Fundamentals&lt;/a&gt; wurden einige dieser Kommandos mit Hilfe von &lt;em&gt;winenum&lt;/em&gt; automatisiert. Da auf den meisten Windows-Systemen vermutlich kein Python-Interpreter verfügbar ist, kann mit Hilfe von &lt;em&gt;pyinstaller&lt;/em&gt; eine &lt;em&gt;exe&lt;/em&gt; erstellt werden, die dann auf einem Windows-System lauffähig ist. Ein Kompilieren einer solchen eigenständigen Anwendung mit &lt;em&gt;pyinstaller&lt;/em&gt;, kann mit folgendem Befehl erfolgen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;pyinstaller&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;winenum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;onefile&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Da alle Kommandos, die ausgeführt werden sollen, in Listen (default_cmds, wmic_cmds, password_cmds) gespeichert werden, lassen sich neue Kommandos einfach hinzufügen. Hierzu muss lediglich ein neuer Befehl als String in einer dieser Listen gespeichert werden.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# list of default commands which will always be executed
default_cmds = [
    &amp;quot;hostname&amp;quot;,
    &amp;quot;systeminfo&amp;quot;,
    &amp;quot;set&amp;quot;,
    &amp;quot;arp -a&amp;quot;,
    &amp;quot;ipconfig /all&amp;quot;,
    &amp;quot;ipconfig /displaydns&amp;quot;,
    &amp;quot;route print&amp;quot;,
    &amp;quot;netstat -ano&amp;quot;,
    &amp;quot;net user&amp;quot;,
    ...
]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Kommandos in der Liste &lt;em&gt;default_cmds&lt;/em&gt; werden immer ausgeführt, Kommandos aus den Listen &lt;em&gt;wmic_cmds&lt;/em&gt; und &lt;em&gt;password_cmds&lt;/em&gt; hingegen nur wenn der Nutzer dieses per Parameter aktiviert. Zum aktivieren der &lt;em&gt;wmic_cmds&lt;/em&gt; können die Parameter -w oder --wmic-cmds und zur Aktivierung der &lt;em&gt;password_cmds&lt;/em&gt; die Optionen -p oder --password-cmds genutzt werden. Sollen beide Aktiviert werden, kann dieses auch durch Angabe der Option -a bzw. --all-cmds geschehen. Die Option -f oder --file kann dazu genutzt werden eine Ausgabedatei zu spezifizieren, in der dann die Ausgeführten Kommandos und deren Ausgaben gespeichert werden.&lt;/p&gt;
&lt;p&gt;Eine Ausführung des Tools könnte somit mit dem folgenden Kommandos erfolgen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;winenum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Falls eine mit &lt;em&gt;pyinstaller&lt;/em&gt; vorkompilierte Version der Datei vorliegt kann diese wie folgt gestartet werden.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;winenum&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="Scripts"></category><category term="Python"></category><category term="windows privilege escalation"></category></entry><entry><title>VulnScan-OpenVAS Adapter</title><link href="/posts/2015/11/vulnscan-openvas/" rel="alternate"></link><published>2015-11-05T13:00:00+01:00</published><updated>2015-11-05T13:00:00+01:00</updated><author><name>Christoph Bleß</name></author><id>tag:None,2015-11-05:/posts/2015/11/vulnscan-openvas/</id><summary type="html">&lt;p&gt;Eine Java Client Bibliothek für den OpenVAS Vulnerability Scanner, der die vorgeschriebenen Methoden der VulnScan-API implementiert.&lt;/p&gt;</summary><content type="html">&lt;h1&gt;VulnScan-OpenVAS&lt;/h1&gt;
&lt;p&gt;VulnScan-OpenVAS ist eine Java Bibliothek, die die vorgeschriebenen Methoden der VulnScan-API implementiert und somit einen einfachen Zugriff auf des OpenVAS Server gewährt. Die Sourcen zu dieser Bibliothek sind in meinem Account auf &lt;a href="https://bitbucket.org/cbless/vulnscan-openvas"&gt;bitbucket.org&lt;/a&gt; zu finden. Selbiges gilt auch für die Abhängigkeiten in Form der Schnittstellen-Definitionen, der &lt;a href="https://bitbucket.org/cbless/vulnscan-api"&gt;VulnScan-API&lt;/a&gt; und den gewrappten &lt;a href="https://bitbucket.org/cbless/openvasclient"&gt;OpenVASClient&lt;/a&gt;. Diese Bibliotheken sowie ein Adapter für &lt;a href="https://bitbucket.org/cbless/vulnscan-nessus"&gt;Nessus&lt;/a&gt; sind während eines Studien-Projekts entstanden.&lt;/p&gt;
&lt;h1&gt;Usage&lt;/h1&gt;
&lt;p&gt;Das erste Beispiel zeigt wie ein Client instantiiert und wie sich am Server authentisiert wird. Der Konstruktor 
nimmt drei Argumente an. Das Erste ist der Host des OpenVAS Servers, das Zweite ist der Port auf dem der Server lauscht. Der dritte Parameter ist das trustAll-Flag. Wenn dieses Flag gesetzt ist, wird ein TrustManager gesetzt der alle SSL-Zertifikate akzeptiert. Diese Option kann auf &lt;em&gt;true&lt;/em&gt; gesetzt werden wenn der Server mit einem selbst signierten Zertifikat läuft. Anderen Falls sollte dieser Wert auf &lt;em&gt;false&lt;/em&gt; gesetzt werden.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// create the Client &lt;/span&gt;
    &lt;span class="n"&gt;AbstractClient&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;OpenVASClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9390&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// authenticate &lt;/span&gt;
    &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;login&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;testuser&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;testuser&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// now you can do some magic stuff with the client ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SessionException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; 
    &lt;span class="c1"&gt;// login wasn&amp;#39;t successful&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c1"&gt;// any other error during the communication with the Server&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nach einer erfolgreichen Authentifizierung können weitere Methoden ausgeführt werden. Das nächste Beispiel zeigt die beispielhafte Verwendung der Methoden &lt;em&gt;getScans()&lt;/em&gt;, &lt;em&gt;getScanDetails(id)&lt;/em&gt;, &lt;em&gt;getScanStatus(id)&lt;/em&gt;. Der Übersichtlichkeit geschuldet, wird in den folgenden Beispielen auf die Instantiierung und Authentifizierung verzichtet.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// create client and authenticate&lt;/span&gt;

    &lt;span class="c1"&gt;// get all availabe scans&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Scan&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getScans&lt;/span&gt;&lt;span class="p"&gt;()){&lt;/span&gt;
        &lt;span class="c1"&gt;// Do something with the scan&lt;/span&gt;
        &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="c1"&gt;// Scan{id=c966cbad-cfc4-4629-a34b-567fda665e26, name=UNI-LAB, status=Done}&lt;/span&gt;
    &lt;span class="c1"&gt;// Scan{id=095dd09f-a958-4630-9df3-5172ebb36ae2, name=Windows 7 Scan, status=Stopped}&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;

    &lt;span class="c1"&gt;// you can also get the details of a scan, which contains the targets&lt;/span&gt;
    &lt;span class="n"&gt;ScanDetails&lt;/span&gt; &lt;span class="n"&gt;scanDetails&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getScanDetails&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;095dd09f-a958-4630-9df3-5172ebb36ae2&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scanDetails&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// ScanDetails{id=c966cbad-cfc4-4629-a34b-567fda665e26, name=UNI-LAB, status=Done, targets=UNI-LAB}&lt;/span&gt;

    &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getScanStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;095dd09f-a958-4630-9df3-5172ebb36ae2&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// Done&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SessionException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; 
    &lt;span class="c1"&gt;// login wasn&amp;#39;t successful&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c1"&gt;// any other error during the communication with the Server&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Weiterhin ist es möglich existierende Scans zu starten, stoppen, pausieren oder wieder aufzunehmen. Das folgende Beispiel zeigt die Verwendung der &lt;em&gt;launch&lt;/em&gt; Methode, die dazu dient einen Scan zu starten.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// create client and authenticate ...&lt;/span&gt;

    &lt;span class="c1"&gt;// Start scan with id 095dd09f-a958-4630-9df3-5172ebb36ae2&lt;/span&gt;
    &lt;span class="n"&gt;SString&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;095dd09f-a958-4630-9df3-5172ebb36ae2&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// we can use the method *getScanStatus* to check the current state of the scan. &lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Done&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getScanStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;))){&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Thread&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;InterruptedException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Handle Exception&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Scan completed&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SessionException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; 
    &lt;span class="c1"&gt;// login wasn&amp;#39;t successful&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c1"&gt;// any other error during the communication with the Server&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Wenn ein Scan fertig ist können die während der Ausführung gefundenen Schwachstellen abgerufen werden. Um diese abzufragen kann die Methode &lt;em&gt;getResults&lt;/em&gt; verwendet werden, die die ID des Scans als Parameter erwartet.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// create client and authenticate ...&lt;/span&gt;

    &lt;span class="c1"&gt;// get a list of vulnerabilities found by the scan&lt;/span&gt;
    &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Vulnerability&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;vulns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getResults&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;095dd09f-a958-4630-9df3-5172ebb36ae2&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Vulnerability&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;vulns&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
    &lt;span class="c1"&gt;// Vulnerability{id=4eba09e2-a65f-49d3-9742-3257a1c631de, name=Anonymous FTP Checking, severity=0.0, pluginId=1.3.6.1.4.1.25623.1.0.900600}&lt;/span&gt;
    &lt;span class="c1"&gt;// Vulnerability{id=bec429e9-62d7-4c51-ad07-487cb0dcdcb2, name=Apache &amp;#39;mod_deflate&amp;#39; Denial Of Service Vulnerability - July09, severity=7.1, pluginId=1.3.6.1.4.1.25623.1.0.800837}&lt;/span&gt;
    &lt;span class="c1"&gt;// Vulnerability{id=3f800da3-030f-4326-be38-e02d6561bc73, name=Apache &amp;#39;mod_proxy_ftp&amp;#39; Module Command Injection Vulnerability (Linux), severity=7.5, pluginId=1.3.6.1.4.1.25623.1.0.900842}&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SessionException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; 
    &lt;span class="c1"&gt;// login wasn&amp;#39;t successful&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c1"&gt;// any other error during the communication with the Server&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If the scan contains more than one target host you can use the method &lt;em&gt;getResultByHost&lt;/em&gt; to get a list of vulnerabilities for each host. The result of this method is a map with the host as key an a list of vulnerabilities as value.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// create client and authenticate ...&lt;/span&gt;

    &lt;span class="c1"&gt;// get a list of vulnerabilities sorted by hosts&lt;/span&gt;
    &lt;span class="n"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Vulnerability&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;resultsByHost&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getResultsByHost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;095dd09f-a958-4630-9df3-5172ebb36ae2&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;host&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;resultsByHost&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;keySet&lt;/span&gt;&lt;span class="p"&gt;()){&lt;/span&gt;
        &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Vulnerability&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;hostVulns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resultsByHost&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Vulnerability&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;hostVulns&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
            &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Host: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;host&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;&amp;quot; =&amp;gt; &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="c1"&gt;// Host: 192.168.56.101 =&amp;gt; Vulnerability{id=107bd163-27c7-4cd5-b90f-5eaf43167213, name=vsftpd Compromised Source Packages Backdoor Vulnerability, severity=7.5, pluginId=1.3.6.1.4.1.25623.1.0.103185}&lt;/span&gt;
    &lt;span class="c1"&gt;// Host: 192.168.56.101 =&amp;gt; Vulnerability{id=72433449-cc58-4a36-9bec-5d2fe3a252e5, name=vsftpd Compromised Source Packages Backdoor Vulnerability, severity=7.5, pluginId=1.3.6.1.4.1.25623.1.0.103185}&lt;/span&gt;
    &lt;span class="c1"&gt;// Host: 192.168.56.101 =&amp;gt; Vulnerability{id=d19d393a-22fd-4b03-a4ef-7e9df984cdc5, name=wapiti (NASL wrapper), severity=0.0, pluginId=1.3.6.1.4.1.25623.1.0.80110}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SessionException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; 
    &lt;span class="c1"&gt;// login wasn&amp;#39;t successful&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c1"&gt;// any other error during the communication with the Server&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;To get more detailed about a vulnerability you can get information about the plugin which found it. To get the information about a plugin you have to use the method &lt;em&gt;getPlugin&lt;/em&gt; which needs an id of the plugin. &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;

    &lt;span class="c1"&gt;// Abrufen der Informationen zu einem Plugin&lt;/span&gt;
    &lt;span class="n"&gt;Plugin&lt;/span&gt; &lt;span class="n"&gt;plugin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getPlugin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;1.3.6.1.4.1.25623.1.0.80110&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;plugin&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;//  Plugin{id=1.3.6.1.4.1.25623.1.0.80110, name=wapiti (NASL wrapper), family=Web application abuses, cvss=null, description=NOSUMMARY, references=[]}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SessionException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; 
    &lt;span class="c1"&gt;// fehlerhafter Login&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c1"&gt;// Anderer Fehler bei der Kommunikation mit dem Server&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="VulnScan-API"></category><category term="Vulnerabiliy Scanner"></category><category term="OpenVAS"></category><category term="Java"></category><category term="VulnScan-API"></category></entry><entry><title>VulnScan-OpenVAS Adapter</title><link href="/posts/en/2015/11/vulnscan-openvas/" rel="alternate"></link><published>2015-11-05T13:00:00+01:00</published><updated>2015-11-05T13:00:00+01:00</updated><author><name>Christoph Bleß</name></author><id>tag:None,2015-11-05:/posts/en/2015/11/vulnscan-openvas/</id><summary type="html">&lt;p&gt;A Java Client for the OpenVAS vulnerability scanner which implements the VulnScan-API.&lt;/p&gt;</summary><content type="html">&lt;h1&gt;VulnScan-OpenVAS&lt;/h1&gt;
&lt;p&gt;VulnScan-OpenVAS is a Java library, which implements the VulnScan-API to provide a common and simple way to use some features of OpenVAS in a Java-Application. The sources are available in my account on &lt;a href="https://bitbucket.org/cbless/vulnscan-openvas"&gt;bitbucket.org&lt;/a&gt;. The necesary dependencies are also available in my bitbucket account. The dependencies are the &lt;a href="https://bitbucket.org/cbless/vulnscan-api"&gt;VulnScan-API&lt;/a&gt; und the wrapped &lt;a href="https://bitbucket.org/cbless/openvasclient"&gt;OpenVASClient&lt;/a&gt;. This library and the adapter for &lt;a href="https://bitbucket.org/cbless/vulnscan-nessus"&gt;Nessus&lt;/a&gt; were developed during an academic studies project.&lt;/p&gt;
&lt;h1&gt;Usage&lt;/h1&gt;
&lt;p&gt;The first example shows how to create the client and authenticate to the server. The constructor takes three parameters. The first one is the host of the OpenVAS server, the second one is the port the server is listen to. The last parameter is the trustAll flag. This flag is used to set a TrustManager which accepts all SSL certificates. You can set this flag to true if your server runs with a self signed certificate. Otherwise you should set it to false.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// create the Client &lt;/span&gt;
    &lt;span class="n"&gt;AbstractClient&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;OpenVASClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9390&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// authenticate &lt;/span&gt;
    &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;login&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;testuser&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;testuser&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// now you can do some magic stuff with the client ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SessionException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; 
    &lt;span class="c1"&gt;// login wasn&amp;#39;t successful&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c1"&gt;// any other error during the communication with the Server&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;After you are authenticated you can execute other methods. The next example shows the usage of &lt;em&gt;getScans()&lt;/em&gt;, &lt;em&gt;getScanDetails(id)&lt;/em&gt;, &lt;em&gt;getScanStatus(id)&lt;/em&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// create client and authenticate&lt;/span&gt;

    &lt;span class="c1"&gt;// get all availabe scans&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Scan&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getScans&lt;/span&gt;&lt;span class="p"&gt;()){&lt;/span&gt;
        &lt;span class="c1"&gt;// Do something with the scan&lt;/span&gt;
        &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="c1"&gt;// Scan{id=c966cbad-cfc4-4629-a34b-567fda665e26, name=UNI-LAB, status=Done}&lt;/span&gt;
    &lt;span class="c1"&gt;// Scan{id=095dd09f-a958-4630-9df3-5172ebb36ae2, name=Windows 7 Scan, status=Stopped}&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;

    &lt;span class="c1"&gt;// you can also get the details of a scan, which contains the targets&lt;/span&gt;
    &lt;span class="n"&gt;ScanDetails&lt;/span&gt; &lt;span class="n"&gt;scanDetails&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getScanDetails&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;095dd09f-a958-4630-9df3-5172ebb36ae2&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scanDetails&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// ScanDetails{id=c966cbad-cfc4-4629-a34b-567fda665e26, name=UNI-LAB, status=Done, targets=UNI-LAB}&lt;/span&gt;

    &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getScanStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;095dd09f-a958-4630-9df3-5172ebb36ae2&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// Done&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SessionException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; 
    &lt;span class="c1"&gt;// login wasn&amp;#39;t successful&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c1"&gt;// any other error during the communication with the Server&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;It is possible to start, stop, pause or resume existing scans. The following example shows the usage of the &lt;em&gt;launch&lt;/em&gt; method, which is used to start a scan.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// create client and authenticate ...&lt;/span&gt;

    &lt;span class="c1"&gt;// Start scan with id 095dd09f-a958-4630-9df3-5172ebb36ae2&lt;/span&gt;
    &lt;span class="n"&gt;SString&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;095dd09f-a958-4630-9df3-5172ebb36ae2&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// we can use the method *getScanStatus* to check the current state of the scan. &lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Done&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getScanStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;))){&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Thread&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;InterruptedException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Handle Exception&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Scan completed&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SessionException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; 
    &lt;span class="c1"&gt;// login wasn&amp;#39;t successful&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c1"&gt;// any other error during the communication with the Server&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If the scan is completed you can get a list of vulnerabilities which were found during the execution of the scan. To request this list you have to use the method &lt;em&gt;getResults&lt;/em&gt; which requires the scan id as parameter.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// create client and authenticate ...&lt;/span&gt;

    &lt;span class="c1"&gt;// get a list of vulnerabilities found by the scan&lt;/span&gt;
    &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Vulnerability&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;vulns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getResults&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;095dd09f-a958-4630-9df3-5172ebb36ae2&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Vulnerability&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;vulns&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
    &lt;span class="c1"&gt;// Vulnerability{id=4b519e0e-3d75-4a6b-ade7-a73c88757e34, name=/doc directory browsable ?, severity=5.0, pluginId=1.3.6.1.4.1.25623.1.0.10056}&lt;/span&gt;
    &lt;span class="c1"&gt;// Vulnerability{id=4eba09e2-a65f-49d3-9742-3257a1c631de, name=Anonymous FTP Checking, severity=0.0, pluginId=1.3.6.1.4.1.25623.1.0.900600}&lt;/span&gt;
    &lt;span class="c1"&gt;// Vulnerability{id=bec429e9-62d7-4c51-ad07-487cb0dcdcb2, name=Apache &amp;#39;mod_deflate&amp;#39; Denial Of Service Vulnerability - July09, severity=7.1, pluginId=1.3.6.1.4.1.25623.1.0.800837}&lt;/span&gt;
    &lt;span class="c1"&gt;// Vulnerability{id=3f800da3-030f-4326-be38-e02d6561bc73, name=Apache &amp;#39;mod_proxy_ftp&amp;#39; Module Command Injection Vulnerability (Linux), severity=7.5, pluginId=1.3.6.1.4.1.25623.1.0.900842}&lt;/span&gt;

    &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SessionException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; 
    &lt;span class="c1"&gt;// login wasn&amp;#39;t successful&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c1"&gt;// any other error during the communication with the Server&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If the scan contains more than one target host you can use the method &lt;em&gt;getResultByHost&lt;/em&gt; to get a list of vulnerabilities for each host. The result of this method is a map with the host as key an a list of vulnerabilities as value.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// create client and authenticate ...&lt;/span&gt;

    &lt;span class="c1"&gt;// get a list of vulnerabilities sorted by hosts&lt;/span&gt;
    &lt;span class="n"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Vulnerability&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;resultsByHost&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getResultsByHost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;095dd09f-a958-4630-9df3-5172ebb36ae2&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;host&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;resultsByHost&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;keySet&lt;/span&gt;&lt;span class="p"&gt;()){&lt;/span&gt;
        &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Vulnerability&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;hostVulns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resultsByHost&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Vulnerability&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;hostVulns&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
            &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Host: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;host&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;&amp;quot; =&amp;gt; &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="c1"&gt;// Host: 192.168.56.101 =&amp;gt; Vulnerability{id=107bd163-27c7-4cd5-b90f-5eaf43167213, name=vsftpd Compromised Source Packages Backdoor Vulnerability, severity=7.5, pluginId=1.3.6.1.4.1.25623.1.0.103185}&lt;/span&gt;
    &lt;span class="c1"&gt;// Host: 192.168.56.101 =&amp;gt; Vulnerability{id=72433449-cc58-4a36-9bec-5d2fe3a252e5, name=vsftpd Compromised Source Packages Backdoor Vulnerability, severity=7.5, pluginId=1.3.6.1.4.1.25623.1.0.103185}&lt;/span&gt;
    &lt;span class="c1"&gt;// Host: 192.168.56.101 =&amp;gt; Vulnerability{id=d19d393a-22fd-4b03-a4ef-7e9df984cdc5, name=wapiti (NASL wrapper), severity=0.0, pluginId=1.3.6.1.4.1.25623.1.0.80110}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SessionException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; 
    &lt;span class="c1"&gt;// login wasn&amp;#39;t successful&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c1"&gt;// any other error during the communication with the Server&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;To get more detailed about a vulnerability you can get information about the plugin which found it. To get the information about a plugin you have to use the method &lt;em&gt;getPlugin&lt;/em&gt; which needs an id of the plugin. &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;

    &lt;span class="c1"&gt;// Abrufen der Informationen zu einem Plugin&lt;/span&gt;
    &lt;span class="n"&gt;Plugin&lt;/span&gt; &lt;span class="n"&gt;plugin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getPlugin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;1.3.6.1.4.1.25623.1.0.80110&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;plugin&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;//  Plugin{id=1.3.6.1.4.1.25623.1.0.80110, name=wapiti (NASL wrapper), family=Web application abuses, cvss=null, description=NOSUMMARY, references=[]}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SessionException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; 
    &lt;span class="c1"&gt;// fehlerhafter Login&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c1"&gt;// Anderer Fehler bei der Kommunikation mit dem Server&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="VulnScan-API"></category><category term="Vulnerabiliy Scanner"></category><category term="OpenVAS"></category><category term="Java"></category><category term="VulnScan-API"></category></entry><entry><title>VulnScan-Nessus Adapter</title><link href="/posts/2015/11/vulnscan-nessus/" rel="alternate"></link><published>2015-11-03T10:20:00+01:00</published><updated>2015-11-05T19:30:00+01:00</updated><author><name>Christoph Bleß</name></author><id>tag:None,2015-11-03:/posts/2015/11/vulnscan-nessus/</id><summary type="html">&lt;p&gt;Eine Java Client Bibliothek für den Nessus Vulnerability Scanner, der die vorgeschriebenen Methoden der VulnScan-API implementiert.&lt;/p&gt;</summary><content type="html">&lt;h1&gt;VulnScan-Nessus&lt;/h1&gt;
&lt;p&gt;VulnScan-Nessus ist eine Java Bibliothek, die die vorgeschriebenen Methoden der VulnScan-API implementiert und somit einen einfachen Zugriff auf des Nessus Server gewährt. Die Sourcen zu dieser Bibliothek sind in meinem Account auf &lt;a href="https://bitbucket.org/cbless/vulnscan-nessus"&gt;bitbucket.org&lt;/a&gt; zu finden. Selbiges gilt auch für die Abhängigkeiten in Form der Schnittstellen-Definitionen, der &lt;a href="https://bitbucket.org/cbless/vulnscan-api"&gt;VulnScan-API&lt;/a&gt; und den gewrappten &lt;a href="https://bitbucket.org/cbless/nessusclient"&gt;NessusClient&lt;/a&gt;. Diese Bibliotheken sowie ein Adapter für &lt;a href="https://bitbucket.org/cbless/vulnscan-openvas"&gt;OpenVAS&lt;/a&gt; sind während eines Studien-Projekts entstanden.&lt;/p&gt;
&lt;h1&gt;Usage&lt;/h1&gt;
&lt;p&gt;Das erste Beispiel zeigt wie ein Client instantiiert und wie sich am Server authentisiert wird. Der Konstruktor 
nimmt drei Argumente an. Das Erste ist der Host des Nessus Servers, das Zweite ist der Port auf dem der Server lauscht. Der dritte Parameter ist das trustAll-Flag. Wenn dieses Flag gesetzt ist, wird ein TrustManager gesetzt der alle SSL-Zertifikate akzeptiert. Diese Option kann auf &lt;em&gt;true&lt;/em&gt; gesetzt werden wenn der Server mit einem selbst signierten Zertifikat läuft. Anderen Falls sollte dieser Wert auf &lt;em&gt;false&lt;/em&gt; gesetzt werden.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// create the Client &lt;/span&gt;
    &lt;span class="n"&gt;AbstractClient&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;NessusClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8834&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// authenticate &lt;/span&gt;
    &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;login&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;testuser&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;testuser&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// now you can do some magic stuff with the client ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SessionException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; 
    &lt;span class="c1"&gt;// login wasn&amp;#39;t successful&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c1"&gt;// any other error during the communication with the Server&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nach einer erfolgreichen Authentifizierung können weitere Methoden ausgeführt werden. Das nächste Beispiel zeigt die beispielhafte Verwendung der Methoden &lt;em&gt;getScans()&lt;/em&gt;, &lt;em&gt;getScanDetails(id)&lt;/em&gt;, &lt;em&gt;getScanStatus(id)&lt;/em&gt;. Der Übersichtlichkeit geschuldet, wird in den folgenden Beispielen auf die Instantiierung und Authentifizierung verzichtet.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// create client and authenticate&lt;/span&gt;

    &lt;span class="c1"&gt;// get all availabe scans&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Scan&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getScans&lt;/span&gt;&lt;span class="p"&gt;()){&lt;/span&gt;
        &lt;span class="c1"&gt;// Do something with the scan&lt;/span&gt;
        &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="c1"&gt;// Scan{id=110, name=XP_Basic, status=canceled}&lt;/span&gt;
    &lt;span class="c1"&gt;// Scan{id=209, name=UNI-LAB, status=completed}&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;

    &lt;span class="c1"&gt;// you can also get the details of a scan, which contains the targets&lt;/span&gt;
    &lt;span class="n"&gt;ScanDetails&lt;/span&gt; &lt;span class="n"&gt;scanDetails&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getScanDetails&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;209&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scanDetails&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// ScanDetails{id=209, name=UNI-LAB, status=completed, targets=192.168.56.10,192.168.56.11,192.168.56.101,192.168.56.200,192.168.56.250.}&lt;/span&gt;

    &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getScanStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;209&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// completed&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SessionException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; 
    &lt;span class="c1"&gt;// login wasn&amp;#39;t successful&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c1"&gt;// any other error during the communication with the Server&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Weiterhin ist es möglich existierende Scans zu starten, stoppen, pausieren oder wieder aufzunehmen. Das folgende Beispiel zeigt die Verwendung der &lt;em&gt;launch&lt;/em&gt; Methode, die dazu dient einen Scan zu starten.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// create client and authenticate ...&lt;/span&gt;

    &lt;span class="c1"&gt;// Start scan with id 110&lt;/span&gt;
    &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;110&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// we can use the method *getScanStatus* to check the current state of the scan. &lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;completed&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getScanStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;))){&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;Thread&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;InterruptedException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// Handle Exception&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Scan completed&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SessionException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; 
    &lt;span class="c1"&gt;// login wasn&amp;#39;t successful&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c1"&gt;// any other error during the communication with the Server&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Wenn ein Scan fertig ist können die während der Ausführung gefundenen Schwachstellen abgerufen werden. Um diese abzufragen kann die Methode &lt;em&gt;getResults&lt;/em&gt; verwendet werden, die die ID des Scans als Parameter erwartet.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// create client and authenticate ...&lt;/span&gt;

    &lt;span class="c1"&gt;// get a list of vulnerabilities found by the scan&lt;/span&gt;
    &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Vulnerability&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;vulns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getResults&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;209&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Vulnerability&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;vulns&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
    &lt;span class="c1"&gt;// Vulnerability{id=42263, name=Unencrypted Telnet Server, severity=Medium, pluginId=42263}&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SessionException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; 
    &lt;span class="c1"&gt;// login wasn&amp;#39;t successful&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c1"&gt;// any other error during the communication with the Server&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If the scan contains more than one target host you can use the method &lt;em&gt;getResultByHost&lt;/em&gt; to get a list of vulnerabilities for each host. The result of this method is a map with the host as key an a list of vulnerabilities as value.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// create client and authenticate ...&lt;/span&gt;

    &lt;span class="c1"&gt;// get a list of vulnerabilities sorted by hosts&lt;/span&gt;
    &lt;span class="n"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Vulnerability&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;resultsByHost&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getResultsByHost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;209&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;host&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;resultsByHost&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;keySet&lt;/span&gt;&lt;span class="p"&gt;()){&lt;/span&gt;
        &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Vulnerability&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;hostVulns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resultsByHost&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Vulnerability&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;hostVulns&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
            &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Host: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;host&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;&amp;quot; =&amp;gt; &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
    &lt;span class="c1"&gt;// Host: 192.168.56.11 =&amp;gt; Vulnerability{id=11936, name=OS Identification, severity=High, pluginId=11936}&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SessionException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; 
    &lt;span class="c1"&gt;// login wasn&amp;#39;t successful&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c1"&gt;// any other error during the communication with the Server&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;To get more detailed about a vulnerability you can get information about the plugin which found it. To get the information about a plugin you have to use the method &lt;em&gt;getPlugin&lt;/em&gt; which needs an id of the plugin. &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;

    &lt;span class="c1"&gt;// Abrufen der Informationen zu einem Plugin&lt;/span&gt;
    &lt;span class="n"&gt;Plugin&lt;/span&gt; &lt;span class="n"&gt;plugin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getPlugin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;35362&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;plugin&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;//  Plugin{id=35362, name=MS09-001: Microsoft Windows SMB Vulnerabilities Remote Code Execution (958687) (uncredentialed check), family=Windows, cvss=10.0, description=, references=[Reference{type=CVE, reference=CVE-2008-4834}, Reference{type=CVE, reference=CVE-2008-4835}, Reference{type=CVE, reference=CVE-2008-4114}, Reference{type=XREF, reference=OSVDB:48153}, Reference{type=OSVDB, reference=48153}, Reference{type=XREF, reference=OSVDB:52691}, Reference{type=OSVDB, reference=52691}, Reference{type=XREF, reference=OSVDB:52692}, Reference{type=OSVDB, reference=52692}, Reference{type=XREF, reference=MSFT:MS09-001}, Reference{type=XREF, reference=CWE:399}, Reference{type=XREF, reference=CWE:399}]}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SessionException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; 
    &lt;span class="c1"&gt;// login wasn&amp;#39;t successful&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c1"&gt;// any other error during the communication with the Server&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="VulnScan-API"></category><category term="Vulnerabiliy Scanner"></category><category term="Nessus"></category><category term="Java"></category><category term="VulnScan-API"></category></entry><entry><title>VulnScan-Nessus Adapter</title><link href="/posts/en/2015/11/vulnscan-nessus/" rel="alternate"></link><published>2015-11-03T10:20:00+01:00</published><updated>2015-11-05T19:30:00+01:00</updated><author><name>Christoph Bleß</name></author><id>tag:None,2015-11-03:/posts/en/2015/11/vulnscan-nessus/</id><summary type="html">&lt;p&gt;A Java Client for the Nessus vulnerability scanner which implements the VulnScan-API.&lt;/p&gt;</summary><content type="html">&lt;h1&gt;VulnScan-Nessus&lt;/h1&gt;
&lt;p&gt;VulnScan-Nessus is a Java library, which implements the VulnScan-API to provide a common and simple way to use some features of Nessus in a Java-Application. The sources are available in my account on &lt;a href="https://bitbucket.org/cbless/vulnscan-nessus"&gt;bitbucket.org&lt;/a&gt;. The necesary dependencies are also available in my bitbucket account. The dependencies are the &lt;a href="https://bitbucket.org/cbless/vulnscan-api"&gt;VulnScan-API&lt;/a&gt; und the wrapped &lt;a href="https://bitbucket.org/cbless/nessusclient"&gt;NessusClient&lt;/a&gt;. This library and the adapter for &lt;a href="https://bitbucket.org/cbless/vulnscan-openvas"&gt;OpenVAS&lt;/a&gt; were developed during an academic studies project.&lt;/p&gt;
&lt;h1&gt;Usage&lt;/h1&gt;
&lt;p&gt;The first example shows how to create the client and authenticate to the server. The constructor takes three parameters. The first one is the host of the Nessus server, the second one is the port the server is listen to. The last parameter is the trustAll flag. This flag is used to set a TrustManager which accepts all SSL certificates. You can set this flag to true if your server runs with a self signed certificate. Otherwise you should set it to false.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// create the Client &lt;/span&gt;
    &lt;span class="n"&gt;AbstractClient&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;NessusClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8834&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// authenticate &lt;/span&gt;
    &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;login&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;testuser&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;testuser&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// now you can do some magic stuff with the client ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SessionException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; 
    &lt;span class="c1"&gt;// login wasn&amp;#39;t successful&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c1"&gt;// any other error during the communication with the Server&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;After you are authenticated you can execute other methods. The next example shows the usage of &lt;em&gt;getScans()&lt;/em&gt;, &lt;em&gt;getScanDetails(id)&lt;/em&gt;, &lt;em&gt;getScanStatus(id)&lt;/em&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// create client and authenticate&lt;/span&gt;

    &lt;span class="c1"&gt;// get all availabe scans&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Scan&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getScans&lt;/span&gt;&lt;span class="p"&gt;()){&lt;/span&gt;
        &lt;span class="c1"&gt;// Do something with the scan&lt;/span&gt;
        &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="c1"&gt;// Scan{id=110, name=XP_Basic, status=canceled}&lt;/span&gt;
    &lt;span class="c1"&gt;// Scan{id=209, name=UNI-LAB, status=completed}&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;

    &lt;span class="c1"&gt;// you can also get the details of a scan, which contains the targets&lt;/span&gt;
    &lt;span class="n"&gt;ScanDetails&lt;/span&gt; &lt;span class="n"&gt;scanDetails&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getScanDetails&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;209&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scanDetails&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// ScanDetails{id=209, name=UNI-LAB, status=completed, targets=192.168.56.10,192.168.56.11,192.168.56.101,192.168.56.200,192.168.56.250.}&lt;/span&gt;

    &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getScanStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;209&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// completed&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SessionException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; 
    &lt;span class="c1"&gt;// login wasn&amp;#39;t successful&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c1"&gt;// any other error during the communication with the Server&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;It is possible to start, stop, pause or resume existing scans. The following example shows the usage of the &lt;em&gt;launch&lt;/em&gt; method, which is used to start a scan.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// create client and authenticate ...&lt;/span&gt;

    &lt;span class="c1"&gt;// Start scan with id 110&lt;/span&gt;
    &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;110&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// we can use the method *getScanStatus* to check the current state of the scan. &lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;completed&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getScanStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;))){&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;Thread&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;InterruptedException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// Handle Exception&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Scan completed&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SessionException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; 
    &lt;span class="c1"&gt;// login wasn&amp;#39;t successful&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c1"&gt;// any other error during the communication with the Server&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If the scan is completed you can get a list of vulnerabilities which were found during the execution of the scan. To request this list you have to use the method &lt;em&gt;getResults&lt;/em&gt; which requires the scan id as parameter.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// create client and authenticate ...&lt;/span&gt;

    &lt;span class="c1"&gt;// get a list of vulnerabilities found by the scan&lt;/span&gt;
    &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Vulnerability&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;vulns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getResults&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;209&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Vulnerability&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;vulns&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
    &lt;span class="c1"&gt;// Vulnerability{id=42263, name=Unencrypted Telnet Server, severity=Medium, pluginId=42263}&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SessionException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; 
    &lt;span class="c1"&gt;// login wasn&amp;#39;t successful&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c1"&gt;// any other error during the communication with the Server&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If the scan contains more than one target host you can use the method &lt;em&gt;getResultByHost&lt;/em&gt; to get a list of vulnerabilities for each host. The result of this method is a map with the host as key an a list of vulnerabilities as value.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// create client and authenticate ...&lt;/span&gt;

    &lt;span class="c1"&gt;// get a list of vulnerabilities sorted by hosts&lt;/span&gt;
    &lt;span class="n"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Vulnerability&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;resultsByHost&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getResultsByHost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;209&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;host&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;resultsByHost&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;keySet&lt;/span&gt;&lt;span class="p"&gt;()){&lt;/span&gt;
        &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Vulnerability&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;hostVulns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resultsByHost&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Vulnerability&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;hostVulns&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
            &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Host: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;host&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;&amp;quot; =&amp;gt; &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
    &lt;span class="c1"&gt;// Host: 192.168.56.11 =&amp;gt; Vulnerability{id=11936, name=OS Identification, severity=High, pluginId=11936}&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SessionException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; 
    &lt;span class="c1"&gt;// login wasn&amp;#39;t successful&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c1"&gt;// any other error during the communication with the Server&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;To get more detailed about a vulnerability you can get information about the plugin which found it. To get the information about a plugin you have to use the method &lt;em&gt;getPlugin&lt;/em&gt; which needs an id of the plugin. &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;

    &lt;span class="c1"&gt;// Abrufen der Informationen zu einem Plugin&lt;/span&gt;
    &lt;span class="n"&gt;Plugin&lt;/span&gt; &lt;span class="n"&gt;plugin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getPlugin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;35362&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;plugin&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;//  Plugin{id=35362, name=MS09-001: Microsoft Windows SMB Vulnerabilities Remote Code Execution (958687) (uncredentialed check), family=Windows, cvss=10.0, description=, references=[Reference{type=CVE, reference=CVE-2008-4834}, Reference{type=CVE, reference=CVE-2008-4835}, Reference{type=CVE, reference=CVE-2008-4114}, Reference{type=XREF, reference=OSVDB:48153}, Reference{type=OSVDB, reference=48153}, Reference{type=XREF, reference=OSVDB:52691}, Reference{type=OSVDB, reference=52691}, Reference{type=XREF, reference=OSVDB:52692}, Reference{type=OSVDB, reference=52692}, Reference{type=XREF, reference=MSFT:MS09-001}, Reference{type=XREF, reference=CWE:399}, Reference{type=XREF, reference=CWE:399}]}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SessionException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; 
    &lt;span class="c1"&gt;// login wasn&amp;#39;t successful&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c1"&gt;// any other error during the communication with the Server&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="VulnScan-API"></category><category term="Vulnerabiliy Scanner"></category><category term="Nessus"></category><category term="Java"></category><category term="VulnScan-API"></category></entry></feed>