Selam millet! Bu konuda, bir önceki konumda paylaştığım hacklenmiş sitelerin nasıl hacklendiğini göstereceğim. Aslında pek bir şey yok. SQL login bypass, Default Credentials ve Execution After Redirect zafiyetlerinden yararlanarak panellere giriyor ve dosya yükleme alanlarındaki zayıflıklardan yararlanarak sitelere web shell yüklüyorum. Aynı dizin içerisinde farklı siteler varsa da onlara da index yüklüyorum. Videoda göstermedim ama bu sitede zararlı yazılımları yakalayan bir kod var. Dolayısıyla doğru düzgün shell yükleyemiyor ve sunucudaki diğer sitelerin config bilgilerini çekemiyorum. Videoda neden sesli anlatım olmadığını söylemiştim. Sesim kesiliyor ve çok cızırtı çıkıyor, söylediklerim anlaşılmıyor. Bilgisayarın ana kartı çizildiğinden dolayı olsa gerek. Hem bilgisayarda da durduk yere çizgiler çıkıyor.
Öncelikle sunucudaki siteleri çıkarmak için viewdns.info adresine gittik. Çıkardığımız siteleri yönetim panel bulucuya attık ve yönetim panellerini bulmasını sağladık. Hazır içerik yönetim sistemlerini ayrıştırdığı için sadece bilinmeyen sitelerle ilgilenmemiz gerekti. İsterseniz içerik yönetim sistemlerini otonom araçlar ile taratabilirsiniz. Belki deneme yanılma saldırısı yaparsınız. Elde ettiğimiz bilinmeyen kullanıcı giriş alanlarına tek tek login bypass, varsayılan kullanıcı bilgilerini ve EAR zafiyetini denedik. Burada bahsettiğim EAR zafiyeti No Redirect zafiyeti oluyor. EAR zafiyetini barındırıp barındırmadığını öğrenmek için Burp Suite ile bir kural yazmıştık. Sitelere bir şekilde girdikten sonra ise dosya yükleme alanlarından shell yükledik. Videoda iki tarayıcı kullanmamın nedenini anlamışsınızdır herhalde. Birinde yönlendirme kapalı, diğerinde açık.
Execution After Redirect: Bildiğiniz üzere siteye giriş yapmadan yönetim panelindeki sayfalarda gezinmeye çalıştığımızda bizi giriş sayfasına yönlendiriyor. Eğer yönlendirmeden sonra exit() veya die() fonksiyonu ile kodu sonlandırmıyorsa, yönlendirmelerin kapalı olduğu bir tarayıcıda yönlendirmeden sonra gelen kodlar çalıştırılacaktır. İlk kontrol edilen sitelerde olan buydu.
SQL Login Bypass: Anahtar gibi düşünebilirsiniz SQL sorgularını anahtar deliğine uyacak şekilde girdiğinizde yönetim panelinden yani kapıdan geçebiliyoruz. Tabi girdiğimiz SQL sorguları filtrelenmiyorsa.
Default Credentials: admin:123456, user:1234 gibi kullanıcı bilgileri sistemden sisteme değişen varsayılan kimlik bilgilerini oluşturuyor. Eğer hazır bir yönetim paneli vs. kullanılıyorsa internet üzerinden o panelin varsayılan kullanıcı bilgilerini bulabilirsiniz.
Video uzun olmasın diye sadece bir sunucudaki siteleri hacklemeye çalıştık. Ben normalde uzun süre bir çok sunucuya bakıyorum ve çoğunlukla bir şey elde edemiyorum. Yani sürekli yaptığım bir şey değil. Yapıp yapmamanız size kalmış, çok yorucu olabiliyor. Haliyle saçma gelebilir.
Video:
Hacklenen siteler:
Videodaki yönetim panel bulucu:
consol.php dosyası: Release v0.9.7 · nickola/web-console
black.php dosyası: iComsium/black.php at master · iComsium/iComsium
Öncelikle sunucudaki siteleri çıkarmak için viewdns.info adresine gittik. Çıkardığımız siteleri yönetim panel bulucuya attık ve yönetim panellerini bulmasını sağladık. Hazır içerik yönetim sistemlerini ayrıştırdığı için sadece bilinmeyen sitelerle ilgilenmemiz gerekti. İsterseniz içerik yönetim sistemlerini otonom araçlar ile taratabilirsiniz. Belki deneme yanılma saldırısı yaparsınız. Elde ettiğimiz bilinmeyen kullanıcı giriş alanlarına tek tek login bypass, varsayılan kullanıcı bilgilerini ve EAR zafiyetini denedik. Burada bahsettiğim EAR zafiyeti No Redirect zafiyeti oluyor. EAR zafiyetini barındırıp barındırmadığını öğrenmek için Burp Suite ile bir kural yazmıştık. Sitelere bir şekilde girdikten sonra ise dosya yükleme alanlarından shell yükledik. Videoda iki tarayıcı kullanmamın nedenini anlamışsınızdır herhalde. Birinde yönlendirme kapalı, diğerinde açık.
Execution After Redirect: Bildiğiniz üzere siteye giriş yapmadan yönetim panelindeki sayfalarda gezinmeye çalıştığımızda bizi giriş sayfasına yönlendiriyor. Eğer yönlendirmeden sonra exit() veya die() fonksiyonu ile kodu sonlandırmıyorsa, yönlendirmelerin kapalı olduğu bir tarayıcıda yönlendirmeden sonra gelen kodlar çalıştırılacaktır. İlk kontrol edilen sitelerde olan buydu.
SQL Login Bypass: Anahtar gibi düşünebilirsiniz SQL sorgularını anahtar deliğine uyacak şekilde girdiğinizde yönetim panelinden yani kapıdan geçebiliyoruz. Tabi girdiğimiz SQL sorguları filtrelenmiyorsa.
Default Credentials: admin:123456, user:1234 gibi kullanıcı bilgileri sistemden sisteme değişen varsayılan kimlik bilgilerini oluşturuyor. Eğer hazır bir yönetim paneli vs. kullanılıyorsa internet üzerinden o panelin varsayılan kullanıcı bilgilerini bulabilirsiniz.
Video uzun olmasın diye sadece bir sunucudaki siteleri hacklemeye çalıştık. Ben normalde uzun süre bir çok sunucuya bakıyorum ve çoğunlukla bir şey elde edemiyorum. Yani sürekli yaptığım bir şey değil. Yapıp yapmamanız size kalmış, çok yorucu olabiliyor. Haliyle saçma gelebilir.
Video:
Hacklenen siteler:
Kod:
https://ownzyou.com/zone/273705
https://ownzyou.com/zone/273706
https://ownzyou.com/zone/273704
Videodaki yönetim panel bulucu:
Python:
from concurrent.futures import ThreadPoolExecutor
from urllib.parse import urlparse
from sys import exit, argv
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0'
}
paths = [
"wp-login.php", "webadmin", "admin", "administrator", "admin1", "admin2", "login.php",
"admin.php", "login", "admin/login.php", "webadmin.php"
]
def scanner(site):
if not site.startswith(("http://", "https://")):
site = "http://" + site + "/"
elif not site.endswith("/"):
site += "/"
for path in paths:
url = f"{site}{path}"
try:
response = requests.get(url, headers=headers, timeout=10, allow_redirects=True)
if 'type="password"' in response.text and response.status_code != 404 and urlparse(url).netloc in urlparse(response.url).netloc:
if "wp-admin" in response.text or "wp-content" in response.text or "wp-includes" in response.text:
with open("wordpress.txt", "a") as file:
file.write(url + "\n")
cms = "WordPress"
elif "joomla" in response.text.lower():
with open("joomla.txt", "a") as file:
file.write(url + "\n")
cms = "Joomla"
elif "drupal" in response.text.lower():
with open("drupal.txt", "a") as file:
file.write(url + "\n")
cms = "Drupal"
elif "prestashop" in response.text.lower():
with open("prestashop.txt", "a") as file:
file.write(url + "\n")
cms = "PrestaShop"
elif "opencart" in response.text.lower():
with open("opencart.txt", "a") as file:
file.write(url + "\n")
cms = "OpenCart"
else:
cms = "Bilinmeyen"
with open("unknown.txt", "a") as file:
file.write(url + "\n")
print(f"[{cms}] {url}")
return
except requests.RequestException:
continue
def main():
if len(argv) < 3:
print("Kullanım: python admin.py <dosya_yolu> <thread_sayısı>")
exit(1)
try:
with open(argv[1], "r") as file:
sites = file.read().splitlines()
threads = int(argv[2])
except FileNotFoundError:
print("Dosya bulunamadı. Lütfen geçerli bir dosya yolu girin.")
exit(1)
except ValueError:
print("Geçersiz thread sayısı. Lütfen bir sayı girin.")
exit(1)
with ThreadPoolExecutor(max_workers=threads) as executor:
executor.map(scanner, sites)
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
print("\nİşlem kullanıcı tarafından durduruldu.")
exit(0)
consol.php dosyası: Release v0.9.7 · nickola/web-console
black.php dosyası: iComsium/black.php at master · iComsium/iComsium
Son düzenleme:




