Newer
Older
DirtyScripts / ReportToolz / pt2json.php
root on 14 Dec 2019 3 KB ptreport support
  1. #!/usr/bin/php
  2. <?php
  3. //error_reporting(0);
  4.  
  5. /***
  6. * Main program - Don't edit below
  7. */
  8. echo " ______ _ \n _ (_____ \ (_) \n ____ _| |_ ____) ) _ ___ ___ ____ \n| _ (_ _)/ ____/ | |/___)/ _ \| _ \ \n| |_| || |_| (_____ | |___ | |_| | | | |\n| __/ \__)_______)| (___/ \___/|_| |_|\n|_| (__/ \n\n";
  9.  
  10. foreach (glob("classes/*.php") as $filename)
  11. include $filename;
  12.  
  13. $definitions = new \Clapp\CommandLineArgumentDefinition(
  14. array(
  15. "help|h" => "Shows help message",
  16. "doc|d=s" => "/path/to/doc.ptreport to use",
  17. )
  18. );
  19.  
  20. $filter = new \Clapp\CommandArgumentFilter($definitions, $argv);
  21.  
  22. if ($filter->getParam('h') === true || $argc < 2) {
  23. echo "Convert ptreport reprep output file to JSON files for repgen.php\n\n";
  24. fwrite(STDERR, $definitions->getUsage());
  25. exit(0);
  26. }
  27.  
  28. // see if doc exists
  29. if ($filter->getParam("doc") == false)
  30. die("[-] no doc set\n");
  31.  
  32. echo "[!] doc: ".$filter->getParam("doc")."\n";
  33. if(!file_exists($filter->getParam("doc")))
  34. die("[-] no such file! \n");
  35.  
  36.  
  37. $xmlfile = file_get_contents($filter->getParam("doc"));
  38. $ob= simplexml_load_string($xmlfile);
  39. $json = json_encode($ob);
  40. $configData = json_decode($json, true);
  41.  
  42. //print_r($configData);
  43. //file_put_contents('/mnt/hgfs/Pentest/pentests/2019/Remploy/test/array.x', print_r($configData, true));
  44. $resultsFolder = substr($filter->getParam("doc"), 0, strrpos( $filter->getParam("doc"), '/') )."/";
  45.  
  46. foreach ($configData['report_sections']['section']['subsection'] as $key => $value) {
  47. # code...
  48. //echo $value['title']."\n";
  49. //print_r($value);
  50. foreach($value['finding'] as $key2 => $value2){
  51. echo "[+] creating json for: ".$value2['@attributes']['title']."\n";
  52. $vulnFileName = preg_replace( '/[^a-z0-9]+/', '-', strtolower( $value2['@attributes']['title']) );
  53.  
  54. if(isset($value2['cvss_vector']) && @strpos($value2['cvss_vector'], 'CVSS:3.0') === 0 ){
  55. $cvss3_score = $value2['cvss'];
  56. $cvss3_vector = $value2['cvss_vector'];
  57. }else{
  58. $cvss3_score = "";
  59. $cvss3_vector = "";
  60. }
  61.  
  62. $techD = "";
  63. foreach ($value2['section'] as $key => $value) {
  64. # code...
  65. $techD .= @base64_decode($value)."\n";
  66. }
  67. $cvssS = (isset($value2['cvss']))? $value2['cvss'] : "";
  68.  
  69. $sev = $value2['severity'];
  70. $sev = str_replace("serious", "Serious", $sev);
  71. $sev = str_replace("high", "High", $sev);
  72. $sev = str_replace("medium", "Medium", $sev);
  73. $sev = str_replace("low", "Low", $sev);
  74. $sev = str_replace("info", "Informational", $sev);
  75.  
  76. $jsonFile = '{
  77. "title":'.json_encode($value2['@attributes']['title']).',
  78. "category":"",
  79. "remediation":'.json_encode(base64_decode($value2['remediation'])).',
  80. "cvss_score":'.json_encode($cvssS).',
  81. "risk":'.json_encode($sev).',
  82. "impact":"High/Medium/Low",
  83. "description":'.json_encode(base64_decode($value2['summary_description'])).',
  84. "tech_description":'.json_encode($techD).',
  85. "solution":'.json_encode(base64_decode($value2['summary_fix'])).',
  86. "cvss2_score":"",
  87. "cvss2_vector":"",
  88. "cvss3_score":'.json_encode($cvss3_score).',
  89. "cvss3_vector":'.json_encode($cvss3_vector).',
  90. "owasp":"",
  91. "tags":'.json_encode(base64_decode($value2['vuln_tags'])).',
  92. "to_check":"checked"}';
  93.  
  94. file_put_contents($resultsFolder.$vulnFileName.".json", $jsonFile);
  95. }
  96. }
Buy Me A Coffee