Skip to content

Instantly share code, notes, and snippets.

@s0ubhik
Last active June 18, 2025 14:28
Show Gist options
  • Save s0ubhik/f9f467acd0b460fdb900280b959bdc7b to your computer and use it in GitHub Desktop.
Save s0ubhik/f9f467acd0b460fdb900280b959bdc7b to your computer and use it in GitHub Desktop.
import socket, subprocess, random, string
def generate_random_string(length=10):
characters = string.ascii_uppercase + string.digits
return ''.join(random.choice(characters) for _ in range(length))
def grab_ssh_banner(port=22, timeout=5):
host = 'localhost'
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(timeout)
sock.connect((host, port))
banner = sock.recv(1024).decode('utf-8').strip()
sock.close()
return banner.strip()
except ConnectionRefusedError:
print("FAILED")
except socket.timeout:
print("FAILED")
except Exception as e:
print(f"FAILED")
exit(1)
def run_command(command):
try:
result = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
return result.stdout.decode().strip()
except subprocess.CalledProcessError as e:
print(e)
print("FAILED")
exit(1)
print("""
OpenSSH Banner Hidder
=====================
""")
port = int(input("Enter Port: "))
print("[+] Getting Current Banner...", end='')
banner = grab_ssh_banner(port)
print('DONE')
pts = banner.split("-")
banner = "-".join(pts[2:])
len_banner = len(banner)
new_banner = generate_random_string(len_banner)
print("Current Banner:", banner)
print("New Banner:", new_banner)
print('[+] Copying Binary from /usr/sbin/sshd...')
run_command("cp /usr/sbin/sshd ./sshd")
print('[+] Searching for Current Banner...', end='')
out = run_command(f"strings -t d -a -n {len_banner} sshd | grep -i \"{banner}\"")
if len(out) == 0 or len(out.strip().split(" ")) < 2:
print("NOT FOUND")
exit(1)
print('FOUND')
offset = int(out.split(" ")[0])
print ("[+] Overwriting New Banner...", end='')
with open('sshd', 'r+b') as fp:
fp.seek(offset)
fp.write(new_banner.encode())
out = run_command(f"strings -t d -a -n {len_banner} sshd | grep -i \"{new_banner}\"")
if len(out) == 0 or len(out.strip().split(" ")) < 2:
print("FAILED")
exit(1)
if out.split(" ")[1].strip() != new_banner:
print("FAILED")
exit(1)
print('DONE')
print("[+] Stopping OpenSSH Server...", end='')
run_command("sudo systemctl stop ssh ssh.socket")
print('DONE')
print("[+] Copying binary to /usr/sbin/sshd...", end='')
run_command("sudo cp /usr/sbin/sshd ./sshd.back")
run_command("sudo cp ./sshd /usr/sbin/sshd")
print('DONE')
print("[+] Starting OpenSSH Server...", end='')
run_command("sudo systemctl start ssh ssh.socket")
print('DONE')
print("[+] Cleaning Up...", end='')
run_command("rm ./sshd")
print('DONE')
print("[+] Checking Banner...", end='')
banner2 = grab_ssh_banner()
pts = banner2.split("-")
banner2 = "-".join(pts[2:])
if banner2 == new_banner:
print('OK')
print('\n\033[32;1mOpenSSH Banner Hidden Successfully\033[0m\n')
exit(0)
print("FAILED")
print("[+] Restoring ssh...", end='')
run_command("sudo systemctl stop ssh ssh.socket")
run_command("sudo cp ./sshd.back /usr/sbin/sshd")
run_command("sudo systemctl start ssh ssh.socket")
print('DONE')
print('\n\033[31;1mFailed to Hide OpenSSH Banner\033[0m\n')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment