Solution de W1tch3d pour A l'envers

intro misc algo

1 mars 2024

Description du challenge

Le challenge consiste à inverser des chaînes de caractères envoyées par un service distant. Le service envoie une chaîne de caractères précédée de >>> , et attend en retour la même chaîne, mais avec les caractères dans l’ordre inverse.

Résolution du challenge

Il faut commencer par se connecter sur le port TCP 4000 pour observer le comportement du service. À partir d’une invite PowerShell,

ncat localhost 4000

Écriture du code Powershell

Nous allons écrire un script Powershell pour automatiser le processus d’inversion et de soumission des chaînes de caractères. Le script utilisera un socket pour se connecter au service, recevoir des données, inverser les chaînes de caractères et renvoyer les résultats.

Voici le code powershell utilisé :

$server = "localhost"
$port = 4000

$tcpConnection = New-Object System.Net.Sockets.TcpClient($server, $Port)
$tcpStream = $tcpConnection.GetStream()
$reader = New-Object System.IO.StreamReader($tcpStream)
$writer = New-Object System.IO.StreamWriter($tcpStream)
$writer.AutoFlush = $true

$buffer = new-object System.Byte[] 1024
$encoding = new-object System.Text.AsciiEncoding 

function reverse
{
      Param(
        [string]$str
      )
      $sb = New-Object System.Text.StringBuilder($str.Length)
      write-verbose $sb.Capacity
  
      for ($i = ($str.Length - 1); $i -ge 4; $i--)
      {
        [void]$sb.Append($str.Chars($i))
      }
 
      return $sb.ToString()
}

while ($tcpConnection.Connected)
{
    [string]$chaine = $reader.readline()
    Write-Host $chaine
        
    if ($chaine.StartsWith("FCSC"))
    {
        write-host "FOUND :)"
        write-host $chaine -ForegroundColor Green
        break
    }
        
    if ($chaine.startswith(">"))
    {    
        $verlan = reverse($chaine)
        $command = $verlan+"`n"
        write-host $command
        $writer.Write($command)
        $writer.Flush()
    }
}

$reader.Close()
$writer.Close()
$tcpConnection.Close()

Explication du code

Comme d’autres, j’ai recontré la difficulté de l’absence de retour à la ligne dans les chaînes de caractères inversées soumises au service. c’est l’objet de la ligne

$command = $verlan+"`n"

Pareil, il faut filtrer les lignes renvoyées par le serveur pour n’inverser que les chaînes commençant par >>> .

Enfin, le script s’arrête de lui même dès que la chaîne renvoyée par le serveur débutera par “FCSC”, la solution sera alors affichée en couleur verte.

Conclusion

Ce challenge permet de s’exercer à manipuler les chaînes de caractères et à communiquer à l’aide d’un sockect TCP.