Author Topic: [EXPLOITED] Prima versione Alpha del programma... Per rendere l'idea  (Read 2913 times)

Offline NebulasIT

Ragazzi, come richiesto ho fatto un profilo Git adatto,e ho postato il codice... Ho strutturato una base di quello che sarà Exploited... Un coltellino svizzero dell'IT.

Per ora presenta solo un ping sweep, successivamente con il tempo vorrei facesse Scanning dei servizi, Sniffing e Poi ricerca di Exploit... Insomma diciamo che vado fin dove la fantasia mi porti, nelle prime versioni reinventato la ruota ahah, giusto per capire veramente come funzionano tools più professionali  ;), per poi avere le skills di crearne di mie, quindi prime versioni del programma per me sono una sfida, un motivo in più per essere più bravo, a capire come funzionano i tools e saperne creare all'esigenza. Dopo questa premessa ecco il Codice:
Code: You are not allowed to view links. Register or Login
# main.py - PROGRAMMA PRINCIPALE

# Librerie definite dall'utente
import ping_sweep
# Librerie del Python3
import sys
import os
import time
import argparse


def wall():
    os.system("clear")
    print("""@@@@@@@@  @@@  @@@  @@@@@@@   @@@        @@@@@@   @@@  @@@@@@@  @@@@@@@@  @@@@@@@
@@@@@@@@  @@@  @@@  @@@@@@@@  @@@       @@@@@@@@  @@@  @@@@@@@  @@@@@@@@  @@@@@@@@
@@!       @@!  [email protected]@  @@!  @@@  @@!       @@!  @@@  @@!    @@!    @@!       @@!  @@@
[email protected]!       [email protected]!  @!!  [email protected]!  @[email protected]  [email protected]!       [email protected]!  @[email protected]  [email protected]!    [email protected]!    [email protected]!       [email protected]!  @[email protected]
@!!!:!     [email protected]@[email protected]!   @[email protected]@[email protected]!   @!!       @[email protected]  [email protected][email protected]    @!!    @!!!:!    @[email protected]  [email protected]!
!!!!!:      @!!!    [email protected]!!!    !!!       [email protected]!  !!!  !!!    !!!    !!!!!:    [email protected]!  !!!
!!:        !: :!!   !!:       !!:       !!:  !!!  !!:    !!:    !!:       !!:  !!!
:!:       :!:  !:!  :!:        :!:      :!:  !:!  :!:    :!:    :!:       :!:  !:!
 :: ::::   ::  :::   ::        :: ::::  ::::: ::   ::     ::     :: ::::   :::: ::
: :: ::    :   ::    :        : :: : :   : :  :   :       :     : :: ::   :: :  :
\n\nWe will never be like the zombies of a botnet""")


def descr_wall():
    print("""

////////////////////////////////////////
/         LIST OF PARAMETERS           /
////////////////////////////////////////
/                                      /
/   -Ps -> Ping Sweep                  /
/                                      /
/                                      /
/   Work in Progress                   /
/                                      /
////////////////////////////////////////
            \n\n""")


def main():

    wall()
    descr_wall()
    # Chiamata a moduli Esterni (Caricati dall'utente)
    parser = argparse.ArgumentParser()
    parser.add_argument("-Ps", "--PingSweep",
                        help="Establish a range of IP addresses which map to live hosts.", action="store_true")
    args = parser.parse_args()

    if args.PingSweep:
        ping_sweep.ping_sweepone()

if __name__ == '__main__':
    main()

Ed ecco ora il modulo caricato del ping sweep:

Code: You are not allowed to view links. Register or Login
#PING SWEEP MODULO

import multiprocessing
import subprocess
import os


def ping_sweepone():
    pool_size = 255

    jobs = multiprocessing.Queue()
    results = multiprocessing.Queue()

    pool = [multiprocessing.Process(target=pinger, args=(jobs, results))
            for i in range(pool_size)]

    for p in pool:
        p.start()

    for i in range(1, 255):
        jobs.put('192.168.1.{0}'.format(i))

    for p in pool:
        jobs.put(None)

    for p in pool:
        p.join()

    while not results.empty():
        ip = results.get()
        print(ip)


def pinger(job_q, results_q):
    DEVNULL = open(os.devnull, 'w')
    while True:
        ip = job_q.get()
        if ip is None:
            break

        try:
            subprocess.check_call(['ping', '-c1', ip],
                                  stdout=DEVNULL)
            results_q.put(ip)
        except:
            pass

Codice Github: You are not allowed to view links. Register or Login

Per chi mi volesse dare una mano, ho un paio di domande:
Code: You are not allowed to view links. Register or Login
for i in range(1, 255):
        jobs.put('192.168.1.{0}'.format(i))

In questo for effettuo la richiesta ICMP degli indirizzi 192.168.1...255, però come potrei fare per far in modo che sia 192.168.1...255.1...255?, ho provato con:
Code: You are not allowed to view links. Register or Login
for i in range(1, 255):
        jobs.put('192.168.{0}.{0}'.format(i))

Ma non mi restituisce nulla  :( (Neanche errori)
« Last Edit: February 02, 2017, 03:50:55 PM by NebulasIT »
Website:  You are not allowed to view links. Register or Login
Email: [email protected]
 

Offline lynx

Re:[EXPLOITED] Prima versione Alpha del programma... Per rendere l'idea
« Reply #1 on: February 02, 2017, 07:07:51 PM »
nidificando un altro ciclo for?
 

Offline NebulasIT

Re:[EXPLOITED] Prima versione Alpha del programma... Per rendere l'idea
« Reply #2 on: February 02, 2017, 07:23:21 PM »
Sì fin quí c'ero arrivato ahaha, peró volevo vedere se si potesse fare in quel modo
« Last Edit: February 02, 2017, 08:36:32 PM by NebulasIT »
Website:  You are not allowed to view links. Register or Login
Email: [email protected]
 

Offline lynx

Re:[EXPLOITED] Prima versione Alpha del programma... Per rendere l'idea
« Reply #3 on: February 03, 2017, 01:31:42 PM »
Non è che non restituisce nulla, sta elaborando più combinazioni, prova a mettere un range da 1 a 2 per le prove.. ma il metodo non è quello.
Se non hai trovato una soluzione, ci guardiamo meglio dopo.
Cmq se devi usare i parametri, sta male che se non li aggiungi ti chiude il programma in faccia,
dopo ti faccio un commit su github (speriamo che stavolta fanno almeno un backup :P).
basta aggiungere un else al ciclo if della riga 52 nel main.py tipo:
Code: You are not allowed to view links. Register or Login
     if args.PingSweep:
        ping_sweep.ping_sweepone()
    else:
        print("""Please, add a parameter (E.g -Ps)""")

Poi specifica nel readme che verisone di python usare (anche se si capisce).
 

Offline NebulasIT

Re:[EXPLOITED] Prima versione Alpha del programma... Per rendere l'idea
« Reply #4 on: February 04, 2017, 12:45:55 AM »
Vaa bene! Comunque pensavo di splittare l'ip,sarebbe piú comodo inserire l'ip manualmente, in alternativa si potrebbero mettere dei For con dei range prefissati, comunque si sto cambiando il codice sempre... Perchè voglio che sia veloce (perció usare: multiprocessing), comunque io ho ritmi abbastanza veloci e contrastanti... Non ho mai lavorato su un codice con qualcuno essenzialmente, non vorrei che lavorassi su qualcosa che ho giá cambiato nello stesso momento ahaha, Secondo te meglio se facciamo un ip da inserimento manuale? Oppure ping sweep automatico al lancio del comando? Nel senso che non specifichi l'ip ma esamina soltanto quelli che stanno nei range del codice, tipo : 192.169.*.* oppure 10.100.*.*, insomma queste cose, tu che dici?
« Last Edit: February 04, 2017, 12:55:50 AM by NebulasIT »
Website:  You are not allowed to view links. Register or Login
Email: [email protected]
 

Offline lynx

Re:[EXPLOITED] Prima versione Alpha del programma... Per rendere l'idea
« Reply #5 on: February 04, 2017, 06:06:11 AM »
Prima di scrivere codice, devi avere un algoritmo in testa, anche se poi viene stravolto durante la stesura.
Premetti che noi comunemente usiamo routers con LAN e indirizzi di classe C, che di solito hanno questa forma 192.168.x.y ma è solo una convenzione portata a standard.
Non è detto che tu debba usare il programma solo nel range della classe C di un router casalingo o d'ufficio, per cui sarebbe sensato (visto che per eseguirlo devi essere connesso) fare un'analisi della rete per trovare il tuo IP e la netmask per poi calcolare il CIDR (chiedi a davenull se ha già scritto qualcosa) e restringere esponenzialmente il range degli IP (visto che non vuoi fare rumore..).
Almeno così riesci a vedere gli instradamenti automatici, se poi c'è un router.. è un'altra storia.
Quindi..
Si, sarebbe meglio dividere l'ip(v4) in 4 ottetti e selezionare solo alcuni range.
No, non serve inserire manualmente l'ip se lo puoi trovare con python stesso..

Questo è un esempio per estrarre le informazioni necessarie:
Code: You are not allowed to view links. Register or Login
#! /usr/bin/env python3
#Find local IP, netmask and hostname's IPs
#you must use superuser powers #
import itertools
import os
import re

def get_ip():
    f = os.popen('ifconfig')
    for iface in [' '.join(i) for i in iter(lambda: list(itertools.takewhile(lambda l: not l.isspace(),f)), [])]:
        if re.findall('^(eth|wlan)[0-9]',iface) and re.findall('RUNNING',iface):
            ip = re.findall('(?<=inet\saddr:)[0-9\.]+',iface)
            if ip:
                return ip[0]
    return False
my_ip = get_ip()
print("""This is your local IP """)
print(my_ip)

def get_netmask():
    f = os.popen('ifconfig')
    for iface in [' '.join(i) for i in iter(lambda: list(itertools.takewhile(lambda l: not l.isspace(),f)), [])]:
        if re.findall('^(eth|wlan)[0-9]',iface) and re.findall('RUNNING',iface):
            nm = re.findall('(?<=Mask:)[0-9\.]+',iface)
            if nm:
                return nm[0]
    return False
my_nm = get_netmask()
print("""This is your netmask """)
print(my_nm)


ips = os.popen('hostname --all-ip-addresses')
my_ips = ips.read()
print("""Those are your hostname's IPs """)
print(my_ips)
 

Offline NebulasIT

Re:[EXPLOITED] Prima versione Alpha del programma... Per rendere l'idea
« Reply #6 on: February 04, 2017, 08:59:26 AM »
Giusto! Allora ora aggiungo l'auto detect dell'ip(v4), ne derivo la classe, divido in 4 blocchi, e in base ad essa faccio i range dell'ip
Website:  You are not allowed to view links. Register or Login
Email: [email protected]
 
The following users thanked this post: lynx

Offline davenull

  • Administrator
  • Sr. Member
  • *****
  • Posts: 321
  • Thanked: 13 times
  • Gender: Male
  • JonixLug Co-Founder & Administrator
    • View Profile
    • davenull's blog
Re:[EXPLOITED] Prima versione Alpha del programma... Per rendere l'idea
« Reply #7 on: February 05, 2017, 02:30:50 AM »
vuoi una sottosezione come ho fatto per pimusicbox???
E-Mail: [email protected]
Website: You are not allowed to view links. Register or Login

You are not allowed to view links. Register or Login
 

Offline NebulasIT

Re:[EXPLOITED] Prima versione Alpha del programma... Per rendere l'idea
« Reply #8 on: February 05, 2017, 12:02:23 PM »
Sì, grazie :)
Website:  You are not allowed to view links. Register or Login
Email: [email protected]
 

Offline davenull

  • Administrator
  • Sr. Member
  • *****
  • Posts: 321
  • Thanked: 13 times
  • Gender: Male
  • JonixLug Co-Founder & Administrator
    • View Profile
    • davenull's blog
Re:[EXPLOITED] Prima versione Alpha del programma... Per rendere l'idea
« Reply #9 on: February 06, 2017, 12:12:36 AM »
fatto, ed ovviamente sei anche mod della stessa!!! ;)
E-Mail: [email protected]
Website: You are not allowed to view links. Register or Login

You are not allowed to view links. Register or Login
 

Offline devilicecream

Re:[EXPLOITED] Prima versione Alpha del programma... Per rendere l'idea
« Reply #10 on: February 07, 2017, 03:56:05 AM »
Concordo con Dario sul problema di verificare prima lo spazio di indirizzi su cui andare a fare il ping sweep.
Modificando leggermente il codice che ha postato proprio Dario dovrebbe essere semplice integrare questa funzionalità.


Per quanto riguarda la tua paura di mettersi a lavorare in concorrenza sulle stesse features, su github ci sono varie maniere per gestire la cosa. La mia preferita (e una delle più utilizzate nei grandi progetti open source) è questa:
 1. Chiunque identifichi una feature aggiuntiva o una falla, aggiunge una nuova issue (You are not allowed to view links. Register or Login).
 2. Se ne discute sul topic dedicato, quindi si sceglie una persona che ci lavora su, che diventa assignee della issue.
 3. L'assignee, e solo lui, forka l'intero repository e lavora sull'implementazione del bugfix/nuova feature. Tutte le comunicazioni riguardanti quel problema vengono fatte sul topic di quella issue su github.
 4. Quando ha finito, l'assignee fa una pull request sul repo principale, aggiungendo nel commento una reference alla issue originale.
 5. Se ci sono problemi nel merge automatico, o se si vogliono fare altre aggiunte, si ricomincia dalla 3. altrimenti si prosegue fa il merge della nuova feature/bugfix e si chiude la issue.


Ti apro una issue con il problema evidenziato da Dario, proviamo a seguire questo flow?
« Last Edit: February 07, 2017, 03:58:01 AM by devilicecream »
 
The following users thanked this post: davenull, lynx

Offline NebulasIT

Re:[EXPLOITED] Prima versione Alpha del programma... Per rendere l'idea
« Reply #11 on: February 07, 2017, 08:56:34 AM »
Certo!
Website:  You are not allowed to view links. Register or Login
Email: [email protected]
 

Offline NebulasIT

Re:[EXPLOITED] Prima versione Alpha del programma... Per rendere l'idea
« Reply #12 on: February 07, 2017, 04:20:05 PM »
Mi sto trovando un pò in difficoltà, allora la mia intenzione è di sviluppare il ping sweep così:

Esempio:

192.168.1.0 IP
255.255.0.0 SUBNETMASK

recuperati in automatico, quindi variano

splittare IP e Subnet

x1=192
x2=168
x3=1
x4=0

s1=255
s2=255
s3=0
s4=0

Confrontare se s3 e s4 sono 0: significa che i valori da incrementare fino a 255 sono x3 e x4,e ciò farlo in for.
E qui mi incasino  :P
Website:  You are not allowed to view links. Register or Login
Email: [email protected]
 

Offline davenull

  • Administrator
  • Sr. Member
  • *****
  • Posts: 321
  • Thanked: 13 times
  • Gender: Male
  • JonixLug Co-Founder & Administrator
    • View Profile
    • davenull's blog
Re:[EXPLOITED] Prima versione Alpha del programma... Per rendere l'idea
« Reply #13 on: February 09, 2017, 02:09:14 AM »
da qualche parte nel pc ho un mezzo progetto iniziato per il cidr calculator scritto in bash, devo trovarlo, commentarlo per bene e lo posto, così ti levi sta rogna ;)
E-Mail: [email protected]
Website: You are not allowed to view links. Register or Login

You are not allowed to view links. Register or Login
 
The following users thanked this post: lynx

Offline lynx

Re:[EXPLOITED] Prima versione Alpha del programma... Per rendere l'idea
« Reply #14 on: February 14, 2017, 03:59:12 AM »
Lascia stare gli ottetti, come ti scrivevo, bisogna ottenere il proprio indirizzo di rete ed elaborarlo seguendo alcuni accorgimenti.
Va calcolato il numero di host nella rete e bisogna escludere lo 0 e il 255. Non ha senso tentare di pingare indirizzi fuori dalla subnet.
Ma questo non rientra propriamente nel campo della programmazione, è lecito non saperlo, riguarda più i net-admins
(anche se saperlo può fare la differenza).

Per l'occasione ho fatto ping_network e netinfo:
You are not allowed to view links. Register or Login
Puoi prendere spunto o usarli aggiungendo il multiprocessing,
oppure inserendoli nel progetto EXPLOITED se vuoi.. fai te.
Li ho fatti anche per @devilicecream che adesso, per supportarci, minimo ci deve mettere una stelletta :)
e aprire un sacco di issue per i bugs  :-X

Questo è il codice di netinfo.py
Code: You are not allowed to view links. Register or Login
#!/usr/bin/env python3
# Import builtin modules
import itertools
import os
import re

# Check super user privileges
if os.geteuid() != 0:
    if not 'SUDO_UID' in os.environ.keys():
      print("you must use super user powers, try sudo next")
      exit(1)

# Functions

# Get local IP from ifconfig
def get_ip():
    f = os.popen('ifconfig')
    for iface in [' '.join(i) for i in iter(lambda: list(itertools.takewhile(lambda l: not l.isspace(),f)), [])]:
        if re.findall('^(eth|wlan)[0-9]',iface) and re.findall('RUNNING',iface):
            ip = re.findall('(?<=inet\saddr:)[0-9\.]+',iface)
            if ip:
                return ip[0]
            else:
                print("""Warning you are not connected""")
                exit(0)
    return False
# Example
#my_ip = get_ip()
#print("""This is your local IP """)
#print(my_ip)

# Get netmask from ifconfig
def get_netmask():
    f = os.popen('ifconfig')
    for iface in [' '.join(i) for i in iter(lambda: list(itertools.takewhile(lambda l: not l.isspace(),f)), [])]:
        if re.findall('^(eth|wlan)[0-9]',iface) and re.findall('RUNNING',iface):
            nm = re.findall('(?<=Mask:)[0-9\.]+',iface)
            if nm:
                return nm[0]
    return False
# Example
#my_nm = get_netmask()
#print("""This is your netmask """)
#print(my_nm)

# Get broadcast IP froma ifconfig
def get_Bcast():
    f = os.popen('ifconfig')
    for iface in [' '.join(i) for i in iter(lambda: list(itertools.takewhile(lambda l: not l.isspace(),f)), [])]:
        if re.findall('^(eth|wlan)[0-9]',iface) and re.findall('RUNNING',iface):
            Bcast = re.findall('(?<=Bcast:)[0-9\.]+',iface)
            if Bcast:
                return Bcast[0]
    return False
# Example
#my_Bcast = get_Bcast()
#print("""This is your broadcast """)
#print(my_Bcast)

# Get all IP from hostname
ips = os.popen('hostname --all-ip-addresses')
# Example
#my_ips = ips.read()
#print("""Those are your hostname's IPs """)
#print(my_ips)

Questo è il codice di ping_network.py
Code: You are not allowed to view links. Register or Login
#!/usr/bin/env python3
# Import user's modules
from netinfo import *
# Import builtin modules
import subprocess
import ipaddress

# Returns an iterator over the usable hosts in the network.
# The usable hosts are all the IP addresses that belong to the network,
# except the network address itself and the network broadcast address.
all_hosts = list(ipaddress.IPv4Interface(get_ip() + '/' + get_netmask()).network.hosts())

# For each IP address in the subnet, run the ping command
for i in range(len(all_hosts)):
    output = subprocess.Popen(['ping', '-c', '1', '-W 10', str(all_hosts[i])], stdout=subprocess.PIPE).communicate()[0]
    if "Destination Host Unreachable" in output.decode('utf-8'):
        pass
#        print(str(all_hosts[i]), "is Offline -> Destination Host Unreachable")
    elif "Request timed out" in output.decode('utf-8'):
        print(str(all_hosts[i]), "is Offline -> Request timed out")
    else:
        print(str(all_hosts[i]), "is Online")
 

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40