| |
---|
| | $reader->close(); |
---|
| | //die(); |
---|
| | echo "[=] fonts found: ".sizeof($fonts)."\n"; |
---|
| | |
---|
| | // get template version used |
---|
| | $reader = new XMLReader(); |
---|
| | if (!$reader->open("/tmp/$rand/meta.xml")) die("[-] Failed to open 'meta.xml'\n"); |
---|
| | $templateVer = 0.0; |
---|
| | while ($reader->read()) { |
---|
| | if($reader->name == "dc:version"){ |
---|
| | $reader->read(); |
---|
| | $templateVer = number_format(floatval($reader->value), 2); |
---|
| | break; |
---|
| | } |
---|
| | } |
---|
| | |
---|
| | // step through text:h and text:p elements to put them into an array |
---|
| | $reader = new XMLReader(); |
---|
| | if (!$reader->open("/tmp/$rand/content.xml")) die("[-] Failed to open 'content.xml'\n"); |
---|
| | while ($reader->read()){ |
---|
| |
---|
| | // find the content we want |
---|
| | $start = 0; $end = 0; |
---|
| | foreach($line as $key => $val){ |
---|
| | if(strpos($val, "Discovered Vulnerabilities") === 0){ $start = $key; } |
---|
| | //if(strpos($val, "This section provides a quick guide to plan your remediation for the vulnerabilities discovered during the test.") === 0){ $end = $key-2; } |
---|
| | if(strpos($val, "Observed Hosts and Services") === 0){ $end = $key-2; } |
---|
| | $line[$key] = trim($val); |
---|
| | } |
---|
| | |
---|
| |
---|
| | $vulnPlace = 0; |
---|
| | $switch = 0; |
---|
| | $sub2 = 0; |
---|
| | $sub3 = 1; |
---|
| | for ($i=$start; $i <= $end ; $i++) { |
---|
| | // change state (action to take) |
---|
| | /*** |
---|
| | * ~states~ |
---|
| | * 0 = do nothing |
---|
| | * 1 = next is title |
---|
| | * 2 = next is description |
---|
| | * 3 = next is solution |
---|
| | * 4 = next is remediation |
---|
| | * 5 = next is cvss no |
---|
| | * 6 = next is risk level |
---|
| | * 7 = next is hosts |
---|
| | * 8 = next possibly title |
---|
| | */ |
---|
| | switch ($line[$i]) { |
---|
| | case 'Discovered Vulnerabilieies': |
---|
| | $switch = 0; |
---|
| | break; |
---|
| | case 'Serious Risk Vulnerabilities': |
---|
| | $sub2++; $sub3 = 1; |
---|
| | $switch = 1; |
---|
| | break; |
---|
| | case 'High Risk Vulnerabilities': |
---|
| | $sub2++; $sub3 = 1; |
---|
| | $switch = 1; |
---|
| | break; |
---|
| | case 'Medium Risk Vulnerabilities': |
---|
| | $sub2++; $sub3 = 1; |
---|
| | $switch = 1; |
---|
| | break; |
---|
| | case 'Low Risk Vulnerabilities': |
---|
| | $sub2++; $sub3 = 1; |
---|
| | $switch = 1; |
---|
| | break; |
---|
| | case 'Description': |
---|
| | $switch = 2; |
---|
| | break; |
---|
| | case 'Solution': |
---|
| | $switch = 3; |
---|
| | break; |
---|
| | case 'Remediation': |
---|
| | $switch = 4; |
---|
| | break; |
---|
| | case 'CVSS Base Score': |
---|
| | $switch = 5; |
---|
| | break; |
---|
| | case 'Risk Level': |
---|
| | $switch = 6; |
---|
| | break; |
---|
| | case 'Vulnerabilities Exist On': |
---|
| | $switch = 7; |
---|
| | break; |
---|
| | case 'Potential Impact': |
---|
| | $switch = 9; |
---|
| | break; |
---|
| | default: |
---|
| | # code... |
---|
| | break; |
---|
| | } |
---|
| | |
---|
| | //take action |
---|
| | switch ($switch) { |
---|
| | case 1: |
---|
| | $i++; |
---|
| | $vuln[$vulnPlace]['title'] = $line[$i]; |
---|
| | $vuln[$vulnPlace]['ref'] = "$sub1.$sub2.$sub3"; |
---|
| | $sub3++; |
---|
| | $switch = 0; |
---|
| | break; |
---|
| | case 2: |
---|
| | @$vuln[$vulnPlace]['desc'] .= $line[$i]; |
---|
| | break; |
---|
| | case 3: |
---|
| | @$vuln[$vulnPlace]['fix'] .= $line[$i]; |
---|
| | break; |
---|
| | case 4: |
---|
| | $i++; |
---|
| | $vuln[$vulnPlace]['rem'] = trim(strtok($line[$i], " ")); |
---|
| | $switch = 0; |
---|
| | break; |
---|
| | case 5: |
---|
| | $i++; |
---|
| | $vuln[$vulnPlace]['cvss'] = $line[$i]; |
---|
| | $switch = 0; |
---|
| | break; |
---|
| | case 6: |
---|
| | $i++; |
---|
| | $vuln[$vulnPlace]['risk'] = trim(strtok($line[$i], " ")); |
---|
| | $vuln[$vulnPlace]['owasp'] = trim(substr($line[$i], strpos($line[$i], ":") + 1)); |
---|
| | $switch = 0; |
---|
| | break; |
---|
| | case 7: |
---|
| | $i++; |
---|
| | $vuln[$vulnPlace]['hosts'] = $line[$i]; |
---|
| | $switch = 8; |
---|
| | $vulnPlace++; |
---|
| | break; |
---|
| | case 8: |
---|
| | $vuln[$vulnPlace]['title'] = trim($line[$i]); |
---|
| | $vuln[$vulnPlace]['ref'] = "$sub1.$sub2.$sub3"; |
---|
| | $sub3++; |
---|
| | $switch = 0; |
---|
| | break; |
---|
| | case 9: |
---|
| | @$vuln[$vulnPlace]['impact'] .= $line[$i]; |
---|
| | break; |
---|
| | default: |
---|
| | # code... |
---|
| | break; |
---|
| | } |
---|
| | |
---|
| | //echo $line[$i]."\n"; // DEBUG |
---|
| | } |
---|
| | |
---|
| | if(number_format($templateVer, 2) >= number_format(1.0, 2)){ |
---|
| | echo "[=] Template $templateVer used\n"; |
---|
| | for ($i=$start; $i <= $end ; $i++) { |
---|
| | // change state (action to take) |
---|
| | /*** |
---|
| | * ~states~ |
---|
| | * 0 = do nothing |
---|
| | * 1 = next is title |
---|
| | * 2 = next is description |
---|
| | * 3 = next is solution |
---|
| | * 4 = next is remediation |
---|
| | * 5 = next is cvss no |
---|
| | * 6 = next is risk level |
---|
| | * 7 = next is hosts |
---|
| | * 8 = next possibly title |
---|
| | */ |
---|
| | switch ($line[$i]) { |
---|
| | case 'Discovered Vulnerabilities': |
---|
| | $switch = 0; |
---|
| | break; |
---|
| | case 'Serious Risk Vulnerabilities': |
---|
| | $sub2++; $sub3 = 1; |
---|
| | $switch = 1; |
---|
| | break; |
---|
| | case 'High Risk Vulnerabilities': |
---|
| | $sub2++; $sub3 = 1; |
---|
| | $switch = 1; |
---|
| | break; |
---|
| | case 'Medium Risk Vulnerabilities': |
---|
| | $sub2++; $sub3 = 1; |
---|
| | $switch = 1; |
---|
| | break; |
---|
| | case 'Low Risk Vulnerabilities': |
---|
| | $sub2++; $sub3 = 1; |
---|
| | $switch = 1; |
---|
| | break; |
---|
| | case 'Description': |
---|
| | $switch = 2; |
---|
| | break; |
---|
| | case 'Solution': |
---|
| | $switch = 3; |
---|
| | break; |
---|
| | case 'Remediation': |
---|
| | $switch = 4; |
---|
| | break; |
---|
| | case 'CVSS Base Score': |
---|
| | $switch = 5; |
---|
| | break; |
---|
| | case 'Risk Analysis': |
---|
| | $switch = 6; |
---|
| | break; |
---|
| | case 'Vulnerabilities Exist On': |
---|
| | $switch = 7; |
---|
| | break; |
---|
| | case 'Potential Impact': |
---|
| | $switch = 9; |
---|
| | break; |
---|
| | default: |
---|
| | # code... |
---|
| | break; |
---|
| | } |
---|
| | |
---|
| | //take action |
---|
| | switch ($switch) { |
---|
| | case 1: |
---|
| | $i++; |
---|
| | $vuln[$vulnPlace]['title'] = $line[$i]; |
---|
| | $vuln[$vulnPlace]['ref'] = "$sub1.$sub2.$sub3"; |
---|
| | $sub3++; |
---|
| | $switch = 0; |
---|
| | break; |
---|
| | case 2: |
---|
| | @$vuln[$vulnPlace]['desc'] .= $line[$i]; |
---|
| | break; |
---|
| | case 3: |
---|
| | @$vuln[$vulnPlace]['fix'] .= $line[$i]; |
---|
| | break; |
---|
| | case 4: |
---|
| | $i++; |
---|
| | //$vuln[$vulnPlace]['rem'] = trim(strtok($line[$i], " ")); |
---|
| | $switch = 0; |
---|
| | break; |
---|
| | case 5: |
---|
| | $i++; |
---|
| | $vuln[$vulnPlace]['cvss'] = $line[$i]; |
---|
| | $switch = 0; |
---|
| | break; |
---|
| | case 6: |
---|
| | $i++; |
---|
| | $line[$i+3] = str_replace("Vulnerability Img", "", $line[$i+3]); |
---|
| | $vuln[$vulnPlace]['risk'] = strstr(trim($line[$i+3]), ":", true); |
---|
| | $vuln[$vulnPlace]['owasp'] = trim(substr($line[$i+3], strpos($line[$i+3], ":") + 1)); |
---|
| | $vuln[$vulnPlace]['impact'] = trim(strtok($line[$i+4], " ")); |
---|
| | $vuln[$vulnPlace]['rem'] = trim(strtok($line[$i+5], " ")); |
---|
| | $switch = 0; |
---|
| | break; |
---|
| | case 7: |
---|
| | $i++; |
---|
| | $vuln[$vulnPlace]['hosts'] = $line[$i]; |
---|
| | $switch = 8; |
---|
| | $vulnPlace++; |
---|
| | break; |
---|
| | case 8: |
---|
| | $vuln[$vulnPlace]['title'] = trim($line[$i]); |
---|
| | $vuln[$vulnPlace]['ref'] = "$sub1.$sub2.$sub3"; |
---|
| | $sub3++; |
---|
| | $switch = 0; |
---|
| | break; |
---|
| | case 9: |
---|
| | @$vuln[$vulnPlace]['impact'] .= $line[$i]; |
---|
| | break; |
---|
| | default: |
---|
| | # code... |
---|
| | break; |
---|
| | } |
---|
| | |
---|
| | //echo $line[$i]."\n"; // DEBUG |
---|
| | } |
---|
| | $first_desc = explode("Description", $vuln[0]['desc']); |
---|
| | $vuln[0]['desc'] = $first_desc[sizeof($first_desc)-1]; |
---|
| | }else{ // old template or Dave's format |
---|
| | for ($i=$start; $i <= $end ; $i++) { |
---|
| | // change state (action to take) |
---|
| | /*** |
---|
| | * ~states~ |
---|
| | * 0 = do nothing |
---|
| | * 1 = next is title |
---|
| | * 2 = next is description |
---|
| | * 3 = next is solution |
---|
| | * 4 = next is remediation |
---|
| | * 5 = next is cvss no |
---|
| | * 6 = next is risk level |
---|
| | * 7 = next is hosts |
---|
| | * 8 = next possibly title |
---|
| | */ |
---|
| | switch ($line[$i]) { |
---|
| | case 'Discovered Vulnerabilities': |
---|
| | $switch = 0; |
---|
| | break; |
---|
| | case 'Serious Risk Vulnerabilities': |
---|
| | $sub2++; $sub3 = 1; |
---|
| | $switch = 1; |
---|
| | break; |
---|
| | case 'High Risk Vulnerabilities': |
---|
| | $sub2++; $sub3 = 1; |
---|
| | $switch = 1; |
---|
| | break; |
---|
| | case 'Medium Risk Vulnerabilities': |
---|
| | $sub2++; $sub3 = 1; |
---|
| | $switch = 1; |
---|
| | break; |
---|
| | case 'Low Risk Vulnerabilities': |
---|
| | $sub2++; $sub3 = 1; |
---|
| | $switch = 1; |
---|
| | break; |
---|
| | case 'Description': |
---|
| | $switch = 2; |
---|
| | break; |
---|
| | case 'Solution': |
---|
| | $switch = 3; |
---|
| | break; |
---|
| | case 'Remediation': |
---|
| | $switch = 4; |
---|
| | break; |
---|
| | case 'CVSS Base Score': |
---|
| | $switch = 5; |
---|
| | break; |
---|
| | case 'Risk Level': |
---|
| | $switch = 6; |
---|
| | break; |
---|
| | case 'Vulnerabilities Exist On': |
---|
| | $switch = 7; |
---|
| | break; |
---|
| | case 'Potential Impact': |
---|
| | $switch = 9; |
---|
| | break; |
---|
| | default: |
---|
| | # code... |
---|
| | break; |
---|
| | } |
---|
| | |
---|
| | //take action |
---|
| | switch ($switch) { |
---|
| | case 1: |
---|
| | $i++; |
---|
| | $vuln[$vulnPlace]['title'] = $line[$i]; |
---|
| | $vuln[$vulnPlace]['ref'] = "$sub1.$sub2.$sub3"; |
---|
| | $sub3++; |
---|
| | $switch = 0; |
---|
| | break; |
---|
| | case 2: |
---|
| | @$vuln[$vulnPlace]['desc'] .= $line[$i]; |
---|
| | break; |
---|
| | case 3: |
---|
| | @$vuln[$vulnPlace]['fix'] .= $line[$i]; |
---|
| | break; |
---|
| | case 4: |
---|
| | $i++; |
---|
| | $vuln[$vulnPlace]['rem'] = trim(strtok($line[$i], " ")); |
---|
| | $switch = 0; |
---|
| | break; |
---|
| | case 5: |
---|
| | $i++; |
---|
| | $vuln[$vulnPlace]['cvss'] = $line[$i]; |
---|
| | $switch = 0; |
---|
| | break; |
---|
| | case 6: |
---|
| | $i++; |
---|
| | $vuln[$vulnPlace]['risk'] = trim(strtok($line[$i], " ")); |
---|
| | $vuln[$vulnPlace]['owasp'] = trim(substr($line[$i], strpos($line[$i], ":") + 1)); |
---|
| | $switch = 0; |
---|
| | break; |
---|
| | case 7: |
---|
| | $i++; |
---|
| | $vuln[$vulnPlace]['hosts'] = $line[$i]; |
---|
| | $switch = 8; |
---|
| | $vulnPlace++; |
---|
| | break; |
---|
| | case 8: |
---|
| | $vuln[$vulnPlace]['title'] = trim($line[$i]); |
---|
| | $vuln[$vulnPlace]['ref'] = "$sub1.$sub2.$sub3"; |
---|
| | $sub3++; |
---|
| | $switch = 0; |
---|
| | break; |
---|
| | case 9: |
---|
| | @$vuln[$vulnPlace]['impact'] .= $line[$i]; |
---|
| | break; |
---|
| | default: |
---|
| | # code... |
---|
| | break; |
---|
| | } |
---|
| | |
---|
| | //echo $line[$i]."\n"; // DEBUG |
---|
| | } |
---|
| | } |
---|
| | // minor tidying of arrays |
---|
| | for ($i=0; $i < sizeof($vuln) ; $i++) { |
---|
| | if (strpos($vuln[$i]['desc'], "Description") === 0) $vuln[$i]['desc'] = substr($vuln[$i]['desc'], strlen("Description")); |
---|
| | if (strpos($vuln[$i]['fix'], "Solution") === 0) $vuln[$i]['fix'] = substr($vuln[$i]['fix'], strlen("Solution")); |
---|
| |
---|
| | echo "[+] medium issues: $resultsFolder/findings_serious.csv\n"; |
---|
| | if(writeIssueTable($vuln, "Low", $resultsFolder."/findings_low.csv")) |
---|
| | echo "[+] low issues: $resultsFolder/findings_serious.csv\n"; |
---|
| | |
---|
| | if(writeAllTable($vuln, $resultsFolder."/findings_all.csv")) |
---|
| | $order = array('title', 'ref', 'desc', 'fix','rem','cvss','risk','impact','owasp','hosts'); |
---|
| | $orderedArray = array(); |
---|
| | foreach($vuln as $vn_no =>$vn){ |
---|
| | foreach ($order as $key) { |
---|
| | //echo $key."\n"; |
---|
| | $orderedArray[$vn_no][$key] = $vuln[$vn_no][$key]; |
---|
| | } |
---|
| | } |
---|
| | if(writeAllTable($orderedArray, $resultsFolder."/findings_all.csv")) |
---|
| | echo "[+] all issues: $resultsFolder/findings_all.csv\n"; |
---|
| | |
---|
| | if(writeRemediationTable($vuln, $resultsFolder."/remediation.csv")) |
---|
| | echo "[+] remediation table: $resultsFolder/remediation.csv\n"; |
---|
| |
---|
| | function writeAllTable($vuln, $path){ |
---|
| | if(sizeof($vuln) > 0){ |
---|
| | $fp = fopen($path, 'w'); |
---|
| | fprintf($fp, chr(0xEF).chr(0xBB).chr(0xBF)); |
---|
| | fputcsv($fp, array("Title", "Ref", "Description", "Solution", "Remediation", "CVSS", "Risk", "OWASP", "Affected")); |
---|
| | fputcsv($fp, array("Title", "Ref", "Description", "Solution", "Remediation", "CVSS", "Risk","Impact", "OWASP", "Affected")); |
---|
| | |
---|
| | //print_r($orderedArray); |
---|
| | foreach ($vuln as $fields) { |
---|
| | fputcsv($fp, $fields); |
---|
| | } |
---|
| | fclose($fp); |
---|
| |
---|
| | |