Bildiğiniz üzere ülkemizde operatörler internet bağlantısı aldığınızda size bir modem veriyorlar. Fakat bu modemi o kadar kısıtlıyorlar ki modemin içerisindeki kullanıcı adı ve şifreye erişemiyorsunuz, modemin içerisinde hiçbir ayar yapamıyorsunuz, hatta dns adresini bile değiştiremiyorsunuz. Türk telekom da bu operatörlerden bir tanesi ve verdiği ZyXEL modemin içerisindeki kullanıcı adı ve şifre bilgisini bile öğrenmek mümkün değil. Fakat bugün yazacağım bu rehber sayesinde modemde Root yetkisi elde ederek kullanıcı adı ve şifreyi öğreneceğiz. Adım adım başlayalım.

ZyXEL EX3301-T0 Root Şifresi Nasıl Öğrenilir?​


Öncelikle root şifresi için bu Python kodunu kullanacağız:

Python:
import json, requests
from Crypto.Cipher import AES
from base64 import b64decode
from Crypto.Util.Padding import unpad

def print_passwords (ip, aes_key, session_key):
    aes_key = aes_key
    cookies = {
        "_TESTCOOKIESUPPORT": "1",
        "Session": session_key
    }
    headers = {
        "Accept": "application/json, text/javascript, */*; q=0.01",
        "Accept-Encoding": "gzip, deflate",
        "Accept-Language": "nl,en-US;q=0.7,en;q=0.3",
        "Connection": "keep-alive",
        "Host": ip,
        "If-Modified-Since": "Thu, 01 Jun 1970 00:00:00 GMT",
        "Referer": f"http://{ip}/",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/110.0",
        "X-Requested-With": "XMLHttpRequest"
    }

    response = requests.get(f"http://{ip}/cgi-bin/DAL?oid=login_privilege", cookies=cookies, headers=headers).json()
    ct = b64decode(response["content"])
    iv = b64decode(response["iv"])
    key = b64decode(aes_key)
    cipher = AES.new(key, AES.MODE_CBC, iv[:16])
    pt = unpad(cipher.decrypt(ct), AES.block_size)
    data = json.loads(pt)
    for object in data["Object"]:
        try:
            print(f"password for {object['Username']}: {object['Password']}")
        except KeyError:
            pass

ip = "192.168.1.1"
session_key = str(input("Session:"))
aes_key = str(input("AesKey:"))
print()
print_passwords(ip, aes_key, session_key)

  • İlk olarak modem arayüzüne giriyoruz.
  • F12'ye basıp Uygulama sekmesine geçiyoruz.
  • Burada Local Storage > 192.168.1.1 altından AesKey değerini not ediyoruz:

    turk telekom zyxel sifre alma (1).webp
  • Şimdi Cookies (Çerezler) altından da Session değerini not alıyoruz.


    turk telekom zyxel sifre alma (2).webp
  • Not aldığımız verileri Phyton kodunu çalıştırdıktan sonra istenilen yere giriyoruz:

    turk telekom zyxel sifre alma (3).webp


  • Bu işlem sonucunda Root şifremizi öğreniyoruz:

    turk telekom zyxel sifre alma (5).webp


  • Öte yandan şu anda Root hesabı kapalı olduğundan erişemiyoruz:

    turk telekom zyxel sifre alma (6).webp


  • Şimdi Router arayüzündeki kullanıcı hesabı düzenleneme bölümüne giriyoruz.
  • admin yazan kutucuğu seçip disable="disable" yazan kısmı silerek butucuyu devreye alıyoruz:

    turk telekom zyxel sifre alma (7).webp



  • Bir sonraki adımda admin kullanıcısının ismini root yazıyoruz ve az önce öğrendiğimiz root şifresini yazıp Tamam diyoruz:

    turk telekom zyxel sifre alma (8).webp



    turk telekom zyxel sifre alma (9).webp


  • Artık arayüzde bütün işlevlere erişiminiz olmalı. Genişbant kısmına girip bir bakalım:


    turk telekom zyxel sifre alma (10).webp


  • Bağlantımızı düzenleyelim:


    turk telekom zyxel sifre alma (11).webp


  • Ve artık PPP altında kullanıcı adınızı ve şifrenizi görebilirsiniz:


    turk telekom zyxel sifre alma (12).webp
Rehberin görsellerini sağlayan Çağan Çelik'e özel teşekkürlerimi iletiyorum. Kendisi yakında video halini de paylaşacak.
 
Son düzenleme:
Aranıza ben de katılayım hocam. @serkan eryiğit hocamın gönderdiği linkle root şifresini çözdüm fakat aynı şekilde modem adın değiştirilmesine izin vermiyor. Şimdiyse şifre geçersiz hatası alıyorum.

Baştaki script bende root şifresini vermedi, admin şifresi ise boştu. ChatGPT kullanarak oluşturduğum başka bir script bana seans ve AesKey anahtarlarıyla çektiğim verinin içinde root hesabı ve şifresi olmadığı izlenimini verdi.
Script: Windows2.py
 
Son düzenleme:
Merhaba EX3501-T0 modemini kullanıyorum fakat 2 saat uğraştım son adımda ayarlar kaydedilmedi acil destek beklemekteyim yardımcı olur musunuz? Ek olarak root şifresini ilk yöntemdeki gibi uğraşmadan bu linke girip modemin seri numarasını yazıp root şifresini öğrenebilirsiniz.


Benimki de aynı modem, olayı çözebildiniz mi?
Forumdaki adımları denedim admin ismi değiştirme kısmı çalışmıyor, mecbur başka modem mi almak gerekecek acaba.

Cihaz bende olmadığından dolayı şu anda herhangi bir firmware yükleme şansım yok. Ama global FW ile bir sorun yaşayacağınızı düşünmüyorum açıkçası.
selam EX3501-T0 cihazda dns ayarları kapalı, değiştirmek için millenicom'a ilettim Türk Telekom'a kayıt açtı onlar gelip yaparlar olmazsa modemi değiştirirler dedi ama telekom teknisyeni böyle bir işlem yok dns değiştiremeyiz bütün modemler dns kilitli dedi. Bunun çözümünü biliyor musunuz, kendim modem alsam ont gpon sistemi olduğu için o da çalışmazmış, bu dns işini nasıl çözebiliriz sizce?
 
Son düzenleme:
EX3501-T0 cihazda dns ayarları kapalı, değiştirmek için millenicom'a ilettim, Türk Telekom'a kayıt açtı onlar gelip yaparlar olmazsa modemi değiştirirler dedi. Ama Telekom teknisyeni böyle bir işlem yok dns değiştiremeyiz bütün modemler dns kilitli dedi. Bunun çözümünü biliyor musunuz, kendim modem alsam ont gpon sistemi olduğu için o da çalışmazmış, bu dns işini nasıl çözebiliriz sizce?
Başka bir modem alırsınız, eski modemin MAC adresini kopyalayıp yeni modemde MAC spoof yapmak suretiyle interneti kullanırsınız diye düşünüyorum. Recep hocam vakti zamanında bu işlemle alakalı bir video yapmıştı.
 
Başka bir modem alırsınız, eski modemin MAC adresini kopyalayıp yeni modemde Mac spoof yapmak suretiyle interneti kullanırsınız diye düşünüyorum. Recep hocam vakti zamanında bu işlemle alakalı bir video yapmıştı.

O videoyu izledim elimdeki Dark WRT302 cihaza uyguladım ama ppoe bağlantı hatası veriyor.
 
(async () => {
let ip = location.hostname;

// LocalStorage’den AES Key al
let aesKey = localStorage.getItem("AesKey");
if (!aesKey) {
console.error("AesKey bulunamadı!");
return;
}

// Router'dan JSON çek (cookie otomatik gider)
let response = await fetch(http://${ip}/cgi-bin/DAL?oid=login_privilege, {
credentials: "include",
headers: {
"X-Requested-With": "XMLHttpRequest"
}
});

let data = await response.json();

const b64ToBytes = (b64) =>
Uint8Array.from(atob(b64), c => c.charCodeAt(0));

async function decryptAES(aesKeyBase64, ivBase64, ctBase64) {
let keyBytes = b64ToBytes(aesKeyBase64);
let ivBytes = b64ToBytes(ivBase64);
let ctBytes = b64ToBytes(ctBase64);

let key = await crypto.subtle.importKey(
"raw",
keyBytes,
{ name: "AES-CBC" },
false,
["decrypt"]
);

let decrypted = await crypto.subtle.decrypt(
{ name: "AES-CBC", iv: ivBytes.slice(0, 16) },
key,
ctBytes
);

return new TextDecoder().decode(decrypted);
}

try {
let plainText = await decryptAES(aesKey, data.iv, data.content);
let json = JSON.parse(plainText);

console.log("Çözülen JSON:");
console.log(json);

if (json.Object) {
json.Object.forEach(o => {
if (o.Username && o.Password) {
console.log(Kullanıcı: [imath]{o.Username}, Şifre:[/imath]{o.Password});
}
});
}
} catch (err) {
console.error("Deşifre başarısız:", err);
}
})();