Zpět na seznam článků     Číst komentáře (0)     Verze pro tisk

Python - FTP dictionary attack (2)

Autor: nitrexx   
25.9.2012

Druhý diel seriálu o tvorbe FTP dict. Attacku.


V tomto diely vás zoznámim s argumentmi príkazového riadku ktoré sú dobre známe Unixovým užívateľom kde za program vkladajú výrazy ako –t 85.12.25.45 –v –o output.txt a podobné .

My budeme používať na spúšťanie:

python ftpda.py  -s server –l login.txt –p pass.txt

Úplne jednoduché, -s je server na ktorý sa skúšame pripájať, -l je textový dokument z loginmi a –p je textový dokument z heslami.

Argumenty príkazového riadku a výnimky

Najprv musíme naimportovať moduly sys a getopt a pridáme aj globálne premenné:

  1. import getopt
  2. import sys
  3.  
  4. app = "Ftp Dictionary Attack"
  5. version = '1.0'
  6. author = "Nitrexx"

Táto časť kódu prijíma argumenty:

  1. print sys.argv[1:]#pre lepsie pochopenie, nepotrebny vypis
  2. try:#prijime argumenty, ak su zle zadane skoci na except, vypise spravu a skonci
  3.     opts,args = getopt.getopt(sys.argv[1:],"h:s:l:p:",["help","server=","lfile=","pfile="])
  4.     print opts #pre lepsie pochopenie, nepotrebny vypis
  5. except getopt.GetoptError:
  6.     print app, " ", "Created By: ",author, "Version: ", version
  7.     print 'ftpda.py -s <server> -l <login> -p <password>'
  8.     sys.exit(1)

V try: sú nadefinované 2 premenné prvá je options a druhá je argument. Teraz opts obsahuje napr.[(‘-s’, ‘server.com’)] a args zvyšok a ďalej je už nepotrebná. Metóda getopt() ako prvé prijíma z kadiaľ má prijímať argumenty, sys.argv[1:] určuje že ich má prijímať od prvej pozície keďže argv[0] je názov programu tak sa urobí výrez od prvej pozície. Ako druhé prijíma krátke názvy options a ako tretie prijíma dlhé názvy mali by sa končiť na „=“ ak prijímajú argument. A celé je to obalené do výnimiek, ak v try: nastane chyba skočí na except ,vypíše správu a skončí.

Už len jednoduchý cyklus for:

  1. for opt, arg in opts:
  2.     if opt in ('-h', '--help'):
  3.         print app, " ", "Created By: ",author, "Version: ", version
  4.         print 'ftpda.py -s <server> -l <login> -p <password>'
  5.         sys.exit()
  6.     elif opt in ("-l", "--lfile"):
  7.         loginfile = arg
  8.     elif opt in ("-p", "--pfile"):
  9.         passwordfile = arg
  10.     elif opt in ("-s", "--server"):
  11.         server = arg

Cyklom for prejdeme hodnoty opts ktoré rozdelíme do dvoch premenných opt je vlastnosť a arg je hodnota. Čiže ak sme zadali všetky argumenty správne tak server ,loginfile a passwordfile obsahujú argumenty ktoré boli zadané za –s –l –p.

Ešte chcem podotknúť že sa dá pristupovať k vlastnostiam(options) aj dlhou formou tj. –server= nazov –lfile=nazov –pfile=nazov.

A už iba overíme správnosť zadaných súborov :

  1. print '-' *15  
  2. print 'Login subor :' ,loginfile
  3. print 'Password subor :', passwordfile
  4. print '-' *15
  5.  
  6. try:
  7.     logins = open(loginfile,"r").readlines()
  8. except(IOError):
  9.     print "{0} nebol najdeny".format(loginfile)
  10.     sys.exit(1)
  11.  
  12. try:
  13.     passwords = open(passwordfile, "r").readlines()
  14. except(IOError):
  15.     print "{0} nebol najdeny".format(passwordfile)
  16.     sys.exit(1)

Pokúsi sa načítať riadky z loginfile do logins pri chybe vypíše reťazec a skončí a to isté spravý aj z heslami. A v ďalšom diely si ukážeme vlákna a zámky a prácu z FTP a potom už bude každý schopný napísať ftp dict. cracker.

Toto je výsledok tohto dielu :

  1. import getopt
  2. import sys
  3.  
  4. app = "Ftp Dictionary Attack"
  5. version = '1.0'
  6. author = "Nitrexx"
  7.  
  8. print sys.argv[1:]#pre lepsie pochopenie, nepotrebny vypis
  9. try:#prijime argumenty, ak su zle zadane skoci na except, vypise spravu a skonci
  10.     opts,args = getopt.getopt(sys.argv[1:],"h:s:l:p:",["help","server=","lfile=","pfile="])
  11.     print opts #pre lepsie pochopenie, nepotrebny vypis
  12.     print args
  13. except getopt.GetoptError:
  14.     print app, " ", "Created By: ",author, "Version: ", version
  15.     print 'ftpda.py -s <server> -l <login> -p <password>'
  16.     sys.exit(1)
  17. for opt, arg in opts:
  18.     if opt in ('-h', '--help'):
  19.         print app, " ", "Created By: ",author, "Version: ", version
  20.         print 'ftpda.py -s <server> -l <login> -p <password>'
  21.         sys.exit()
  22.     elif opt in ("-l", "--lfile"):
  23.         loginfile = arg
  24.     elif opt in ("-p", "--pfile"):
  25.         passwordfile = arg
  26.     elif opt in ("-s", "--server"):
  27.         server = arg
  28.  
  29. print '-' *15  
  30. print 'Login subor :' ,loginfile
  31. print 'Password subor :', passwordfile
  32. print '-' *15
  33.  
  34. try:
  35.     logins = open(loginfile,"r").readlines()
  36. except(IOError):
  37.     print "{0} nebol najdeny".format(loginfile)
  38.     sys.exit(1)
  39.  
  40. try:
  41.     passwords = open(passwordfile, "r").readlines()
  42. except(IOError):
  43.     print "{0} nebol najdeny".format(passwordfile)
  44.     sys.exit(1)

Všechny díly seriálu

Python - FTP dictionary attack (1)
Python - FTP dictionary attack (2)
Python - FTP dictionary attack (Zdrojový kód)
Líbil se Vám článek?
Budeme potěšeni, pokud vás zaujme také reklamní nabídka

Social Bookmarking

     





Hodnocení/Hlasovalo: 1.8/10

1  2  3  4  5    
(známkování jako ve škole)