ThaySan
  • 👋Bienvenue
    • Avant-propos
  • 🚩CTF & Writeups
    • 2025 | EC2
      • Let's Crax
    • 2025 | HackDay
      • 🔑Cryptographie
        • Drunk Christmas
        • Find Eve 1
        • Well hidden message - Standard Code Encryption
      • 🔎Forensic
        • Copperwire Extraction
        • Distracted user
        • I believe you can't fly
      • 🧠Misc
        • Hello Steve
      • 💾Programmation
        • Lonely bot
        • Lonely bot #2
        • Lonely bot #3
        • Useless Animals Sorting
        • Who cares about SSI anyway ?
      • ⚙️Reverse
        • Just dig
        • Rusty_rev
        • The Cogs of Blackmail
      • 🎭Steganographie
        • It says a lot when there is no music
        • Mona LSB
        • Well hidden message - Insignificant blue
      • 🌐Web
        • Super Website Verificator 3000
        • The analytical engine leak
        • The Watchful Gears: Uncover the Secrets Within
        • Your region's finest
    • 2024 | Efrei - CyberNight
      • 🔑Cryptographie
        • Clavier spécial
        • Le futur
        • Securechain 30.0
        • Cascade
        • Shared Flag
        • Weird Algorithm
      • 🧊Minecraft
        • Introduction
        • Non aux Bouquins Trafiqués
        • Redstone Gold Block
      • 💾Programmation
        • Captcha 1.0
        • Intro à la prog
        • Captcha 2.0
      • ⚙️Reverse
        • Reverse the Reverse
        • Find me if you can
        • HuGO Decrypt
        • Kitten eXORcism
        • M30W Vault Tech
        • The Ugandan Labyrinth
      • 🎭Stéganographie
        • Le message
        • bon Le ordre
        • COD FORFLAG
        • Mauvaise note
        • Bruit
        • Un (un ?) drôle de QR code
        • Randonnée Guillerette à Bordeaux
      • 💻Système
        • Marche-pied
        • Escabot
        • régulation des Données et des Normes de Sécurité
      • 🌐Web
        • cybernight.zip
        • Mon champion préféré
        • Co(mpressed)okies
        • Gitty Mistake
        • JWT Kiddo
        • Parseur Farceur
      • L'enquête
        • L'enquête 2/6
        • L'Enquête 1/6
        • Bienvenue, enquêteur
    • 2024 | Star-Hack
      • 🔑Cryptographie
        • César, mais pas César
        • Double ennui
        • Langage secret
        • Quadratique Mystérieuse
        • ReSultAt
        • Sup3r S3cr3t
        • Warmup
      • 🔎Forensic
        • Cache-cache
        • Fichier ZIP protégé par mot de passe
        • HEADER
        • Investigation 1
        • Investigation 2
      • 🧠Misc
        • B4l4d3 Urb41n3
        • Bruhh, c'est quoi ça ?
        • Cut13
        • Pika Pika
      • 😈Pwn
        • Pwn0x01
        • Pwn0x02
        • Pwn0x03
      • ⚙️Reverse
        • Assembly
        • Rev0x00
        • Rev0x01
        • Rev0x02
      • 🌐Web
        • Clone Udemy
        • Flask
        • Guess_The_Passcode
        • PHP
        • Tickets
        • Usine de Cookies
    • 2024 | ECW
      • 🔑Cryptographie
        • Course hipPIN
    • 2024 | CTFREI Intro
      • 🔑Cryptographie
        • AES Intro
        • Aléatoire
        • Game of Luck
        • RSA Intro
        • RSA2
        • RSA3
      • 🔎Forensic
        • Mais qui est le photographe ?
        • Mais où est passé mon flag ?
        • Mémoire 1/4
        • Mémoire 2/4
        • Mémoire 3/4
        • Mémoire 4/4
        • My computer is talking
      • 📚OSINT
        • Avion ✈
        • Geoint
        • Google!
        • Googlint
        • Le pivot
        • Le temps commence maintenant
        • Sacré dossier
        • Socint
      • 💾Programmation
        • Try Me
        • Answer Me
        • Eval Me
        • Time Based
      • 😈Pwn
        • BOF Intro
        • Shop
        • BOF 2
        • BOF win()
      • ⚙️Reverse
        • CrackMe1
        • CrackMe2
        • CrackMe3
        • Hidden...
        • Something changed?
        • ZZZ
      • 🎭Stéganographie
        • Cybernight être comme
        • Joli paysage
        • Petit poisson
        • StegHide 'n' Seek
        • Un canard pas comme les autres
      • 💻Système
        • Bash Jail
        • Bash Jail Revenge
        • BrokenBin
        • GTFO Of Here
        • Pyjail
        • Pyjail Revenge
        • Strange input, right?
      • 🌐Web
        • SQLi
        • POST This Money
        • Give me my Flask PIN
        • Access
        • Render
        • RenderV2
        • Touchy
    • 2024 | DefCamp
      • 🔑Cryptographie
        • conv
        • oracle-srl
        • ctr
      • 🔎Forensic
        • i-got-a-virus
        • Alternating
        • call-me-pliz
      • 🧠Misc
        • pyterm
      • 📱Mobile
        • mobisec
      • 📚OSINT
      • 😈Pwn
      • ⚙️Reverse
      • 🕵️Traque
      • 🌐Web
        • noogle
        • production-bay
    • 2024 | 404CTF
      • 🔑Cryptographie
        • Bébé nageur
        • Le petit bain
        • Poor Random Number Generator [1/2]
        • Plongeon Rapide Super Artistique
        • J'éponge donc j'essuie
        • Poor Random Number Generator [2/2]
        • La Seine
        • J'ai glissé chef !
        • SEA - La face cachée de l'Iceberg
      • 🔎Forensic
        • Le tir aux logs
        • Darts Bank
        • Vaut mieux sécuriser que guérir
        • De bons croissants au beurre
        • Poids Raw vs. Cours Jette [1/3]
      • 🔌Hardware
        • Serial killer
        • Le soulevé de GND
        • Comment est votre modulation ? [1/2]
        • Sea side channel [1/4] - Introduction
        • Comment est votre modulation ? [2/2]
        • Sea side channel [2/4] - Reconnaissance
        • Sea side channel [3/4] - Mais où sont les triggers ?
      • 🤖IA
        • Du poison [1/2]
        • Du poison [2/2]
        • Des portes dérobées
      • 🧠Misc
        • Discord
        • De la friture sur la ligne
        • Bienvenue
        • Revers(ibl)e Engineering [0/2]
      • 📚OSINT
        • Légende
        • Not on my watch
        • Secret Training [1/2]
      • 😈Pwn
        • Pseudoverflow
        • Jean Pile
        • Mordu du 100m
        • Antismash
      • 🐈‍⬛Quantique
        • Des trains superposés
        • De l'écoute, pas très discrète
        • De la multiplicité des problèmes
      • ⚙️Reverse
        • ⭐Échauffement
        • ⭐Intronisation du CHAUSSURE
        • ⭐Bugdroid Fight [1/2]
        • ⭐Revers(ibl)e Engineering [1/2]
        • ⭐Bugdroid Fight [2/2]
        • ⭐Nanocombattants
        • ⭐Revers(ibl)e Engineering [2/2]
        • Le Tableau Noir
      • 🎭Stéganographie
        • ⭐L'absence
        • ⭐Regarder en stéréo
        • ⭐La Barre Fixe
        • ⭐Le grand écart
        • ⭐La chute
      • 🌐Web
        • ⭐Vous êtes en RETARD
        • ⭐Le match du siècle [1/2]
        • ⭐Exploit mag
        • ⭐Le match du siècle [2/2]
        • ⭐LE GORFOU 42
        • ⭐La boutique officielle
    • 2024 | CTFREI - Bordeaux
      • 🔑Cryptographie
        • zzz
      • 📚OSINT
        • Alexis Dumas
        • Back to the bureau
        • Dr Octopus
        • Folie et ambition
        • GeoGuessr
        • Hugo Nelots : prélude
        • La fin ?
        • La fuite Dumas
        • Un réseau suspect
      • 💾Programmation
        • Eval me 1
        • Eval me 2
        • Time Based
      • 💻Système
        • Broken Binary 1
        • Broken Binary 2
        • GTFO of here
        • Pyjail 1
        • Pyjail 2
        • Pyjail 3
        • Pyjail 4
      • 🌐Web
        • Au commencement était le verb
        • Becadmin
        • PHP Juggler
    • 2024 | HTB - Cyber Apocalypse Challenges
      • 🔗Blockchain
        • Lucky Faucet
        • Recovery
        • Russian Roulette
      • 🔑Cryptographie
        • Blunt
        • Dynastic
        • Iced TEA
        • Makeshift
        • Primary Knowledge
      • 🔎Forensic
        • An unusual sighting
        • Data Siege
        • Fake Boost
        • Game Invitation
        • It Has Begun
        • Phreaky
        • Pursue The Tracks
        • Urgent
      • 🔌Hardware
        • BunnyPass
        • Flash-ing Logs
        • Maze
        • Rids
        • The PROM
      • 🧠Misc
        • Character
        • Cubicle Riddle
        • Path of Survival
        • Stop Drop and Roll
        • Unbreakable
        • Were Pickle Phreaks
        • Were Pickle Phreaks Revenge
      • 😈Pwn
        • Delulu
        • Pet Companion
        • Tutorial
        • Writing on the Wall
      • ⚙️Reverse
        • BoxCutter
        • Crushing
        • FollowThePath
        • LootStash
        • MazeOfPower
        • Metagaming
        • PackedAway
        • QuickScan
      • 🌐Web
        • Flag Command
        • KORP Terminal
        • Labyrinth Linguist
        • LockTalk
        • Testimonial
        • TimeKORP
    • 2024 | UNbreakable
      • 🔑Cryptographie
        • start-enc
        • traffic-e
      • 🔎Forensic
        • easy-hide
        • password-manager-is-a-must
      • 🧠Misc
        • rfc-meta
      • 📱Mobile
        • flagen
        • improper-configuration
      • 📡Network
        • wifi-basic
        • wifiland
      • 📚OSINT
        • persistent-reccon
        • safe-password
      • 😈Pwn
        • intro-to-assembly
      • ⚙️Reverse
        • fake-add
      • 🎭Stéganographie
        • secrets-of-winter
      • 🌐Web
        • pygment
        • sided-curl
        • you-can-trust-me
    • 2023 | EFREI - CyberNight
      • 📚OSINT
        • Invest Now !
      • 😈Pwn
        • NSA Call Converter
      • ⚙️Reverse
        • CryptoVirus
        • WebChaussettes
      • 🌐Web
        • DoctoLeak
    • 2023 | Flag4All
      • 🔑Cryptographie
        • Aes IV
        • Crypt my loop
        • Kentucky fried chicken
        • RSA primes
        • Xor
    • 2022 | EFREI - CyberNight
      • 🔑Cryptographie
        • Coupé-décalé
        • ExFILEtration
        • Il s'est baissé ou pas
        • J'ai pas roté
        • Les allemands !
        • RSA Strong Prime generator
      • 🔎Forensic
        • Bomberman 1/2
        • Bomberman 2/2
        • Magic
        • Peu importe le chemin
        • Sniff sniff
        • Souvenir
        • Xray
      • 🔌Hardware
        • Class4
        • Find me 2/3
        • Identify 1/3
        • Yo listen 3/3
      • 🧠Misc
        • Et je tombe tombe tombe
        • Des yeux partout
        • RiGOLe
        • Roomba tricheur
        • Survey
        • Tinder
      • 💾Programmation
        • Repeat
        • Startup
        • Timing
      • ⚙️Reverse
        • Auth 1
        • Auth2
        • Auth3
        • Cryptoroomba
        • Tenet
      • 🎭Stéganographie
        • 50 shades of stephane legar
        • Chess master
        • Deviens champion sers toi de tout ce que tu as appris
        • Drifting in the bits
        • Pyramide
        • Spirale
      • 🌐Web
        • Ah bah c'est du propre
        • Cooking roomba
        • Leaderboard
        • vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
Propulsé par GitBook
Sur cette page
  • Challenge
  • Solution

Cet article vous a-t-il été utile ?

  1. CTF & Writeups
  2. 2025 | HackDay
  3. Programmation

Lonely bot

Flag: HACKDAY{Y3E4H_1ZY_R1GHT!}

Challenge

Description


You wander through the deserted streets of the abandoned docks south of Dagenham, convinced they might serve as a hideout for criminals. After exploring ruined buildings and broken machinery, your attention is caught by a strange light shining from beneath a rusty door. Forcing it open, you are surprised to find a small robot that seems eager to communicate with you. Try to uncover the secrets it holds, though you’re beginning to realize this might take some time...


More instances of the challenge:

  • challenges.hackday.fr:41521

  • challenges.hackday.fr:41522

  • challenges.hackday.fr:41523

  • challenges.hackday.fr:41524

  • challenges.hackday.fr:41525


There's an currently issue with the trailing newlines handling in the buffer from the server side. The challenge can still be solved. You have to send your answers without any trailing newlines added in the buffer. We are looking for a hotfix.


The use of socket and send() method can help to solve the challenge.

challenges.hackday.fr:41521

Ce challenge tourne sur un docker et n'est pas disponible

Solution

J'ai eu des problèmes avec pwntools (à cause de leur serveur notamment). Donc j'ai recodé les fonctions principales pour gérer l'échange client-serveur. C'est-à-dire l'envoi de données ainsi que la lecture par ligne.

Le code est commenté à chaque étape.

import socket
import hashlib
from deep_translator import GoogleTranslator
import re
from rich.console import Console
from datetime import datetime

console = Console()

# Une classe, parce qu'on pète la classe.
class Solver:
  def __init__(self, host, port):
    self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    self.sock.settimeout(2)
    self.sock .connect(((host, port)))
    self.answers = []

  # Fonction pour l'envoie de str, elle permet également de gérer un historique
  # des réponses envoyées ainsi que de leur print.
  def send(self, data: str, save: bool = True, newline: bool = False):
    if save:
      self.answers.append(data)
    console.print(f'[green]>[/green] {data}')
    self.sock.send(data.encode() + (b'\n' if newline else b''))

  # Fonction basique pour lire jusqu'à la détection d'un pattern
  def recvuntil(self, data: bytes) -> bytes:
    received = b''
    while True:
      received += self.sock.recv(1)
      if received == b'' or received.endswith(data):
        return received

  # Fonction pour lire une ligne complète (jusqu'à recevoir un \n)
  # Permet aussi de les afficher
  def recvline(self) -> bytes:
    line = self.recvuntil(b'\n')[:-1].decode()
    console.print(f'[red]<[/red] {line}')
    return line

  # Fonction de plus haut niveau, pour lire plusieurs lignes d'un coup
  # Ajoutant une ligne de vide après la réception pour la clareté des logs
  def recvlines(self, n = 1) -> list[bytes]:
    lines = []
    for _ in range(n):
      lines.append(self.recvline())
    console.print('')
    return lines

  # Résolution du chall
  def run(self):
    lines = self.recvlines(5)
    self.send('yes', save=False)
    
    # Flag 1
    # Question sur notre prénom. On retient aussi le sien par politesse
    lines = self.recvlines(3)
    name = lines[-2].split('is ')[1].strip()
    self.send('ThaySan')
    
    # Demande la température de fusion du laiton
    # https://fr.wikipedia.org/wiki/Laiton -> 932°C
    # Ensuite on calcule pour les autres 
    lines = self.recvlines(2)
    if 'Celsius' in lines[1]:
      self.send('932')
    elif 'Fahrenheit' in lines[1]:
      self.send('1709')
    elif 'Kelvin' in lines[1]:
      self.send('1205')
      
    # On nous demande la date d'invention
    # -> "invention du train à diesel" sur google
    # -> https://fr.wikipedia.org/wiki/Locomotive_électrique
    # -> "invention du train vapeur" sur google
    # -> https://fr.wikipedia.org/wiki/Train_à_sustentation_magnétique
    lines = self.recvlines(2)
    if 'diesel' in lines[1]:
      self.send('1923')
    elif 'electric' in lines[1]:
      self.send('1879')
    elif 'vapor' in lines[1]:
      self.send('1804')
    elif 'magnetic' in lines[1]:
      self.send('1979')
   
    # On nous demande de quelle base il s'agit. Le message ne change jamais
    # Un tour sur CyberChef permet de savoir si on reconnaît pas
    lines = self.recvlines(2)
    if lines[1].startswith('Ng!)(Z+9SVV'):
      self.send('base85')
    elif lines[1].startswith('SSBrbm93I'):
      self.send('base64')
    elif lines[1].startswith('JEQGW3TPO'):
      self.send('base32')
    
    # Il faut hasher nos anciennes réponses en suivant un format
    # Heureusement qu'on a créé un historique ;)
    lines = self.recvlines(3)
    answers = ','.join(self.answers).encode()
    if 'md5' in lines[-1]:
      h = hashlib.md5
    elif 'sha1' in lines[-1]:
      h = hashlib.sha1
    elif 'sha256' in lines[-1]:
      h = hashlib.sha256
    elif 'sha512' in lines[-1]:
      h = hashlib.sha512
    self.send(h(answers).hexdigest())
    
    # Le flag est là
    lines = self.recvlines(15)
    return True

while True:
  try:
    solver = Solver('challenges.hackday.fr', 41521)
    if solver.run():
      break
  except TimeoutError:
    break
  except KeyboardInterrupt:
    break
  except Exception as e:
    print(e.with_traceback())
    pass
< I'm feeling so lonely in this dead city...
< Since this industrial revolution, no one has come to talk to me...
< If only there was someone to talk to...
< OH wait, YOU ... YES YOU!
< Would you care to spend some time with me ...?

> yes
< Excellent, so we can start talking!
< Starting with the basics, the name! Mine is Zebulon Mavromichali Parsons
< What's yours?

> ThaySan
< Nice to meet you ThaySan!
< What's the fusion temperature of brass? Give it to me in Fahrenheit and strip off decimals

> 1709
< Nice, you're good in physics!
< But, what about history? When was the first vapor train built? Give me the year please!

> 1804
< Can't have you on this point, you know your basics! We'll see if you can keep up!
< 
Ng!)(Z+9SVVQzUKWo~0{WNB_^AYx&2WpgYbVs&&NcW7y2XdrKHWguxMZ6I}XX>MmOE-pVHD0gycbY&oUZ*_7YVQzDGWpW^CZXj%LcV
%*8VRL05Y-wv{ASYsBb7eL(Cn*

> base85
< Even in the encoding, you're good! Let's move on!
< I'm preparing the other questions...
< While you wait, can you hash the previous answers in sha1?

> 6fb318ac88a7f457a82dfe50a858fc314a4791eb
< You start with your name (format: hash(1,2,3,4))
< Good memory, nice for you!
< You make me feel like I'm not alone anymore, and you seem to be quite skilled!
< Here's the first flag: HACKDAY{Y3E4H_1ZY_R1GHT!}
< Let's keep talking!
< Now, I would like to play a little game with you, something more interactive!
<  I hope you know the game rock-paper-scissors!
<  I modified it a little bit, i'll explain.
<  I'm going to give you my first move, and you'll answer with your two moves.
<  My second move will be drawn randomly, and we'll see who wins!
<  In case of draw, we play another pair of moves in the same way.
<  To be simple, we're going to use R for Rock, P for Paper and S for Scissors.
<  The format of your answer should be: R,P
< Let's play together!
< My first move is R! What are yours?
PrécédentProgrammationSuivantLonely bot #2

Dernière mise à jour il y a 3 mois

Cet article vous a-t-il été utile ?

🚩
💾