Question Obtenir un téléscripteur dans un shell Connectback


Des amis me demandent souvent de m'aider à résoudre des problèmes mineurs liés à Linux et, le plus souvent, je suis obligé de me connecter au système distant. La création d'un compte et la connexion posent souvent beaucoup de problèmes (parfois, la boîte se trouve derrière un périphérique NAT, parfois le SSHD n'est pas installé, etc.). Je leur demande donc généralement de créer un shell avec connexion à l'arrière à l'aide de netcat ( nc -e / bin / bash). S'ils ne disposent pas de netcat, je peux simplement leur demander de récupérer une copie d'un fichier binaire compilé de manière statique, ce qui n'est pas si difficile ni long à télécharger et à exécuter.

Bien que cela fonctionne assez bien pour que je puisse entrer des commandes simples, je ne peux exécuter aucune application nécessitant un tty (vi), ni utiliser aucune fonction de contrôle des tâches. J'ai réussi à contourner ce problème en exécutant in.telnetd avec quelques arguments dans le shell connect-back qui m'attribueraient un terminal et me déposeraient dans un shell. Malheureusement, in.telnetd n'est généralement pas installé par défaut sur la plupart des systèmes.

Quel est le moyen le plus simple d’obtenir un terminal de terminal connect-back entièrement fonctionnel sans recourir à des packages non standard?

(Un petit programme C qui fait le travail conviendrait également, je n'arrive pas à trouver beaucoup de documentation sur la manière dont un TTY est attribué / attribué. Une solution qui ne nécessite pas de fouiller dans le code source de SSHD. et TELNETD serait bien :))


5
2018-01-13 14:03


origine


SSHd (imho) devrait être considéré comme un paquet par défaut pour toute installation sous Linux, si votre ami ne l’a pas, alors je suppose qu’Ubuntu a VNC par défaut (Système -> Préférences -> Bureau à distance). Si nous redéfinissons votre question comme suit: "Comment puis-je me connecter à SSH / VNC sur un boîtier distant derrière NAT, lorsque je ne peux pas configurer la redirection de port?" cela vous convient-il, car je peux y répondre assez facilement :) - BuildTheRobots
SSH inverse (port) redirection FTW! - BuildTheRobots


Réponses:


Il faut savoir que les coquilles non cryptées sur Internet sont une mauvaise chose. pentestmonkey post a quelques techniques qui peuvent être utilisées pour obtenir un TTY sur une session shell existante. Le plus susceptible de fonctionner sur n’importe quel système utilise Python:

python -c 'import pty; pty.spawn("/bin/sh")'

Remplacez la coque par une de votre choix.


4
2018-04-01 16:28





Ce n'est pas un programme standard, mais "socat tcp: your-host: 1234 exec: bash, pty" fera le travail.

Vous pouvez également sécuriser votre communication avec OpenSSL avec socat:

# Ton côté:
openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem
socat `tty`, raw, echo = 0 openssl-listen: 1237, reuseaddr, cert = cert.pem, verify = 0

# Leur côté:
socat openssl-connect: 127.0.0.1: 1237, verify = 0 exec: bash, pty, stderr, setsid

Cela fournira un beau terminal de connexion avec cryptage.


6
2018-03-24 21:57



Cool! Mais je reçois 2016/02/26 23:18:43 socat[22243] E SSL_connect(): error:14082174:SSL routines:SSL3_CHECK_CERT_AND_ALGORITHM:dh key too small sur "Leur côté". Des idées? - cYrus
Peut-être que quelque chose comme différentes versions de bibliothèques? Essayez de jouer avec les options liées à socat ssl et aux options openssl pour générer la clé / le certificat. - Vi.
Non, j'essaie ceci sur localhost, des deux côtés. - cYrus
OK, le but était de générer dhparam.pem avec openssl dhparam -out dhparam.pem 1024 et le passer à socaten utilisant le dhparam= option. - cYrus