Underc0de

Programación Scripting => Python => Mensaje iniciado por: insomnia en Agosto 24, 2020, 11:39:46 AM

Título: Cliente muy simple para HackerTarget (MiniPentestTool)
Publicado por: insomnia en Agosto 24, 2020, 11:39:46 AM
Hola dejo esto aca para alguien que le guste el Pentesting es un cliente para no usar HackerTarget desde la pagina web, para alguno que quiera ver el codigo o lo quiera modificar a su gusto o agregarle cosas

Github: https://github.com/imnsomia/MiniPentestTool

Uso:
Código (text) [Seleccionar]
python3 mpt.py

Instalar libreria:
Código (text) [Seleccionar]
pip3 install beatifulsoup4

si quieren en los comentarios dejenmen algo para programar y lo cuelgo en Github relacionado al pentesting nivel web o tambien al hacking en gral saludos!
Título: Re:Cliente muy simple para HackerTarget (MiniPentestTool)
Publicado por: ??????? en Agosto 24, 2020, 01:29:32 PM
Gracias por compartir, la probaré compañero y veré si se puede agregar algo más  ;D ;D

Saludos!
-Kirari
Título: Re:Cliente muy simple para HackerTarget (MiniPentestTool)
Publicado por: WHK en Agosto 24, 2020, 01:42:53 PM
Hola, podrías reemplazar todas tus funciones de la clase con una sola más genérica, por ejemplo:

def req(self, service):
        target = input("Target IP/Domain: ")
        r = requests.get("https://api.hackertarget.com/%s/?q=%s" % (service, target))
        soup = BeautifulSoup(r.text, 'lxml')
        funcion = soup.find_all('body')
        print(funcion[0].text)


Saludos.
Título: Re:Cliente muy simple para HackerTarget (MiniPentestTool)
Publicado por: WHK en Agosto 24, 2020, 02:00:30 PM
Mira, lo reduje un poco y eliminé el bs4 porque realmente no lo necesita ya que la api utiliza texto plano y no html:

https://gist.github.com/WHK102/f2989164a3f62bd64a5895fcf488b685

Código (python) [Seleccionar]
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import banner, requests


class HackerTargetIntegration():

    def __init__(self):

        banner.banner()

        methods = [
            'mtr',
            'nping',
            'dnslookup',
            'reversedns',
            'hostsearch',
            'findshareddns',
            'zonetransfer',
            'whois',
            'geoip',
            'reverseiplookup',
            'nmap',
            'subnetcalc',
            'httpheaders',
            'pagelinks'
        ]

        while(True):

            id = 0
            for method in methods:
                print('%d -> %s' % (id, method))
                id += 1

            method = input('>> ').strip()
            if(method and (int(method) <= len(methods))):
                self.req(methods[int(method)])
            else:
                print('El método no existe. Intente nuevamente.')


    def req(self, method):

        target = input('IP/Dominio objetivo: ')
        response = requests.get('https://api.hackertarget.com/%s/?q=%s' % (method, target))
        print(('-' * 20) + '\n' + response.text + '\n' + ('-' * 20) + '\n')



if __name__ == '__main__':

    try:
        HackerTargetIntegration()
   
    except KeyboardInterrupt as e:
        pass

    except Exception as e:
        raise e


A demás te voy a comentar algo para que lo apliques en tus futuros proyectos. Si te fijas, tu hiciste una separación distinta a la mia, tu hiciste una clase donde cada función se encarga de una tarea distinta (repetitiva pero distinta), esto te permitía ser utilizado por otras clases, pero yo en mi caso eliminé esa arquitectura por un código mas simple tomando en cuenta de que solo el usuario interactua con esa clase y no otros módulos o scripts. Tu concepto y el mio son dos conceptos totalmente diferentes y eso se debe a la separación por capas.

En tu caso, si querías hacer una clase modular tenías que haber separado la lógica de la clase con el script que lo ejecuta, en otras palabras, tu clase que hace todo el trabajo se llama capa de servicio y tu script principal tu controlador. Como vi que tu script completo era un controlador entonces lo resumí como controlador y no como módulo.

Si quieres puedes volver a crear las funciones y que estas funciones llamen a una única función encargada de hacer las solicitudes y luego la guardas como módulo y desde tu script principal que es el controlador haces la solicitud del input y llamas a la función de la clase por cada método disponible, y este listado de métodos debes obtenerlo desde el mismo array de la clase de servicio. Esto quiere decir: Que tendrás que crear una función por cada método a demás de tener una lista de métodos permitidos, de esta manera el controlador sabrá cuales métodos existen y evitarás tener que usar refracción para obtener el listado de funciones (algo inseguro y de no muy buena práctica) o mantener la función req con el método de manera dinámca más el listado de métodos permitidos. En este caso tendrás que hacer una validación antes de llamar al sitio web para preveer que el método no sea algo que el servcio web no soporte, crear excepciones tipo MethodNotFoundException, etc.

Saludos.
Título: Re:Cliente muy simple para HackerTarget (MiniPentestTool)
Publicado por: insomnia en Agosto 24, 2020, 10:35:20 PM
Wow gracias por el feedback, si es que en realidad lo hice asi nomas era un repositorio que tenia hace 3 años y queria recodearlo asi que si lo hice asi nomas, pero voy a tomar lo que me dijiste y lo voy actualizar gracias!
Título: Re:Cliente muy simple para HackerTarget (MiniPentestTool)
Publicado por: insomnia en Agosto 25, 2020, 03:32:46 AM
Bueno ahi updatie el Github de paso agregue el archivo del banner, al final quedo asi:

Código (python) [Seleccionar]
import banner, requests

class HackerTargetAPI():
    def __init__(self):
        self.methods = [
            'mtr',
            'nping',
            'dnslookup',
            'reversedns',
            'hostsearch',
            'findshareddns',
            'zonetransfer',
            'whois',
            'geoip',
            'reverseiplookup',
            'nmap',
            'subnetcalc',
            'httpheaders',
            'pagelinks'
        ]

    def req(self, opcion):
        try:
            i = input("[Target]: ")
            r = requests.get(f"https://api.hackertarget.com/{self.methods[int(opcion)]}/?q={i}")
            print(f"""
Resultados:
{r.text}""")
        except IndexError:
            print("No existe ese method")

if __name__ == '__main__':
    c = HackerTargetAPI()
    banner.banner()
    opcion = input(">> ")
    c.req(opcion)


Gracias por responder y para los que vean esto dejenmen abajo ideas para hacer relacionados a esto