sagacity/classes/nessus.inc

467 lines
8.6 KiB
PHP
Raw Normal View History

2018-05-07 10:51:08 -04:00
<?php
/**
* File: nessus.inc
* Author: Ryan Prather
* Purpose: Represents a Nessus scan
* Created: Sep 12, 2013
*
* Portions Copyright (c) 2012-2015, Salient Federal Solutions
* Portions Copyright (c) 2008-2011, Science Applications International Corporation (SAIC)
* Released under Modified BSD License
*
* See license.txt for details
*
* Change Log:
* - Sep 12, 2013 - File created
* - Mar 22, 2017 - Removed setting function for values that were moved to meta data,
* Added compare_Reference function to compare 2 references from 2 nessus objects
*/
/**
* Represents a Nessus scan
*
* @author Ryan Prather
*
*/
class nessus {
/**
* PDI ID
*
* @var integer
*/
protected $pdi_id = 0;
/**
* Nessus Id
*
* @var string
*/
protected $nessus_id = '';
/**
* Name
*
* @var string
*/
protected $name = '';
/**
* Summary
*
* @var string
*/
protected $summary = '';
/**
* Description
*
* @var string
*/
protected $description = '';
/**
* Solution
*
* @var string
*/
protected $solution = '';
/**
* Family
*
* @var unknown
*/
protected $family = '';
/**
* Category
*
* @var string
*/
protected $category = '';
/**
* Copyright
*
* @var string
*/
protected $copyright = '';
/**
* Protocol
*
* @var string
*/
protected $protocol = '';
/**
* Version of the plugin
*
* @var string
*/
protected $version = '';
/**
* File name of the Nessus plugin file
*
* @var string
*/
protected $file_name = '';
/**
* Date of the Nessus plugin file
*
* @var string
*/
protected $file_date = '';
/**
* Array of reference IDs that link to this plugin
* multidimensional array, first dimension is type, second dimension is value
*
* @var array
*/
protected $refs = array();
/**
* Constructor
*
* @param integer $int_PDI_ID
* @param string $str_Nessus_ID
*/
public function __construct($int_PDI_ID, $str_Nessus_ID) {
$this->pdi_id = $int_PDI_ID;
$this->nessus_id = $str_Nessus_ID;
$this->refs = array();
}
/**
* Getter function for PDI ID
*
* @return integer
*/
public function get_PDI_ID() {
return $this->pdi_id;
}
/**
* Setter function for PDI ID
*
* @param integer $int_PDI_ID
*/
public function set_PDI_ID($int_PDI_ID) {
$this->pdi_id = $int_PDI_ID;
}
/**
* Getter function for Nessus ID
*
* @return string
*/
public function get_Nessus_ID() {
return $this->nessus_id;
}
/**
* Setter function for Nessus ID
*
* @param string $str_Nessus_ID
*/
public function set_Nessus_ID($str_Nessus_ID) {
$this->nessus_id = $str_Nessus_ID;
}
/**
* Getter function for plugin name
*
* @return string
*/
public function get_Name() {
return $this->name;
}
/**
* Setter function for plugin name
*
* @param string $str_Name_In
*/
public function set_Name($str_Name_In) {
$this->name = $str_Name_In;
}
/**
* Getter function for plugin summary
*
* @return string|null
*/
public function get_Summary() {
if (isset($this->refs['summary'])) {
return $this->refs['summary'];
}
return null;
}
/**
* Getter function for plugin description
*
* @return string|null
*/
public function get_Description() {
if (isset($this->refs['description'])) {
return $this->refs['description'];
}
return null;
}
/**
* Getter function for plugin solution
*
* @return string
*/
public function get_Solution() {
if (isset($this->refs['solution'])) {
return $this->refs['solution'];
}
return null;
}
/**
* Getter function for plugin family
*
* @return string
*/
public function get_Family() {
if (isset($this->refs['family'])) {
return $this->refs['family'];
}
return null;
}
/**
* Getter function for plugin category
*
* @return string
*/
public function get_Category() {
if (isset($this->refs['category'])) {
return $this->refs['category'];
}
return null;
}
/**
* Getter function for plugin copyright
*
* @return string
*/
public function get_Copyright() {
return $this->copyright;
}
/**
* Setter function for plugin copyright
*
* @param string $str_Copyright_In
*/
public function set_Copyright($str_Copyright_In) {
$this->copyright = $str_Copyright_In;
}
/**
* Getter function for plugin protocol
*
* @return string
*/
public function get_Protocol() {
if (isset($this->refs['protocol'])) {
return $this->refs['protocol'];
}
return null;
}
/**
* Getter function for plugin version
*
* @return string
*/
public function get_Version() {
return $this->version;
}
/**
* Setter function for plugin version
*
* @param string $str_Version_In
*/
public function set_Version($str_Version_In) {
$this->version = $str_Version_In;
}
/**
* Getter function for plugin file name
*
* @return string
*/
public function get_FileName() {
return $this->file_name;
}
/**
* Setter function for plugin file name
*
* @param string $str_FileName_In
*/
public function set_FileName($str_FileName_In) {
$this->file_name = $str_FileName_In;
}
/**
* Getter function for plugin file date
*
* @return string
*/
public function get_FileDate() {
return $this->file_date;
}
/**
* Getter function for plugin file date
*
* @return DateTime
*/
public function get_FileDate_Date() {
return DateTime::createFromFormat("U", $this->file_date);
}
/**
* Setter function for plugin file date
*
* @param string $str_FileDate_In
*/
public function set_FileDate($str_FileDate_In) {
$this->file_date = $str_FileDate_In;
}
/**
* Function to return multidimensional array of all references
*
* @return multitype:string
*/
public function get_Reference() {
return $this->refs;
}
/**
* Function to return an array of references
*
* @param string $type
* The type you want to isolate
*
* @return multitype:string
* Returns an array of references that are linked to a type
*/
public function get_Reference_By_Type($type) {
if ($type == 'iavm') {
$tmp = array();
if (isset($this->refs['iava'])) {
$tmp = array_merge($tmp, $this->refs['iava']);
}
if (isset($this->refs['iavb'])) {
$tmp = array_merge($tmp, $this->refs['iavb']);
}
if (isset($this->refs['iavt'])) {
$tmp = array_merge($tmp, $this->refs['iavt']);
}
return $tmp;
}
if (isset($this->refs[strtolower($type)])) {
return $this->refs[strtolower($type)];
}
return array();
}
/**
* Function to see if a reference is already in the array
*
* @param string $type
* The reference type you are searching for
* @param string $val
* The value you are searching for
*
* @return boolean
* Returns TRUE if found, otherwise false
*/
public function ref_Found($type, $val) {
if (isset($this->refs[strtolower($type)])) {
foreach ($this->refs[strtolower($type)] as $ref) {
if ($ref == $val) {
return true;
}
}
}
return false;
}
/**
* Function to add a reference to the array
*
* @param string $type
* An enumerated type of reference ('cve','bid','osvdb','edb','iavm','msft','cert','cwe')
* @param string $val
* The type value
*/
public function add_Reference($type, $val) {
$this->refs[strtolower($type)][] = $val;
}
/**
* Function to remove a reference
*
* @param string $type
* An enumerated type of reference ('cve','bid','osvdb','edb','iavm','msft','cert','cwe')
* More can be added if necessary
* @param string $val
* The value of the type
*
* @return boolean
* Returns TRUE if successful, otherwise false
*/
public function remove_Reference($type, $val) {
foreach ($this->ref[strtolower($type)] as $key => $ref) {
if ($ref == $val) {
unset($this->ref[$key]);
return true;
}
}
return false;
}
/**
* To compare the meta data in two different nessus objects
*
* @param nessus $refs
*
* @return array
*/
public function compare_References($refs) {
$ret = array();
foreach ($this->refs as $type => $ref) {
foreach ($ref as $val) {
if (!$refs->ref_Found($type, $val)) {
$ret[$type][] = $val;
}
}
}
return $ret;
}
}