Envoyer un CSV en HTTP en PowerShell

Envoyer un CSV en HTTP en PowerShell

Salut à tous, aujourd’hui j’ai eu un besoin d’envoyer un CSV en HTTP en PowerShell pour automatiser un envoi de fichier de résultat de script entre 2 serveurs. Ma grosse contrainte était que je pouvais pas faire du mode Push (cf. transfert SCP sans mot de passe) comme je partais d’une zone de sécurité moindre que celle de destination. Et comme, le fichier source venais d’un Windows, je ne voulais pas mettre en place un serveur Web IIS sur le serveur source pour un pauvre fichier CSV à transférer 2 fois par jour…

Du coup j’ai bricolé quelques lignes à la fin de mon script PowerShell pour exposer le fichier en HTTP et permettre au serveur destination de venir les « Puller » pour respecter le sens d’établissement du flux.

Et sans transition le script pour envoyer un CSV en HTTP en PowerShell :

Function New-SimpleHTTPListener {
  Param (         
    [Parameter()] [Int] $Port = 7443
  )
  Begin{
    $listener = New-Object System.Net.HttpListener
    $prefix = "http://localhost:$Port/"
    $listener.Prefixes.Add($prefix)
  }

  Process{

    try{
      $listener.Start()
      Write-Host "Listening on $Port ..."
      $pathwd = Get-Location
      while ($listener.IsListening) {
        $context = $listener.GetContext()

        if ($context.Request.HttpMethod -eq 'GET' -and $context.Request.RawUrl -eq '/quit')
        {
            $listener.Close()
            break;
        }    

        $HTTPresponse = $context.Response
        $HTTPresponse.StatusCode = "200"
        $HTTPResponse.Headers.Add("Content-Type","text/csv") 

        $RequestUrl = $context.Request.Url.OriginalString
        $data = [System.Text.UTF8Encoding]::UTF8.GetBytes([System.IO.File]::ReadAllText("$pathwd"  + '\' + ($RequestUrl.Split('/')[-1])))

        $HTTPresponse.ContentLength64 = $data.Length

        $output = $HTTPresponse.OutputStream

        $output.Write($data,0,$data.Length)

        $output.Close() 
      }
    }catch{
       Write-Warning "Error with Server : $_" 
    }Finally{
      Write-Warning "terminating Server : $_" 
      $listener.Stop()
    }
  }

  End{
    
  }
}

New-SimpleHTTPListener

Alors clairement c’est du bon gros « quick and dirty » :… Lire la suite

API REST pour Keepass en Powershell : Article MISC 108

API REST pour Keepass en Powershell

Hello à tous, l’année 2020 a été généreuse en articles MISC pour moi, et comme pour mes précédentes publications chez eux, j’ai repris la licence de « type B », Du coup aujourd’hui, je vous partage l’article de mars dernier sur le thème du développement d’une API REST pour Keepass en Powershell.

J’en profite pour préciser que l’article en question fera office de la fameuse documentation Kerberos que je vous promet maintenant depuis plusieurs années… voilà c’est fait comme ça, ce n’est plus dans ma todo 🙂 !

Voilà c’est tout : bonne lecture à tous et @+


KeeRest : mettez du DevOps dans votre KeePass

MISC 108 | mars 2020 | Étienne LADENT & Arnaud PETITJEAN

Nous avions vu dans MISC n°103 comment déployer une base KeePass en mode SaaS ciblant les particuliers ou de petits périmètres professionnels. Dans un autre monde, les pratiques DevOps se démocratisent et demandent d’augmenter l’agilité des développements tout en réduisant les délais de mise en production. Cet article est le fruit d’une collaboration entre un DevOps et un ingénieur SSI pour voir de quelle manière il est possible de tirer profit de KeePass dans ces environnements.

La gestion des mots de passe en entreprise … Lire la suite

Tweeter en PowerShell – PSTwitterAPI

Tweeter en PowerShell

Salut à tous, on nous a demandé d’organiser un petit Capture The Flag (CTF) en interne au boulot. Du coup, il a fallu faire quelques challenges et je me suis dit que j’allais refaire un challenge que j’avais bien aimé du SANS celui à base de tweet offusqués. Du coup j’ai voulu refaire le mien, la dernière fois, j’avais fait le crawler en Python, ce coup ci j’ai donc voulu Tweeter en PowerShell (au cas où vous n’auriez toujours pas compris que je kif ce langage…^^).

Alors j’aurais pu jouer à le faire à la main avec Invoke-RestMethod, mais bon une recherche Google Plus tard et je suis tombé sur : PSTwitterAPI qui fait très très bien le boulot. En fait le plus long ça a été de créer un compte Twitter, de générer les accès API en écriture et de préparer le fichier avec le flag caché dedans…^^

Mais du coup, Un fois que vous avez fait le fichier de résultat, le script pour le pusher sur le site, il tient en quelques lignes :

Import-Module PSTwitterAPI
$OAuthSettings = @{
  ApiKey = "xxx"
  ApiSecret = "yyy"  
  AccessToken = "123"
  AccessTokenSecret = "456"
}
Set-TwitterOAuthSettings @OAuthSettings

$a = Get-Content 
Lire la suite

Envoyer des syslog en Powershell

Envoyer des syslog en Powershell

Salut à tous, aujourd’hui je vais m’arrêter sur un bout de script dont j’ai eu besoin il y a quelques mois de cela pour envoyer des syslog en Powershell et que chaque machines où je faisait exécuter un script envoie directement ses résultats à à un serveur syslog. Et puis tant qu’on y était avec Grégoire, on a fait le récepteur syslog au passage histoire de pouvoir tester ça en local sans se faire trop mal à monter un vrai serveur syslog.

Syslog ?

Pour rappel Syslog est un protocole réseau qui permet d’envoyer des logs. Bien connu et largement utilisé, il permet de déporter les logs entre l’équipement et la machine qui les stocke, voire les traite (qui a dit Splunk?). Il y a 2 RFC qui cadrent la norme la RFC 3164 et la RFC 5424. En grande majorité, syslog passe sur UDP, le problème c’est que ça ne garantie pas la bonne arrivée de 100% des logs sur vos collecteurs syslog. Mais on commence à trouver de plus en plus de TCP dans l’utilisation de Syslog.

Chiffrement ? Signature ?

Une petite digression pour votre culture, même si en TCP on garantie la bonne réception … Lire la suite