Compare commits

...

3 Commits

Author SHA1 Message Date
efff220fe3 pass inputs with recursive template 2024-10-13 07:29:16 +02:00
cb0a4d94a5 dont serve stdout if ok 2024-10-13 07:29:00 +02:00
48113dc7cc fix names 2024-10-13 07:28:11 +02:00
3 changed files with 103 additions and 39 deletions

View File

@ -62,19 +62,19 @@ Exemples: <?= $_SERVER['REMOTE_ADDR']; ?>/24 <?= $_SERVER['SERVER_NAME']; ?> 10.
<div class="fields"> <div class="fields">
<div class="field" title="-PS"> <div class="field" title="-PS">
<label for="PSInput">TCP SYN</label> <label for="PSInput">TCP SYN</label>
<input type="text" id="PSInput" name="-PS" placeholder="Ports" list="servicesList" <input type="text" id="PSInput" name="PS" placeholder="Ports" list="servicesList"
pattern="([0-9\-]+|[a-z\-]+)(,[0-9\-]+|,[a-z\-]+)*" value="<?= $inputs['PS'] ?? "" ?>" pattern="([0-9\-]+|[a-z\-]+)(,[0-9\-]+|,[a-z\-]+)*" value="<?= $inputs['PS'] ?? "" ?>"
title="Liste de ports ex: 22,23,25,80,200-1024,60000-"> title="Liste de ports ex: 22,23,25,80,200-1024,60000-">
</div> </div>
<div class="field" title="-PA"> <div class="field" title="-PA">
<label for="PAInput">TCP ACK</label> <label for="PAInput">TCP ACK</label>
<input type="text" id="PAInput" name="-PA" placeholder="Ports" list="servicesList" <input type="text" id="PAInput" name="PA" placeholder="Ports" list="servicesList"
pattern="([0-9\-]+|[a-z\-]+)(,[0-9\-]+|,[a-z\-]+)*" value="<?= $inputs['PA'] ?? "" ?>" pattern="([0-9\-]+|[a-z\-]+)(,[0-9\-]+|,[a-z\-]+)*" value="<?= $inputs['PA'] ?? "" ?>"
title="Liste de ports ex: 22,23,25,80,200-1024,60000-"> title="Liste de ports ex: 22,23,25,80,200-1024,60000-">
</div> </div>
<div class="field" title="-PU"> <div class="field" title="-PU">
<label for="PUInput">UDP</label> <label for="PUInput">UDP</label>
<input type="text" id="PUInput" name="-PU" placeholder="Ports" list="servicesList" <input type="text" id="PUInput" name="PU" placeholder="Ports" list="servicesList"
pattern="([0-9\-]+|[a-z\-]+)(,[0-9\-]+|,[a-z\-]+)*" value="<?= $inputs['PU'] ?? "" ?>" pattern="([0-9\-]+|[a-z\-]+)(,[0-9\-]+|,[a-z\-]+)*" value="<?= $inputs['PU'] ?? "" ?>"
title="Liste de ports ex: 22,23,25,80,200-1024,60000-"> title="Liste de ports ex: 22,23,25,80,200-1024,60000-">
</div> </div>
@ -85,7 +85,7 @@ Exemples: <?= $_SERVER['REMOTE_ADDR']; ?>/24 <?= $_SERVER['SERVER_NAME']; ?> 10.
<div class="inline fields"> <div class="inline fields">
<div class="field" title="-PE"> <div class="field" title="-PE">
<div class="ui toggle checkbox"> <div class="ui toggle checkbox">
<input type="checkbox" id="PECheckbox" name="-PE" <?= $inputs['PE'] ?? false ? 'checked' : ''; ?> /> <input type="checkbox" id="PECheckbox" name="PE" <?= $inputs['PE'] ?? false ? 'checked' : ''; ?> />
<label for="PECheckbox">Echo request</label> <label for="PECheckbox">Echo request</label>
</div> </div>
</div> </div>
@ -102,47 +102,41 @@ Exemples: <?= $_SERVER['REMOTE_ADDR']; ?>/24 <?= $_SERVER['SERVER_NAME']; ?> 10.
</div> </div>
</div> </div>
</div> </div>
<div class="field" title="--exclude">
<label for="excludeInput">Exclure les hôtes ou réseaux</label>
<input type="text" id="excludeInput" name="exclude" placeholder="Hôte/réseau" list="targetsList"
pattern="[a-zA-Z0-9._\/,\-]*" value="<?= $inputs['exclude'] ?? "" ?>">
</div>
</div> </div>
<div class="field" title="-PO"> <div class="field" title="-PO">
<label for="POInput" title="PO">Protocole IP (par type)</label> <label for="POInput" title="PO">Protocole IP (par type)</label>
<input type="text" id="POInput" name="P0" placeholder="Protocole" <input type="text" id="POInput" name="PO" placeholder="Protocole"
pattern="[0-9,\-]+" value="<?= $inputs['PO'] ?? "" ?>" pattern="[0-9,\-]+" value="<?= $inputs['PO'] ?? "" ?>"
title="[num de protocole]"> title="[num de protocole]">
</div> </div>
<div class="fields"> <div class="fields">
<div class="field"> <div class="inline field" title="-PR">
<div class="ui toggle checkbox"> <div class="ui toggle checkbox">
<input type="checkbox" id="PRCheckbox" name="PR" <?= $inputs['PR'] ?? false ? 'checked' : ''; ?> /> <input type="checkbox" id="PRCheckbox" name="PR" <?= $inputs['PR'] ?? false ? 'checked' : ''; ?> />
<label for="PRCheckbox" title="PR">Ping ARP</label> <label for="PRCheckbox">Ping ARP</label>
</div> </div>
</div> </div>
<div class="field"> <div class="inline field" title="--send-ip">
<div class="ui toggle checkbox"> <div class="ui toggle checkbox">
<input type="checkbox" id="sendIPCheckbox" name="send-ip" <?= $inputs['send-ip'] ?? false ? 'checked' : ''; ?> /> <input type="checkbox" id="sendIPCheckbox" name="send-ip" <?= $inputs['send-ip'] ?? false ? 'checked' : ''; ?> />
<label for="sendIPCheckbox" title="send-ip">Pas de scan ARP</label> <label for="sendIPCheckbox">Pas de scan ARP</label>
</div> </div>
</div> </div>
</div> </div>
<div class="fields"> <div class="fields">
<div class="field"> <div class="inline field" title="-n">
<div class="ui toggle checkbox"> <div class="ui toggle checkbox">
<input type="checkbox" id="nCheckbox" name="n" <?= $inputs['n'] ?? false ? 'checked' : ''; ?> /> <input type="checkbox" id="nCheckbox" name="n" <?= $inputs['n'] ?? false ? 'checked' : ''; ?> />
<label for="nCheckbox" title="n">Ne jamais résoudre les noms DNS</label> <label for="nCheckbox">Ne jamais résoudre les noms DNS</label>
</div> </div>
</div> </div>
<div class="field"> <div class="inline field" title="-R">
<div class="ui toggle checkbox"> <div class="ui toggle checkbox">
<input type="checkbox" id="RCheckbox" name="R" <?= $inputs['R'] ?? false ? 'checked' : ''; ?> /> <input type="checkbox" id="RCheckbox" name="R" <?= $inputs['R'] ?? false ? 'checked' : ''; ?> />
<label for="nCheckbox" title="R">Toujours résoudre les noms DNS<br />(par défault seuls les hôtes actifs sont résolus)</label> <label for="nCheckbox">Toujours résoudre les noms DNS<br />(par défault seuls les hôtes actifs sont résolus)</label>
</div> </div>
</div> </div>
</div> </div>
@ -173,25 +167,25 @@ Exemples: <?= $_SERVER['REMOTE_ADDR']; ?>/24 <?= $_SERVER['SERVER_NAME']; ?> 10.
</div> </div>
</div> </div>
<div class="field"> <div class="inline field" title="-F">
<div class="ui toggle checkbox"> <div class="ui toggle checkbox">
<input type="checkbox" id="FCheckbox" name="F" <?= $inputs['F'] ?? false ? 'checked' : ''; ?> <input type="checkbox" id="FCheckbox" name="F" <?= $inputs['F'] ?? false ? 'checked' : ''; ?>
onchange="pInput.disabled = FCheckbox.checked" /> onchange="pInput.disabled = FCheckbox.checked" />
<label for="FCheckbox" title="F">Scanner les ports connus</label> <label for="FCheckbox">Scanner les ports connus</label>
</div> </div>
</div> </div>
<div class="field"> <div class="inline field" title="-p">
<label for="pInput" title="p">Scanner les ports</label> <label for="pInput">Scanner les ports</label>
<input type="text" id="pInput" name="p" placeholder="Ports" list="servicesList" <?= $inputs['F'] ?? false ? 'disabled' : ''; ?> <input type="text" id="pInput" name="p" placeholder="Ports" list="servicesList" <?= $inputs['F'] ?? false ? 'disabled' : ''; ?>
pattern="(([TU]:)?[0-9\-]+|[a-z\-]+)(,([TU]:)?[0-9\-]+|,[a-z\-]+)*" value="<?= $inputs['p'] ?? "" ?>" pattern="(([TU]:)?[0-9\-]+|[a-z\-]+)(,([TU]:)?[0-9\-]+|,[a-z\-]+)*" value="<?= $inputs['p'] ?? "" ?>"
title="Liste de ports ex: ssh,ftp,U:53,111,137,T:21-25,80,139,8080"> title="Liste de ports ex: ssh,ftp,U:53,111,137,T:21-25,80,139,8080">
</div> </div>
<div class="field"> <div class="inline field" title="-r">
<div class="ui toggle checkbox"> <div class="ui toggle checkbox">
<input type="checkbox" id="rCheckbox" name="r" <?= $inputs['r'] ?? false ? 'checked' : ''; ?> /> <input type="checkbox" id="rCheckbox" name="r" <?= $inputs['r'] ?? false ? 'checked' : ''; ?> />
<label for="rCheckbox" title="r">Ne pas mélanger les ports</label> <label for="rCheckbox">Ne pas mélanger les ports</label>
</div> </div>
</div> </div>
</div> </div>
@ -270,8 +264,12 @@ foreach (scandir($SCANS_DIR) as $filename) {
new TagsInput(PAInput) new TagsInput(PAInput)
new TagsInput(PUInput) new TagsInput(PUInput)
new TagsInput(POInput) new TagsInput(POInput)
new TagsInput(pInput) var pTagsInput = new TagsInput(pInput)
new TagsInput(dnsServersInput) new TagsInput(dnsServersInput)
FCheckbox.onchange = () => {
pInput.disabled = FCheckbox.checked
pTagsInput.setDisabled(FCheckbox.checked)
}
newScanForm.onsubmit = function(event) { newScanForm.onsubmit = function(event) {
if (this.checkValidity()) { if (this.checkValidity()) {

View File

@ -29,14 +29,14 @@ foreach ($inputs as $arg => $value) {
} }
$basedir = "{$_SERVER['REQUEST_SCHEME']}://{$_SERVER['SERVER_NAME']}:{$_SERVER['SERVER_PORT']}" . dirname($_SERVER['REQUEST_URI']); $basedir = "{$_SERVER['REQUEST_SCHEME']}://{$_SERVER['SERVER_NAME']}:{$_SERVER['SERVER_PORT']}" . dirname($_SERVER['REQUEST_URI']);
exec("nmap$args --stylesheet $basedir/stylesheet.xsl -oX - $targets 2>&1", $result, $code); exec("nmap$args --stylesheet $basedir/stylesheet.xsl -oX $SCANS_DIR/tmp $targets 2>&1", $stderr, $code);
if ($code) { if ($code) {
http_response_code(500); http_response_code(500);
die(implode("<br/>\n", $result)); die(implode("<br/>\n", $stderr));
} }
$xml = new DOMDocument(); $xml = new DOMDocument();
$xml->loadXML(implode("\n", $result)); $xml->load("$SCANS_DIR/tmp");
$xml->insertBefore($xml->createProcessingInstruction('xslt-param', "name='saveAs' value='".htmlentities($saveAs, ENT_QUOTES)."'"), $xml->documentElement); $xml->insertBefore($xml->createProcessingInstruction('xslt-param', "name='saveAs' value='".htmlentities($saveAs, ENT_QUOTES)."'"), $xml->documentElement);
$xml->insertBefore($xml->createProcessingInstruction('xslt-param', "name='scansDir' value='".htmlentities($SCANS_DIR, ENT_QUOTES)."'"), $xml->documentElement); $xml->insertBefore($xml->createProcessingInstruction('xslt-param', "name='scansDir' value='".htmlentities($SCANS_DIR, ENT_QUOTES)."'"), $xml->documentElement);

View File

@ -15,7 +15,7 @@
<xsl:choose> <xsl:choose>
<xsl:when test="$saveAs"><xsl:value-of select="$saveAs"/></xsl:when> <xsl:when test="$saveAs"><xsl:value-of select="$saveAs"/></xsl:when>
<xsl:when test="$compareWith"><xsl:value-of select="$compareWith"/></xsl:when> <xsl:when test="$compareWith"><xsl:value-of select="$compareWith"/></xsl:when>
<xsl:otherwise><xsl:value-of select="false"/></xsl:otherwise> <xsl:otherwise></xsl:otherwise>
</xsl:choose> </xsl:choose>
</xsl:variable> </xsl:variable>
<xsl:variable name="current" select="./nmaprun"/> <xsl:variable name="current" select="./nmaprun"/>
@ -23,9 +23,7 @@
<xsl:variable name="init" select="document(concat($scansDir, '/', $compareWith, '.xml'))/nmaprun"/> <xsl:variable name="init" select="document(concat($scansDir, '/', $compareWith, '.xml'))/nmaprun"/>
<xsl:template match="nmaprun"> <xsl:template match="nmaprun">
<xsl:variable name="targets" select="substring-after(@args, '-oX - ')"/> <xsl:variable name="targets" select="substring-after(@args, '/tmp ')"/>
<xsl:variable name="PS" select="substring-before(substring-after(@args, '-PS'), ' -')"/>
<xsl:variable name="F" select="contains(@args, '-F')"/>
<html lang="fr"> <html lang="fr">
<head> <head>
@ -34,7 +32,7 @@
<title> <title>
<xsl:text>lanScan - </xsl:text> <xsl:text>lanScan - </xsl:text>
<xsl:choose> <xsl:choose>
<xsl:when test="$name"><xsl:value-of select="$name"/></xsl:when> <xsl:when test="string-length($name)"><xsl:value-of select="$name"/></xsl:when>
<xsl:otherwise><xsl:value-of select="$targets"/></xsl:otherwise> <xsl:otherwise><xsl:value-of select="$targets"/></xsl:otherwise>
</xsl:choose> </xsl:choose>
</title> </title>
@ -55,7 +53,7 @@
<body> <body>
<form> <form>
<nav class="ui inverted teal fixed menu"> <nav class="ui inverted teal fixed menu">
<button class="ui teal button item" type="submit" formmethod="get" formaction="."> <button class="ui teal button item" type="submit" formmethod="get" formaction="{$basedir}">
<xsl:text>lan</xsl:text> <xsl:text>lan</xsl:text>
<svg class="logo" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 24 24" xml:space="preserve" width="40" height="40" <svg class="logo" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 24 24" xml:space="preserve" width="40" height="40"
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
@ -115,9 +113,10 @@
Exemples: 192.168.1.0/24 scanme.nmap.org 10.0-255.0-255.1-254"/> Exemples: 192.168.1.0/24 scanme.nmap.org 10.0-255.0-255.1-254"/>
<i class="satellite dish icon"></i> <i class="satellite dish icon"></i>
</div> </div>
<xsl:if test="$PS"><input type="hidden" name="PS" value="{$PS}"/></xsl:if> <xsl:call-template name="inputList">
<xsl:if test="$F"><input type="hidden" name="F" value="on"/></xsl:if> <xsl:with-param name="argList" select="substring-before(substring-after(@args, 'nmap -'), ' --stylesheet')"/>
<xsl:if test="$name"><input type="hidden" name="compareWith" value="{$name}"/></xsl:if> </xsl:call-template>
<xsl:if test="string-length($name)"><input type="hidden" name="compareWith" value="{$name}"/></xsl:if>
<button style="display: none;" type="submit" formmethod="get" formaction="{$basedir}/scan.php" onsubmit="targetsInputDiv.classList.add('loading')"></button> <button style="display: none;" type="submit" formmethod="get" formaction="{$basedir}/scan.php" onsubmit="targetsInputDiv.classList.add('loading')"></button>
<button class="ui teal icon submit button" type="submit" formmethod="get" formaction="{$basedir}/options.php" onclick="targetsInput.required=false"> <button class="ui teal icon submit button" type="submit" formmethod="get" formaction="{$basedir}/options.php" onclick="targetsInput.required=false">
<i class="sliders horizontal icon"></i> <i class="sliders horizontal icon"></i>
@ -130,7 +129,7 @@ Exemples: 192.168.1.0/24 scanme.nmap.org 10.0-255.0-255.1-254"/>
<main class="ui main container"> <main class="ui main container">
<h1 class="ui header"> <h1 class="ui header">
<xsl:choose> <xsl:choose>
<xsl:when test="$name"> <xsl:when test="string-length($name)">
<xsl:value-of select="$name"/> <xsl:value-of select="$name"/>
<div class="sub header"><xsl:value-of select="$targets"/></div> <div class="sub header"><xsl:value-of select="$targets"/></div>
</xsl:when> </xsl:when>
@ -214,6 +213,73 @@ $.toast({
</html> </html>
</xsl:template> </xsl:template>
<xsl:template name="inputList">
<xsl:param name="argList"/>
<xsl:variable name="nextArgs" select="substring-after($argList, ' -')"/>
<xsl:variable name="argAndValue">
<xsl:choose>
<xsl:when test="$nextArgs">
<xsl:value-of select="substring-before($argList, ' -')"/>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$argList"/></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:choose>
<xsl:when test="starts-with($argAndValue, '-')">
<xsl:choose>
<xsl:when test="contains($argAndValue, ' ')">
<xsl:call-template name="input">
<xsl:with-param name="name" select="substring(substring-before($argAndValue, ' '), 2)"/>
<xsl:with-param name="value" select="substring-after($argAndValue, ' ')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="input">
<xsl:with-param name="name" select="substring($argAndValue, 2)"/>
<xsl:with-param name="value" select="on"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="starts-with($argAndValue, 'P') or starts-with($argAndValue, 's') or starts-with($argAndValue, 'o')">
<xsl:call-template name="input">
<xsl:with-param name="name" select="substring($argAndValue, 1, 2)"/>
<xsl:with-param name="value" select="substring($argAndValue, 3)"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="input">
<xsl:with-param name="name" select="substring($argAndValue, 1, 1)"/>
<xsl:with-param name="value" select="substring($argAndValue, 2)"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="$nextArgs">
<xsl:call-template name="inputList">
<xsl:with-param name="argList" select="substring-after($argList, ' -')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="input">
<xsl:param name="name"/>
<xsl:param name="value"/>
<input type="hidden" name="{$name}">
<xsl:attribute name="value">
<xsl:choose>
<xsl:when test="$value"><xsl:value-of select="$value"/></xsl:when>
<xsl:otherwise>on</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</input>
</xsl:template>
<xsl:template match="host"> <xsl:template match="host">
<xsl:variable name="addr" select="address/@addr"/> <xsl:variable name="addr" select="address/@addr"/>
<xsl:variable name="initHost" select="$init/host[address/@addr=$addr]"/> <xsl:variable name="initHost" select="$init/host[address/@addr=$addr]"/>