From 72396e5071ec44b001cee6c2e02e1389fdac760b Mon Sep 17 00:00:00 2001 From: adrien Date: Wed, 5 Feb 2025 18:37:33 +0100 Subject: [PATCH] rescan named scan --- index.php | 78 +-- name.php | 121 +++++ options.php | 1396 ++++++++++++++++++++++++++------------------------- rescan.php | 32 ++ scan.php | 274 +++++----- 5 files changed, 1031 insertions(+), 870 deletions(-) create mode 100644 name.php create mode 100644 rescan.php diff --git a/index.php b/index.php index c48f8a8..c1b0c8a 100644 --- a/index.php +++ b/index.php @@ -9,36 +9,36 @@ -
+
- -
- -
Erreur
-

-
- + +
+ +
Erreur
+

+
+
@@ -46,17 +46,17 @@ body > .grid {
@@ -72,7 +72,10 @@ if (file_exists($SCANSDIR)) { diff --git a/name.php b/name.php new file mode 100644 index 0000000..8ac9602 --- /dev/null +++ b/name.php @@ -0,0 +1,121 @@ + + + + + + + lanScan + + + + + + + + +
+
+ + + +
+ +
Erreur
+

+
+ + + +
+

Découvrir ou superviser un réseau

+
+
+ +
+
+
+ +
+ +
+
+
+ +
+ Options avancées +
+ + + +
+
+
Scans enregistrés
+
+ + + \n"; + } + } + } + ?> + +
$nameRescanner
+
+
+
+ + + + + + + + + + + + + - - - lanScan - - - - - - - - - + + + lanScan + + + + + + + + + - - -
+
-

Scanner un

+

Scanner un

-
-
-
+
Spécifications des ports et ordre du scan
+
+
+
+ + +
+
- - - - $name\n"; +
+
+ + +
+
+ +
+ + +
+ +
+
+ + +
+
+
+ +
Détection de services et de versions
+
+
+
+ + +
+
+ +
+
+ + +
+
+ +
+ + +
+ +
+
+ + +
+
+
+ +
Scripts
+
+
+
+ + +
+
+ +
+ + +
+ +
+ + +
+ +
+
+ + +
+
+ +
+
+ + +
+
+
+ +
Détection du système d'exploitation
+
+
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+ + +
+
+ +
Temporisation et performances
+
+
+ + +
+ +
+ +
+
+ + +
+
+ + +
+
+
+ +
+ +
+
+ + +
+
+ + +
+
+
+ +
+ +
+
+ +
+ > + +
+ +
+
+ +
+ > + +
+ +
+
+ +
+ > + +
+ +
+
+
+ +
+ + +
+ +
+ +
+ > + +
+ +
+ +
+
+ +
+ > + +
+ +
+
+ +
+ > + +
+ +
+
+
+
+ + +
+
+
+ +
Évitement de pare-feux/IDS et mystification
+
+
+
+ + +
+
+ +
+
+ + +
+ +
+ + +
+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+ + +
+
+
+
+ + + + + + + + + $name\n"; + } + } + } + ?> + + + + \n"; + if (file_exists("$dir/nmap-services")) { + $nmap_services = file("$dir/nmap-services"); + foreach ($nmap_services as $service) { + if (0 !== strpos($service, '#')) { + [$name, $port] = explode("\t", $service); + $services[$name] = explode("/", $port); } } } - ?> - + } + foreach ($services as $name => [$portid, $protocol]) { + echo " \n"; + } + ?> + - - \n"; - if (file_exists("$dir/nmap-services")) { - $nmap_services = file("$dir/nmap-services"); - foreach ($nmap_services as $service) { - if (0 !== strpos($service, '#')) { - [$name, $port] = explode("\t", $service); - $services[$name] = explode("/", $port); - } - } + + + + + + + + + + + + + + + + + + + + + + + + + + + \n"; } } - foreach ($services as $name => [$portid, $protocol]) { - echo " \n"; + } + ?> + + + - + } + + \ No newline at end of file diff --git a/rescan.php b/rescan.php new file mode 100644 index 0000000..42dfd67 --- /dev/null +++ b/rescan.php @@ -0,0 +1,32 @@ +:\/|?]+$/'; + +$name = filter_input(INPUT_GET, 'name', FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => $fileNameRegex], "flags" => FILTER_NULL_ON_FAILURE]); +if (!$name) { + die("Paramètre manquant : name"); +} + +$path = "$SCANSDIR/$name.xml"; +if (!file_exists($path)) { + die("Scan inconnu : $name"); +} + +$xml = simplexml_load_file($path); +$cmd = $xml["args"]; +if (substr( $cmd, 0, 5 ) != "nmap ") { + die("Erreur : $path n'est pas un fichier de scan nmap"); +} + +$cmd = $NMAP . substr($xml["args"], 4); + +header('Content-type: text/xml'); +system("$cmd", $retcode); + +exit(); \ No newline at end of file diff --git a/scan.php b/scan.php index ebf1532..b809bc6 100644 --- a/scan.php +++ b/scan.php @@ -2,161 +2,165 @@ include_once 'config.php'; -$targetsListRegex = '/^[\da-zA-Z-. \/]+$/'; +$fileNameRegex = '/^[^<>:\/|?]+$/'; +$targetsListRegex = '/^[\da-zA-Z-. \/]+$/'; + +$name = filter_input(INPUT_GET, 'name', FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => $fileNameRegex], "flags" => FILTER_NULL_ON_FAILURE]); $lan = filter_input(INPUT_GET, 'lan', FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => $targetsListRegex], "flags" => FILTER_NULL_ON_FAILURE]); if ($lan) { - $cmd = "$NMAP $LANSCANOPTIONS $lan"; - $filename = str_replace("/", "!", $lan); + $cmd = "$NMAP $LANSCANOPTIONS $lan"; + $filename = str_replace("/", "!", $lan); } $host = filter_input(INPUT_GET, 'host', FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => $targetsListRegex], "flags" => FILTER_NULL_ON_FAILURE]); if ($host) { - $cmd = "$NMAP $HOSTSCANOPTIONS $host"; - $filename = str_replace("/", "!", $host); + $cmd = "$NMAP $HOSTSCANOPTIONS $host"; + $filename = str_replace("/", "!", $host); } $targets = filter_input(INPUT_GET, 'targets', FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => $targetsListRegex], "flags" => FILTER_NULL_ON_FAILURE]); if ($targets) { - $hostsListRegex = '/^[\da-zA-Z-.,:\/]+$/'; - $protocolePortsListRegex = '/^(([TU]:)?[0-9\-]+|[a-z\-]+)(,([TU]:)?[0-9\-]+|,[a-z\-]+)*$/'; - $portsListRegex = '/^([0-9\-]+|[a-z\-]+)(,[0-9\-]+|,[a-z\-]+)*$/'; - $tempoRegex = '/^\d+[smh]?$/'; - $fileNameRegex = '/^[^<>:\/|?]+$/'; + $hostsListRegex = '/^[\da-zA-Z-.,:\/]+$/'; + $protocolePortsListRegex = '/^(([TU]:)?[0-9\-]+|[a-z\-]+)(,([TU]:)?[0-9\-]+|,[a-z\-]+)*$/'; + $portsListRegex = '/^([0-9\-]+|[a-z\-]+)(,[0-9\-]+|,[a-z\-]+)*$/'; + $tempoRegex = '/^\d+[smh]?$/'; - $inputs = filter_input_array(INPUT_GET, [ -// TARGET SPECIFICATION: - '-iR' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0]], - '--exclude' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $hostsListRegex]], -// HOST DISCOVERY: - '-sL' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $hostsListRegex]], - '-sP' => FILTER_VALIDATE_BOOLEAN, - '-P0' => FILTER_VALIDATE_BOOLEAN, - '-Pn' => FILTER_VALIDATE_BOOLEAN, - '-PS' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $portsListRegex]], - '-PA' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $portsListRegex]], - '-PU' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $portsListRegex]], - '-PE' => FILTER_VALIDATE_BOOLEAN, - '-PP' => FILTER_VALIDATE_BOOLEAN, - '-PM' => FILTER_VALIDATE_BOOLEAN, - '-PO' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0, 'max_range' => 255]], - '-PR' => FILTER_VALIDATE_BOOLEAN, - '--send-ip' => FILTER_VALIDATE_BOOLEAN, - '-n' => FILTER_VALIDATE_BOOLEAN, - '-R' => FILTER_VALIDATE_BOOLEAN, - '--dns-servers' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $hostsListRegex]], -// SCAN TECHNIQUES: - '-sS' => FILTER_VALIDATE_BOOLEAN, - '-sT' => FILTER_VALIDATE_BOOLEAN, - '-sA' => FILTER_VALIDATE_BOOLEAN, - '-sW' => FILTER_VALIDATE_BOOLEAN, - '-sM' => FILTER_VALIDATE_BOOLEAN, - '-sF' => FILTER_VALIDATE_BOOLEAN, - '-sN' => FILTER_VALIDATE_BOOLEAN, - '-sX' => FILTER_VALIDATE_BOOLEAN, - '-sU' => FILTER_VALIDATE_BOOLEAN, - '--scanflags' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => '/^(URG|ACK|PSH|RST|SYN|FIN|,)+|[1-9]?[0-9]|[1-2][0-9][0-9]$/']], - '-sI' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => '/^[a-zA-Z\d:.-]+(:\d+)?$/']], - '-sO' => FILTER_VALIDATE_BOOLEAN, - '-b' => FILTER_VALIDATE_URL, - '--traceroute' => FILTER_VALIDATE_BOOLEAN, - '--reason' => FILTER_VALIDATE_BOOLEAN, -// PORT SPECIFICATION AND SCAN ORDER: - '-p' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $portsListRegex]], - '-F' => FILTER_VALIDATE_BOOLEAN, - '-r' => FILTER_VALIDATE_BOOLEAN, - '--top-ports' => FILTER_VALIDATE_INT, - '--port-ratio' => ['filter' => FILTER_VALIDATE_FLOAT, 'options' => ['min_range' => 0, 'max_range' => 1]], -// SERVICE/VERSION DETECTION: - '-sV' => FILTER_VALIDATE_BOOLEAN, - '--version-light' => FILTER_VALIDATE_BOOLEAN, - '--version-intensity' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0, 'max_range' => 9]], - '--version-all' => FILTER_VALIDATE_BOOLEAN, - '--version-trace' => FILTER_VALIDATE_BOOLEAN, -// SCRIPT SCAN: - '-sC' => FILTER_VALIDATE_BOOLEAN, - '--script' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => '/^[a-z][a-z0-9,\-\.\/]*$/']], - '--script-args' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => '/^([a-zA-Z][a-zA-Z0-9\-_]*=[^"]+(,[a-zA-Z][a-zA-Z0-9\-_]*=[^"]+)?)$/']], -// OS DETECTION: - '-O' => FILTER_VALIDATE_BOOLEAN, - '--osscan-limit' => FILTER_VALIDATE_BOOLEAN, - '--osscan-guess' => FILTER_VALIDATE_BOOLEAN, - '--max-os-tries' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0]], -// TIMING AND PERFORMANCE: - '-T' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0, 'max_range' => 5]], - '--min-hostgroup' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0]], - '--max-hostgroup' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0]], - '--min-parallelism' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0]], - '--max-parallelism' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0]], - '--min-rtt-timeout' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $tempoRegex]], - '--max-rtt-timeout' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $tempoRegex]], - '--initial-rtt-timeout' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $tempoRegex]], - '--max-retries' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0]], - '--host-timeout' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $tempoRegex]], - '--scan-delay' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $tempoRegex]], - '--max-scan-delay' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $tempoRegex]], -// FIREWALL/IDS EVASION AND SPOOFING: - '-f' => FILTER_VALIDATE_INT, - '--mtu' => FILTER_VALIDATE_INT, - '-D' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $hostsListRegex]], - '-S' => ['filter' => FILTER_VALIDATE_IP], - '-e' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => '/^[a-z\d]+$/']], - '-g' => FILTER_VALIDATE_INT, - '--source-port' => FILTER_VALIDATE_INT, - '--data-length' => FILTER_VALIDATE_INT, - '--ip-options' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => '/^\"(R|T|U|L [\da-zA-Z-.: ]+|S [\da-zA-Z-.: ]+|\\\\x[\da-fA-F]{1,2}(\*[\d]+)?|\\\\[0-2]?[\d]{1,2}(\*[\d]+)?)\"$/']], - '--ttl' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0, 'max_range' => 255]], - '--spoof-mac' => FILTER_VALIDATE_MAC, - '--badsum' => FILTER_VALIDATE_BOOLEAN, -// MISC: + $inputs = filter_input_array(INPUT_GET, [ + // TARGET SPECIFICATION: + '-iR' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0]], + '--exclude' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $hostsListRegex]], + // HOST DISCOVERY: + '-sL' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $hostsListRegex]], + '-sP' => FILTER_VALIDATE_BOOLEAN, + '-P0' => FILTER_VALIDATE_BOOLEAN, + '-Pn' => FILTER_VALIDATE_BOOLEAN, + '-PS' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $portsListRegex]], + '-PA' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $portsListRegex]], + '-PU' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $portsListRegex]], + '-PE' => FILTER_VALIDATE_BOOLEAN, + '-PP' => FILTER_VALIDATE_BOOLEAN, + '-PM' => FILTER_VALIDATE_BOOLEAN, + '-PO' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0, 'max_range' => 255]], + '-PR' => FILTER_VALIDATE_BOOLEAN, + '--send-ip' => FILTER_VALIDATE_BOOLEAN, + '-n' => FILTER_VALIDATE_BOOLEAN, + '-R' => FILTER_VALIDATE_BOOLEAN, + '--dns-servers' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $hostsListRegex]], + // SCAN TECHNIQUES: + '-sS' => FILTER_VALIDATE_BOOLEAN, + '-sT' => FILTER_VALIDATE_BOOLEAN, + '-sA' => FILTER_VALIDATE_BOOLEAN, + '-sW' => FILTER_VALIDATE_BOOLEAN, + '-sM' => FILTER_VALIDATE_BOOLEAN, + '-sF' => FILTER_VALIDATE_BOOLEAN, + '-sN' => FILTER_VALIDATE_BOOLEAN, + '-sX' => FILTER_VALIDATE_BOOLEAN, + '-sU' => FILTER_VALIDATE_BOOLEAN, + '--scanflags' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => '/^(URG|ACK|PSH|RST|SYN|FIN|,)+|[1-9]?[0-9]|[1-2][0-9][0-9]$/']], + '-sI' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => '/^[a-zA-Z\d:.-]+(:\d+)?$/']], + '-sO' => FILTER_VALIDATE_BOOLEAN, + '-b' => FILTER_VALIDATE_URL, + '--traceroute' => FILTER_VALIDATE_BOOLEAN, + '--reason' => FILTER_VALIDATE_BOOLEAN, + // PORT SPECIFICATION AND SCAN ORDER: + '-p' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $portsListRegex]], + '-F' => FILTER_VALIDATE_BOOLEAN, + '-r' => FILTER_VALIDATE_BOOLEAN, + '--top-ports' => FILTER_VALIDATE_INT, + '--port-ratio' => ['filter' => FILTER_VALIDATE_FLOAT, 'options' => ['min_range' => 0, 'max_range' => 1]], + // SERVICE/VERSION DETECTION: + '-sV' => FILTER_VALIDATE_BOOLEAN, + '--version-light' => FILTER_VALIDATE_BOOLEAN, + '--version-intensity' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0, 'max_range' => 9]], + '--version-all' => FILTER_VALIDATE_BOOLEAN, + '--version-trace' => FILTER_VALIDATE_BOOLEAN, + // SCRIPT SCAN: + '-sC' => FILTER_VALIDATE_BOOLEAN, + '--script' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => '/^[a-z][a-z0-9,\-\.\/]*$/']], + '--script-args' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => '/^([a-zA-Z][a-zA-Z0-9\-_]*=[^"]+(,[a-zA-Z][a-zA-Z0-9\-_]*=[^"]+)?)$/']], + // OS DETECTION: + '-O' => FILTER_VALIDATE_BOOLEAN, + '--osscan-limit' => FILTER_VALIDATE_BOOLEAN, + '--osscan-guess' => FILTER_VALIDATE_BOOLEAN, + '--max-os-tries' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0]], + // TIMING AND PERFORMANCE: + '-T' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0, 'max_range' => 5]], + '--min-hostgroup' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0]], + '--max-hostgroup' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0]], + '--min-parallelism' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0]], + '--max-parallelism' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0]], + '--min-rtt-timeout' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $tempoRegex]], + '--max-rtt-timeout' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $tempoRegex]], + '--initial-rtt-timeout' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $tempoRegex]], + '--max-retries' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0]], + '--host-timeout' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $tempoRegex]], + '--scan-delay' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $tempoRegex]], + '--max-scan-delay' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $tempoRegex]], + // FIREWALL/IDS EVASION AND SPOOFING: + '-f' => FILTER_VALIDATE_INT, + '--mtu' => FILTER_VALIDATE_INT, + '-D' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $hostsListRegex]], + '-S' => ['filter' => FILTER_VALIDATE_IP], + '-e' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => '/^[a-z\d]+$/']], + '-g' => FILTER_VALIDATE_INT, + '--source-port' => FILTER_VALIDATE_INT, + '--data-length' => FILTER_VALIDATE_INT, + '--ip-options' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => '/^\"(R|T|U|L [\da-zA-Z-.: ]+|S [\da-zA-Z-.: ]+|\\\\x[\da-fA-F]{1,2}(\*[\d]+)?|\\\\[0-2]?[\d]{1,2}(\*[\d]+)?)\"$/']], + '--ttl' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0, 'max_range' => 255]], + '--spoof-mac' => FILTER_VALIDATE_MAC, + '--badsum' => FILTER_VALIDATE_BOOLEAN, + // MISC: // '6' => FILTER_VALIDATE_BOOLEAN, - '-A' => FILTER_VALIDATE_BOOLEAN, - '--send-eth' => FILTER_VALIDATE_BOOLEAN, - '--privileged' => FILTER_VALIDATE_BOOLEAN, - '-V' => FILTER_VALIDATE_BOOLEAN, - '--unprivileged' => FILTER_VALIDATE_BOOLEAN, - '-h' => FILTER_VALIDATE_BOOLEAN, - '--stylesheet' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $fileNameRegex]], -// lanScan - 'name' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $fileNameRegex]], - 'originalURL' => FILTER_VALIDATE_URL, - 'refreshPeriod' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0]], - 'sudo' => FILTER_VALIDATE_BOOLEAN, - ], false); + '-A' => FILTER_VALIDATE_BOOLEAN, + '--send-eth' => FILTER_VALIDATE_BOOLEAN, + '--privileged' => FILTER_VALIDATE_BOOLEAN, + '-V' => FILTER_VALIDATE_BOOLEAN, + '--unprivileged' => FILTER_VALIDATE_BOOLEAN, + '-h' => FILTER_VALIDATE_BOOLEAN, + '--stylesheet' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $fileNameRegex]], + // lanScan + 'name' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => $fileNameRegex]], + 'originalURL' => FILTER_VALIDATE_URL, + 'refreshPeriod' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0]], + 'sudo' => FILTER_VALIDATE_BOOLEAN, + ], false); - $options = ""; - foreach ($inputs as $option => $value) { - if (substr($option, 0, 1) == '-') { - if (is_null($value)) { - http_response_code(400); - $errorMessage = "Valeur incorrecte pour le paramètre $option : " . filter_input(INPUT_GET, $option, FILTER_SANITIZE_FULL_SPECIAL_CHARS); - include_once "index.php"; - die(); - } else if ($value) { - if ($value === true) { - $options .= " $option"; - } else { - if (substr($option, 0, 2) == '--') $options .= " $option " . escapeshellarg($value); - else $options .= " $option" . escapeshellarg($value); - } - } - } - } - - $cmd = "$NMAP$options $CUSTOMSCANOPTIONS $targets"; - $filename = str_replace("/", "!", $targets); + $options = ""; + foreach ($inputs as $option => $value) { + if (substr($option, 0, 1) == '-') { + if (is_null($value)) { + http_response_code(400); + $errorMessage = "Valeur incorrecte pour le paramètre $option : " . filter_input(INPUT_GET, $option, FILTER_SANITIZE_FULL_SPECIAL_CHARS); + include_once "index.php"; + die(); + } else if ($value) { + if ($value === true) { + $options .= " $option"; + } else { + if (substr($option, 0, 2) == '--') $options .= " $option " . escapeshellarg($value); + else $options .= " $option" . escapeshellarg($value); + } + } + } + } + + $cmd = "$NMAP$options $CUSTOMSCANOPTIONS $targets"; + $filename = str_replace("/", "!", $targets); } if ($cmd) { - if (!file_exists($SCANSDIR)) mkdir($SCANSDIR); - $path = "$SCANSDIR/$filename.xml"; + if ($name) { + if (!file_exists($SCANSDIR)) mkdir($SCANSDIR); - if (!file_exists($path)) $cmd .= " | tee '$path'"; + $path = "$SCANSDIR/" . escapeshellarg($name) . ".xml"; + $cmd .= " | tee '$path'"; + } - header('Content-type: text/xml'); - system("$cmd", $retcode); + header('Content-type: text/xml'); + system("$cmd", $retcode); - exit(); + exit(); } include_once "index.php";